
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
U
    /X2                     @   s   d dl mZmZ d dlZd dlmZ dZde Z	dd Z
ejdd	 ejd
d	 eje
iZG dd deZdd Zd'ddZdd Zdd Zdd Zdd Zdd Zd(ddZdd  Zd!d" Zd#d$ Zd%d& ZdS ))    )HashableOrderedDictN)Columnz    
c                 C   s0   i }| j d k	r| j |d< | jd k	r,| j|d< |S )N	on_delete	on_update)r   r   )fieldparams r
   D/opt/alt/python38/lib/python3.8/site-packages/peewee_migrate/auto.pyfk_to_params   s    



r   c                 C   s
   d| j iS )N
max_length)r   fr
   r
   r   <lambda>       r   c                 C   s   | j | j| j| jdS )NZ
max_digitsZdecimal_placesZ
auto_roundZroundingr   r   r
   r
   r   r      s
      c                       s0   e Zd Zd	ddZ fddZd
ddZ  ZS )r   Nc                 C   s   |j | _ t|| _|j| _|j| _|j| _|j| _|j| _i | _	|j
d k	r`t|j
s`|j
| j	d< | jtkr| j	t| j | d | _d | _d | _t|tjr|jj | _|r|jjj |jkrd|jjj  | _n
|jj| _d S )Ndefaultzmigrator.orm['%s'])nametypefield_classnullZnullableZprimary_keyZ	db_columnindexuniquer	   r   callableFIELD_TO_PARAMSupdateZ	rel_modelZrelated_nameZto_field
isinstancepwForeignKeyField_metaZorm__name__)selfr   migratorr
   r
   r   __init__   s(    


zColumn.__init__c                    s,   t t|  }|dd | j D  |S )Nc                 S   s   i | ]\}}|t |qS r
   )repr.0kvr
   r
   r   
<dictcomp>;   s      z/Column.get_field_parameters.<locals>.<dictcomp>)superr   get_field_parametersr   r	   items)r"   r	   	__class__r
   r   r,   9   s    zColumn.get_field_parameters c                 C   s<   |   }ddd t| D }dj| j|| jj|dS )N, c                 s   s   | ]\}}d ||f V  qdS )z%s=%sNr
   r&   r
   r
   r   	<genexpr>A   s   z#Column.get_field.<locals>.<genexpr>z-{name}{space}={space}pw.{classname}({params}))r   space	classnamer	   )r,   joinsortedr-   formatr   r   r!   )r"   r3   Zfield_paramsZ	param_strr
   r
   r   	get_field>   s    

   zColumn.get_field)N)r0   )r!   
__module____qualname__r$   r,   r8   __classcell__r
   r
   r.   r   r      s   
r   c                    s"  g }| j j |j j}t t| }|rP fdd|D }|t| f|| t|t  }|rx|t| f|  g }g }	t | | D ]P}
 |
 ||
  }}t||}|dd}|r|| |dk	r|	|
|f q|r|t| f|| |	D ]\}
}|t	| |
| q |S )z&Find difference between Peewee models.c                    s   g | ]} | qS r
   r
   )r'   r   Zfields1r
   r   
<listcomp>Q   s     zdiff_one.<locals>.<listcomp>r   N)
r    fieldssetappendcreate_fieldsdrop_fieldscompare_fieldspopchange_fieldschange_not_null)model1Zmodel2kwargschangesZfields2Znames1r>   Znames2Zfields_Znulls_r   field1field2Zdiffr   r
   r<   r   diff_oneG   s2    

rL   Fc                    s   t   t |r(t  ttdd  D  tdd D g }fdd D D ]}|t | |d qb fddD D ]}|t|  q  D ](\}}|krq|t|| |d7 }q|S )Nc                 S   s   g | ]}|j j|fqS r
   r    r   r'   mr
   r
   r   r=   w   s     zdiff_many.<locals>.<listcomp>c                 S   s   g | ]}|j j|fqS r
   rM   rN   r
   r
   r   r=   x   s     c                    s   g | ]}| kr|qS r
   r
   rN   )models2r
   r   r=   }   s      )r#   c                    s   g | ]}| kr|qS r
   r
   rN   )models1r
   r   r=      s      )	r   Zsort_models_topologicallyreversedr   r@   create_modelremove_modelr-   rL   )rQ   rP   r#   reverserI   r   rG   r
   )rQ   rP   r   	diff_manyo   s"    

rV   c                    s4   d}t t fdd| jjD  }|j| j|dS )Nz&class {classname}(pw.Model):
{fields}
c                    s.   g | ]&}t |tjr|jd kst|f qS )id)r   r   ZPrimaryKeyFieldr   field_to_coder'   r   rH   r
   r   r=      s    
z!model_to_code.<locals>.<listcomp>)r4   r>   )INDENTNEWLINEr5   r    Zsorted_fieldsr7   r!   )ModelrH   templater>   r
   rZ   r   model_to_code   s    
r_   c                 K   s   dt | f| S )Nz@migrator.create_model
)r_   r]   rH   r
   r
   r   rS      s    rS   c                 K   s   d| j j S )Nzmigrator.remove_model('%s'))r    db_tabler`   r
   r
   r   rT      s    rT   c              	      s.   dt | jjt dt   fdd|D  f S )Nzmigrator.add_fields(%s'%s', %s),c                    s   g | ]}t |d f qS FrX   rY   rZ   r
   r   r=      s     z!create_fields.<locals>.<listcomp>)r\   r    ra   r5   r]   r>   rH   r
   rZ   r   rA      s
    rA   c                 O   s   d| j jdtt|f S )Nz migrator.remove_fields('%s', %s)r1   )r    ra   r5   mapr%   re   r
   r
   r   rB      s     rB   Tc                 K   s   t | f|}||rdndS )Nr0    )r   r8   )r   r3   rH   colr
   r
   r   rX      s    rX   c                 K   sb   t | t | }}||kr"ddiS t| }| j|d< t|}|j|d< tt| t|  S )NclsTr   )r   field_to_paramsr   dictr?   r-   )rJ   rK   rH   Z
field_cls1Z
field_cls2Zparams1Zparams2r
   r
   r   rC      s    

rC   c                 K   sF   t t| dd | }| jd k	rBt| jsBt| jtrB| j|d< |S )Nc                 S   s   i S )Nr
   r   r
   r
   r   r      r   z!field_to_params.<locals>.<lambda>r   )r   getr   r   r   r   r   )r   rH   r	   r
   r
   r   rj      s    


rj   c                 O   s$   d| j jdt dd |D f S )Nz migrator.change_fields('%s', %s)rb   c                 S   s   g | ]}t |d qS rc   rd   )r'   r   r
   r
   r   r=      s     z!change_fields.<locals>.<listcomp>)r    ra   r\   r5   re   r
   r
   r   rE      s     rE   c                 C   s"   |rdnd}d|| j jt|f S )NZdrop_not_nullZadd_not_nullzmigrator.%s('%s', %s))r    ra   r%   )r]   r   r   Z	operationr
   r
   r   rF      s    rF   )NF)T)collectionsr   r   Zpeeweer   Zplayhouse.reflectionr   ZVanilaColumnr[   r\   r   Z	CharFieldZDecimalFieldr   r   rL   rV   r_   rS   rT   rA   rB   rX   rC   rj   rE   rF   r
   r
   r
   r   <module>   s2   
   	*(

	