a
    5Xh                     @   s  d dl mZ d dlmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZ ddlmZmZmZmZmZ d	d
 ZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd  d eZG d!d" d"eZG d#d$ d$eZ G d%d& d&eZ!G d'd( d(e!Z"G d)d* d*e!Z#G d+d, d,e!Z$G d-d. d.e!Z%G d/d0 d0e!Z&d1S )2    )models)	Operation)
ModelState)field_referencesresolve_relation)normalize_together)cached_property   )AddField
AlterFieldFieldOperationRemoveFieldRenameFieldc                 C   s6   t  }|D ]&}||v r&td|| f || q
d S )Nz4Found duplicate value %s in CreateModel %s argument.)set
ValueErroradd)Zarg_nameobjsZ	used_valsval r   k/var/www/viveiro_mudafortebrasil/venv/lib/python3.9/site-packages/django/db/migrations/operations/models.py_check_for_duplicates   s    
r   c                       s@   e Zd Zdd Zedd Zdd Z fddZd	d
 Z  Z	S )ModelOperationc                 C   s
   || _ d S Nname)selfr   r   r   r   __init__   s    zModelOperation.__init__c                 C   s
   | j  S r   )r   lowerr   r   r   r   
name_lower   s    zModelOperation.name_lowerc                 C   s   |  | jkS r   r   r   r   r   	app_labelr   r   r   references_model   s    zModelOperation.references_modelc                    s   t  ||p| ||S r   )superreducecan_reduce_throughr   	operationr"   	__class__r   r   r%       s    zModelOperation.reducec                 C   s   | | j| S r   )r#   r   r'   r   r   r   r&   %   s    z!ModelOperation.can_reduce_through)
__name__
__module____qualname__r   r   r   r#   r%   r&   __classcell__r   r   r)   r   r      s   
r   c                       sr   e Zd ZdZg dZd fdd	Zdd Zdd	 Zd
d Zdd Z	dd Z
edd Zdd Z fddZ  ZS )CreateModelzCreate a model's table.)fieldsoptionsmanagersNc                    sz   || _ |pi | _|ptjf| _|p$g | _t | tddd | j D  tddd | jD  tddd | jD  d S )Nr0   c                 s   s   | ]\}}|V  qd S r   r   .0r   _r   r   r   	<genexpr>6       z'CreateModel.__init__.<locals>.<genexpr>basesc                 s   s6   | ].}t |d r|jjnt|tr*| n|V  qdS )_metaN)hasattrr9   Zlabel_lower
isinstancestrr   )r4   baser   r   r   r6   9   s   

r2   c                 s   s   | ]\}}|V  qd S r   r   r3   r   r   r   r6   B   r7   )	r0   r1   r   Modelr8   r2   r$   r   r   )r   r   r0   r1   r8   r2   r)   r   r   r   .   s    

zCreateModel.__init__c                 C   sn   | j | jd}| jr| j|d< | jr<| jtjfkr<| j|d< | jr`| jdt fgkr`| j|d< | jj	g |fS )N)r   r0   r1   r8   Zobjectsr2   )
r   r0   r1   r8   r   r>   r2   Managerr*   r-   r   kwargsr   r   r   deconstructD   s    


zCreateModel.deconstructc              
   C   s6   | t|| jt| jt| jt| jt| j	 d S r   )
Z	add_modelr   r   listr0   dictr1   tupler8   r2   r   r"   stater   r   r   state_forwardsQ   s    zCreateModel.state_forwardsc                 C   s.   |j || j}| |jj|r*|| d S r   apps	get_modelr   allow_migrate_model
connectionaliasZcreate_modelr   r"   schema_editor
from_stateto_statemodelr   r   r   database_forwards]   s    zCreateModel.database_forwardsc                 C   s.   |j || j}| |jj|r*|| d S r   rJ   rK   r   rL   rM   rN   Zdelete_modelrO   r   r   r   database_backwardsb   s    zCreateModel.database_backwardsc                 C   s    d| j ddrdnd| jf S )NzCreate %smodel %sproxyFzproxy  )r1   getr   r   r   r   r   describeg   s    zCreateModel.describec                 C   s   | j S r   r   r   r   r   r   migration_name_fragmentm   s    z#CreateModel.migration_name_fragmentc                 C   s   |  }|| jkrdS ||f}| jD ]4}|tjur$t|tjjtfr$t	|||kr$ dS q$| j
D ] \}}t|| jf||r` dS q`dS )NTF)r   r   r8   r   r>   r;   r=   Z	ModelBaser<   r   r0   r   )r   r   r"   r   Zreference_model_tupler=   _namefieldr   r   r   r#   q   s$    

zCreateModel.references_modelc           
   
      s  t  tr(| j jkr(| jdds(g S t  tr\| j jkr\t j| j	| j| j
| jdgS t  tr| j jkri | j j} jD ]}| jvr||d  qt| j| j	|| j
| jdgS t  t r| j jk rt| j| j	| j| j
 jdgS t  tr@| j jkr@t| j| j	i | j j ji| j
| jdgS t  tr| j jkrt| j| j	i | jd ji| j
| jdgS t  trJ| j jkrJt  trt| j| j	 j jfg | j| j
| jdgS t  trt| j fdd| j	D | j| j
| jdgS t  tr| j }dD ]B}||d }|r*ttt fdd	|D }|r*|||< q*|d}| jkr|d= t| j fd
d| j	D || j
| jdgS t  t r| j }dD ],}||}|r· fdd|D ||< q|d}| j!kr j|d< t| j fdd| j	D || j
| jdgS nPt  t"r| j jkrt  t#rt| j| j	i | jdg | jdg  j$i| j
| jdgS t  t%r  fdd| jdg D }t| j| j	i | jd|i| j
| jdgS t  t&r j'r fdd| jdg D }	|	rB|	| jd< n| jdd  t| j| j	i | jdg | jdg t(j) j' jdi| j
| jdgS t* + |S )NrW   F)r0   r1   r8   r2   order_with_respect_toc                    s(   g | ] \}}|| j kr jn|fqS r   )r   r^   r4   nvr(   r   r   
<listcomp>   s   z&CreateModel.reduce.<locals>.<listcomp>)unique_togetherindex_togetherc                 3   s$   | ]}t  fd d|D V  qdS )c                 3   s   | ]}| j kr|V  qd S r   r[   r4   frc   r   r   r6      s   z/CreateModel.reduce.<locals>.<genexpr>.<genexpr>NrE   r4   r0   rc   r   r   r6      s   z%CreateModel.reduce.<locals>.<genexpr>c                    s&   g | ]\}}|   jkr||fqS r   r    r`   rc   r   r   rd     s   c                    s"   h | ]}t  fd d|D qS )c                 3   s"   | ]}| j kr jn|V  qd S r   old_namenew_namerg   rc   r   r   r6     s   z/CreateModel.reduce.<locals>.<setcomp>.<genexpr>ri   rj   rc   r   r   	<setcomp>  s   z%CreateModel.reduce.<locals>.<setcomp>c                    s(   g | ] \}}| j kr jn||fqS r   rk   r`   rc   r   r   rd   )  s   indexesc                    s   g | ]}|j  j kr|qS r   r   )r4   indexrc   r   r   rd   G  s   c                    s   h | ]}| j kr|qS r   )
old_fieldsrj   rc   r   r   rn   Y  s   
rf   r0   r   ),r;   DeleteModelr   r1   rY   RenameModelold_name_lowerr/   rm   r0   r8   r2   AlterModelOptionsALTER_OPTION_KEYSpopr   AlterModelManagersAlterTogetherOptionOperationoption_nameoption_valueAlterOrderWithRespectTor_   r   model_name_lowerr
   r^   r   r   copyr   filterboolr   rl   IndexOperationAddIndexrp   RemoveIndexRenameIndexrq   r   Indexr$   r%   )
r   r(   r"   r1   keyr{   optionr_   Zoptions_indexesZoptions_index_togetherr)   rc   r   r%      s   












	













	zCreateModel.reduce)NNN)r+   r,   r-   __doc__serialization_expand_argsr   rB   rH   rT   rV   rZ   propertyr\   r#   r%   r.   r   r   r)   r   r/   )   s   
r/   c                   @   sL   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	e
dd ZdS )rs   zDrop a model's table.c                 C   s   d| j i}| jjg |fS Nr   )r   r*   r-   r@   r   r   r   rB   y  s    zDeleteModel.deconstructc                 C   s   | || j d S r   )Zremove_modelr   rF   r   r   r   rH     s    zDeleteModel.state_forwardsc                 C   s.   |j || j}| |jj|r*|| d S r   rU   rO   r   r   r   rT     s    zDeleteModel.database_forwardsc                 C   s.   |j || j}| |jj|r*|| d S r   rI   rO   r   r   r   rV     s    zDeleteModel.database_backwardsc                 C   s   dS )NTr   r!   r   r   r   r#     s    zDeleteModel.references_modelc                 C   s
   d| j  S )NzDelete model %sr   r   r   r   r   rZ     s    zDeleteModel.describec                 C   s
   d| j  S )Nz	delete_%sr[   r   r   r   r   r\     s    z#DeleteModel.migration_name_fragmentN)r+   r,   r-   r   rB   rH   rT   rV   r#   rZ   r   r\   r   r   r   r   rs   v  s   rs   c                       s   e Zd ZdZ fddZedd Zedd Zdd	 Zd
d Z	dd Z
dd Zdd Zdd Zedd Z fddZ  ZS )rt   zRename a model.c                    s   || _ || _t | d S r   )rl   rm   r$   r   )r   rl   rm   r)   r   r   r     s    zRenameModel.__init__c                 C   s
   | j  S r   rl   r   r   r   r   r   ru     s    zRenameModel.old_name_lowerc                 C   s
   | j  S r   rm   r   r   r   r   r   new_name_lower  s    zRenameModel.new_name_lowerc                 C   s   | j | jd}| jjg |fS )Nrk   )rl   rm   r*   r-   r@   r   r   r   rB     s    zRenameModel.deconstructc                 C   s   | || j| j d S r   )Zrename_modelrl   rm   rF   r   r   r   rH     s    zRenameModel.state_forwardsc                 C   s   |j || j}| |jj|r|j || j}|||jj	|jj	 |jj
D ]`}|j|krl|}|| jf}	n|j}|jjj|jjjf}	|j j|	 j|jj}
|||j|
 qNt|jj|jj}|D ]4\}}|j|jks|jjjjsq|j|||dd qd S )NF)strict)rJ   rK   rm   rL   rM   rN   rl   alter_db_tabler9   db_tableZrelated_objectsZrelated_modelr   r"   
model_name	get_fieldr^   r   Zalter_fieldziplocal_many_to_manyrS   remote_fieldthroughauto_createdZ_alter_many_to_many)r   r"   rP   rQ   rR   	new_model	old_modelZrelated_objectrS   Zrelated_keyZto_fieldr0   	old_field	new_fieldr   r   r   rT     sN    


zRenameModel.database_forwardsc                 C   s\   | j | j | _| _ | j| j | _| _| |||| | j | j | _| _ | j| j | _| _d S r   )ru   r   rl   rm   rT   r   r"   rP   rQ   rR   r   r   r   rV     s    

zRenameModel.database_backwardsc                 C   s   |  | jkp|  | jkS r   )r   ru   r   r!   r   r   r   r#     s    zRenameModel.references_modelc                 C   s   d| j | jf S )NzRename model %s to %srk   r   r   r   r   rZ     s    zRenameModel.describec                 C   s   d| j | jf S )Nrename_%s_%s)ru   r   r   r   r   r   r\     s    z#RenameModel.migration_name_fragmentc                    sH   t |tr&| j|jkr&t| j|jgS tt| ||pF|	| j| S r   )
r;   rt   r   ru   rl   rm   r$   r   r%   r#   r'   r)   r   r   r%     s    

zRenameModel.reduce)r+   r,   r-   r   r   r   ru   r   rB   rH   rT   rV   r#   rZ   r   r\   r%   r.   r   r   r)   r   rt     s   

0
rt   c                       s   e Zd Z fddZ  ZS )ModelOptionOperationc                    s0   t || jtfr"| j|jkr"|gS t ||S r   )r;   r*   rs   r   r$   r%   r'   r)   r   r   r%     s    
zModelOptionOperation.reduce)r+   r,   r-   r%   r.   r   r   r)   r   r     s   r   c                       sT   e Zd ZdZ fddZdd Zdd Zdd	 Zd
d Zdd Z	e
dd Z  ZS )AlterModelTablezRename a model's table.c                    s   || _ t | d S r   )tabler$   r   )r   r   r   r)   r   r   r     s    zAlterModelTable.__init__c                 C   s   | j | jd}| jjg |fS )Nr   r   )r   r   r*   r-   r@   r   r   r   rB   !  s    zAlterModelTable.deconstructc                 C   s   | || jd| ji d S )Nr   )alter_model_optionsr   r   rF   r   r   r   rH   (  s    zAlterModelTable.state_forwardsc           	      C   s   |j || j}| |jj|r|j || j}|||jj|jj t	|jj
|jj
D ]6\}}|jjjjrX||jj|jjjj|jjjj qXd S r   )rJ   rK   r   rL   rM   rN   r   r9   r   r   r   r   r   r   )	r   r"   rP   rQ   rR   r   r   r   r   r   r   r   rT   +  s"    

z!AlterModelTable.database_forwardsc                 C   s   |  ||||S r   rT   r   r   r   r   rV   ?  s    z"AlterModelTable.database_backwardsc                 C   s   d| j | jd ur| jndf S )NzRename table for %s to %sz	(default)r   r   r   r   r   rZ   B  s    zAlterModelTable.describec                 C   s
   d| j  S )Nzalter_%s_tabler[   r   r   r   r   r\   H  s    z'AlterModelTable.migration_name_fragment)r+   r,   r-   r   r   rB   rH   rT   rV   rZ   r   r\   r.   r   r   r)   r   r     s   r   c                       sP   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Ze	dd Z
  ZS )AlterModelTableCommentc                    s   || _ t | d S r   )table_commentr$   r   )r   r   r   r)   r   r   r   N  s    zAlterModelTableComment.__init__c                 C   s   | j | jd}| jjg |fS )N)r   r   )r   r   r*   r-   r@   r   r   r   rB   R  s    z"AlterModelTableComment.deconstructc                 C   s   | || jd| ji d S )Ndb_table_comment)r   r   r   rF   r   r   r   rH   Y  s    z%AlterModelTableComment.state_forwardsc                 C   sJ   |j || j}| |jj|rF|j || j}|||jj|jj d S r   )	rJ   rK   r   rL   rM   rN   Zalter_db_table_commentr9   r   )r   r"   rP   rQ   rR   r   r   r   r   r   rT   ^  s    z(AlterModelTableComment.database_forwardsc                 C   s   |  ||||S r   r   r   r   r   r   rV   h  s    z)AlterModelTableComment.database_backwardsc                 C   s   d| j  dS )NzAlter z table commentr   r   r   r   r   rZ   k  s    zAlterModelTableComment.describec                 C   s   d| j  dS )NZalter_Z_table_commentr[   r   r   r   r   r\   n  s    z.AlterModelTableComment.migration_name_fragment)r+   r,   r-   r   rB   rH   rT   rV   rZ   r   r\   r.   r   r   r)   r   r   M  s   
r   c                       st   e Zd ZdZ fddZedd Zdd Zdd	 Zd
d Z	dd Z
dd Zdd Zedd Z fddZ  ZS )rz   Nc                    s.   |rt t|}t| | j| t | d S r   )r   r   setattrr{   r$   r   )r   r   r|   r)   r   r   r   v  s    z%AlterTogetherOptionOperation.__init__c                 C   s   t | | jS r   )getattrr{   r   r   r   r   r|   |  s    z)AlterTogetherOptionOperation.option_valuec                 C   s    d| j | j| ji}| jjg |fS r   )r   r{   r|   r*   r-   r@   r   r   r   rB     s    z(AlterTogetherOptionOperation.deconstructc                 C   s   | || j| j| ji d S r   )r   r   r{   r|   rF   r   r   r   rH     s
    
z+AlterTogetherOptionOperation.state_forwardsc                 C   sl   |j || j}| |jj|rh|j || j}t|d| j }||t|j| jt	 t|j| jt	  d S )Nzalter_%s)
rJ   rK   r   rL   rM   rN   r   r{   r9   r   )r   r"   rP   rQ   rR   r   r   Zalter_togetherr   r   r   rT     s    z.AlterTogetherOptionOperation.database_forwardsc                 C   s   |  ||||S r   r   r   r   r   r   rV     s    z/AlterTogetherOptionOperation.database_backwardsc                    s,   |  ||o*| j p*t fdd| jD S )Nc                 3   s   | ]} |v V  qd S r   r   rj   r   r   r   r6     r7   z@AlterTogetherOptionOperation.references_field.<locals>.<genexpr>)r#   r|   anyr   r   r   r"   r   r   r   references_field  s    z-AlterTogetherOptionOperation.references_fieldc                 C   s   d| j | jt| jpdf S )Nz"Alter %s for %s (%s constraint(s))rX   )r{   r   lenr|   r   r   r   r   rZ     s
    z%AlterTogetherOptionOperation.describec                 C   s   d| j | jf S )Nzalter_%s_%s)r   r{   r   r   r   r   r\     s    z4AlterTogetherOptionOperation.migration_name_fragmentc                    s(   t  ||p&t|to&t|t| uS r   )r$   r&   r;   rz   typer'   r)   r   r   r&     s    
z/AlterTogetherOptionOperation.can_reduce_through)r+   r,   r-   r{   r   r   r|   rB   rH   rT   rV   r   rZ   r   r\   r&   r.   r   r   r)   r   rz   s  s   

rz   c                       s$   e Zd ZdZdZ fddZ  ZS )AlterUniqueTogetherz|
    Change the value of unique_together to the target one.
    Input value of unique_together must be a set of tuples.
    re   c                    s   t  || d S r   r$   r   )r   r   re   r)   r   r   r     s    zAlterUniqueTogether.__init__r+   r,   r-   r   r{   r   r.   r   r   r)   r   r     s   r   c                       s$   e Zd ZdZdZ fddZ  ZS )AlterIndexTogetherzz
    Change the value of index_together to the target one.
    Input value of index_together must be a set of tuples.
    rf   c                    s   t  || d S r   r   )r   r   rf   r)   r   r   r     s    zAlterIndexTogether.__init__r   r   r   r)   r   r     s   r   c                       s`   e Zd ZdZdZ fddZdd Zdd Zd	d
 Zdd Z	dd Z
dd Zedd Z  ZS )r}   z9Represent a change with the order_with_respect_to option.r_   c                    s   || _ t | d S r   )r_   r$   r   )r   r   r_   r)   r   r   r     s    z AlterOrderWithRespectTo.__init__c                 C   s   | j | jd}| jjg |fS )Nr   r_   )r   r_   r*   r-   r@   r   r   r   rB     s    z#AlterOrderWithRespectTo.deconstructc                 C   s   | || j| j| ji d S r   )r   r   r{   r_   rF   r   r   r   rH     s
    
z&AlterOrderWithRespectTo.state_forwardsc                 C   s   |j || j}| |jj|r|j || j}|jjrV|jjsV|||j	d n6|jjr|jjs|j	d}|
 sd|_||| d S )N_orderr   )rJ   rK   r   rL   rM   rN   r9   r_   Zremove_fieldr   Zhas_defaultdefaultZ	add_field)r   r"   rP   rQ   rR   Zto_model
from_modelr^   r   r   r   rT     s*    z)AlterOrderWithRespectTo.database_forwardsc                 C   s   |  |||| d S r   r   r   r   r   r   rV     s    z*AlterOrderWithRespectTo.database_backwardsc                 C   s    |  ||o| jd u p|| jkS r   )r#   r_   r   r   r   r   r      s    z(AlterOrderWithRespectTo.references_fieldc                 C   s   d| j | jf S )Nz%Set order_with_respect_to on %s to %sr   r   r   r   r   rZ     s    z AlterOrderWithRespectTo.describec                 C   s
   d| j  S )Nzalter_%s_order_with_respect_tor[   r   r   r   r   r\     s    z/AlterOrderWithRespectTo.migration_name_fragment)r+   r,   r-   r   r{   r   rB   rH   rT   rV   r   rZ   r   r\   r.   r   r   r)   r   r}     s   r}   c                       s\   e Zd ZdZg dZ fddZdd Zdd Zd	d
 Zdd Z	dd Z
edd Z  ZS )rv   z
    Set new model options that don't directly affect the database schema
    (like verbose_name, permissions, ordering). Python code in migrations
    may still need them.
    )Zbase_manager_nameZdefault_manager_nameZdefault_related_nameZget_latest_byZmanagedZorderingZpermissionsZdefault_permissionsZselect_on_saveZverbose_nameZverbose_name_pluralc                    s   || _ t | d S r   )r1   r$   r   )r   r   r1   r)   r   r   r   &  s    zAlterModelOptions.__init__c                 C   s   | j | jd}| jjg |fS )N)r   r1   )r   r1   r*   r-   r@   r   r   r   rB   *  s    zAlterModelOptions.deconstructc                 C   s   | || j| j| j d S r   )r   r   r1   rw   rF   r   r   r   rH   1  s    z AlterModelOptions.state_forwardsc                 C   s   d S r   r   r   r   r   r   rT   9  s    z#AlterModelOptions.database_forwardsc                 C   s   d S r   r   r   r   r   r   rV   <  s    z$AlterModelOptions.database_backwardsc                 C   s
   d| j  S )NzChange Meta options on %sr   r   r   r   r   rZ   ?  s    zAlterModelOptions.describec                 C   s
   d| j  S )Nzalter_%s_optionsr[   r   r   r   r   r\   B  s    z)AlterModelOptions.migration_name_fragment)r+   r,   r-   r   rw   r   rB   rH   rT   rV   rZ   r   r\   r.   r   r   r)   r   rv     s   rv   c                       sZ   e Zd ZdZdgZ fddZdd Zdd Zd	d
 Zdd Z	dd Z
edd Z  ZS )ry   zAlter the model's managers.r2   c                    s   || _ t | d S r   )r2   r$   r   )r   r   r2   r)   r   r   r   L  s    zAlterModelManagers.__init__c                 C   s   | j j| j| jgi fS r   )r*   r-   r   r2   r   r   r   r   rB   P  s    zAlterModelManagers.deconstructc                 C   s   | || j| j d S r   )Zalter_model_managersr   r2   rF   r   r   r   rH   S  s    z!AlterModelManagers.state_forwardsc                 C   s   d S r   r   r   r   r   r   rT   V  s    z$AlterModelManagers.database_forwardsc                 C   s   d S r   r   r   r   r   r   rV   Y  s    z%AlterModelManagers.database_backwardsc                 C   s
   d| j  S )NzChange managers on %sr   r   r   r   r   rZ   \  s    zAlterModelManagers.describec                 C   s
   d| j  S )Nzalter_%s_managersr[   r   r   r   r   r\   _  s    z*AlterModelManagers.migration_name_fragment)r+   r,   r-   r   r   r   rB   rH   rT   rV   rZ   r   r\   r.   r   r   r)   r   ry   G  s   ry   c                   @   s   e Zd ZdZedd ZdS )r   ro   c                 C   s
   | j  S r   )r   r   r   r   r   r   r~   g  s    zIndexOperation.model_name_lowerN)r+   r,   r-   r{   r   r~   r   r   r   r   r   d  s   r   c                   @   sL   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	e
dd ZdS )r   zAdd an index on a model.c                 C   s"   || _ |jstd| || _d S )NzSIndexes passed to AddIndex operations require a name argument. %r doesn't have one.)r   r   r   rp   )r   r   rp   r   r   r   r   o  s    zAddIndex.__init__c                 C   s   | || j| j d S r   )	add_indexr~   rp   rF   r   r   r   rH   x  s    zAddIndex.state_forwardsc                 C   s2   |j || j}| |jj|r.||| j d S r   )rJ   rK   r   rL   rM   rN   r   rp   rO   r   r   r   rT   {  s    zAddIndex.database_forwardsc                 C   s2   |j || j}| |jj|r.||| j d S r   )rJ   rK   r   rL   rM   rN   remove_indexrp   rO   r   r   r   rV     s    zAddIndex.database_backwardsc                 C   s   | j | jd}| jjg |fS )N)r   rp   )r   rp   r*   r-   r@   r   r   r   rB     s    zAddIndex.deconstructc                 C   sN   | j jr0d| j jddd | j jD | jf S d| j jd| j j| jf S )Nz!Create index %s on %s on model %s, c                 S   s   g | ]}t |qS r   )r<   )r4   Z
expressionr   r   r   rd     r7   z%AddIndex.describe.<locals>.<listcomp>z*Create index %s on field(s) %s of model %s)rp   Zexpressionsr   joinr   r0   r   r   r   r   rZ     s    zAddIndex.describec                 C   s   d| j | jj f S Nz%s_%s)r~   rp   r   r   r   r   r   r   r\     s    z AddIndex.migration_name_fragmentNr+   r,   r-   r   r   rH   rT   rV   rB   rZ   r   r\   r   r   r   r   r   l  s   	r   c                   @   sL   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	e
dd ZdS )r   zRemove an index from a model.c                 C   s   || _ || _d S r   r   r   r   r   r   r   r   r   r     s    zRemoveIndex.__init__c                 C   s   | || j| j d S r   )r   r~   r   rF   r   r   r   rH     s    zRemoveIndex.state_forwardsc                 C   sL   |j || j}| |jj|rH|j|| jf }|| j	}|
|| d S r   )rJ   rK   r   rL   rM   rN   r   r~   get_index_by_namer   r   )r   r"   rP   rQ   rR   rS   from_model_staterp   r   r   r   rT     s
    zRemoveIndex.database_forwardsc                 C   sL   |j || j}| |jj|rH|j|| jf }|| j	}|
|| d S r   )rJ   rK   r   rL   rM   rN   r   r~   r   r   r   )r   r"   rP   rQ   rR   rS   to_model_staterp   r   r   r   rV     s
    zRemoveIndex.database_backwardsc                 C   s   | j | jd}| jjg |fS Nr   )r   r   r*   r-   r@   r   r   r   rB     s    zRemoveIndex.deconstructc                 C   s   d| j | jf S )NzRemove index %s from %sr   r   r   r   r   r   rZ     s    zRemoveIndex.describec                 C   s   d| j | j f S Nzremove_%s_%sr~   r   r   r   r   r   r   r\     s    z#RemoveIndex.migration_name_fragmentNr   r   r   r   r   r     s   r   c                       sv   e Zd ZdZdddZedd Zedd Zd	d
 Zdd Z	dd Z
dd Zdd Zedd Z fddZ  ZS )r   zRename an index.Nc                 C   s<   |s|st d|r |r t d|| _|| _|| _|| _d S )NzHRenameIndex requires one of old_name and old_fields arguments to be set.z;RenameIndex.old_name and old_fields are mutually exclusive.)r   r   rm   rl   rq   )r   r   rm   rl   rq   r   r   r   r     s    zRenameIndex.__init__c                 C   s
   | j  S r   r   r   r   r   r   ru     s    zRenameIndex.old_name_lowerc                 C   s
   | j  S r   r   r   r   r   r   r     s    zRenameIndex.new_name_lowerc                 C   s<   | j | jd}| jr| j|d< | jr.| j|d< | jjg |fS )N)r   rm   rl   rq   )r   rm   rl   rq   r*   r-   r@   r   r   r   rB     s    

zRenameIndex.deconstructc                 C   sV   | j r<||| jtj| j | jd ||| jtj| j  n|	|| j| j
| j d S )Nrr   )rq   r   r~   r   r   rm   Zremove_model_optionsr   r{   rename_indexrl   rF   r   r   r   rH     s    zRenameIndex.state_forwardsc                    s   |j || j}| |jj|s$d S | jr|j || j  fdd| jD }|j |dd}t|dkrt	dt| j
jd|f tj| j|d d	}n|j|| jf }	|	| j}|j| jkrd S |j|| jf }
|
| j}|||| d S )
Nc                    s   g | ]} j |jqS r   )r9   r   column)r4   r^   r   r   r   rd     s   z1RenameIndex.database_forwards.<locals>.<listcomp>T)Zcolumn_namesrp   r	   z.Found wrong number (%s) of indexes for %s(%s).r   r   rr   )rJ   rK   r   rL   rM   rN   rq   Z_constraint_namesr   r   r9   r   r   r   r   r~   r   rl   r   rm   r   )r   r"   rP   rQ   rR   rS   columnsZmatching_index_nameZ	old_indexr   r   Z	new_indexr   r   r   rT     s>    
zRenameIndex.database_forwardsc                 C   sf   | j r
d S | j| j | _| _| j| j | _| _| |||| | j| j | _| _| j| j | _| _d S r   )rq   ru   r   rl   rm   rT   r   r   r   r   rV   )  s    

zRenameIndex.database_backwardsc                 C   s>   | j r"d| j  d| j d| j S d| j d| j d| j S )NzRename index z on z to zRename unnamed index for )rl   r   rm   rq   r   r   r   r   rZ   <  s    zRenameIndex.describec                 C   s0   | j rd| j| jf S d| jd| j| jf S )Nr   zrename_%s_%s_%sr5   )rl   ru   r   r~   r   rq   r   r   r   r   r\   F  s    
z#RenameIndex.migration_name_fragmentc                    sP   t |trB| j|jkrB|jrB| j|jkrBt| j|j| j| jdgS t	 
||S )N)rm   rl   rq   )r;   r   r~   rl   r   ru   r   rm   rq   r$   r%   r'   r)   r   r   r%   P  s     

zRenameIndex.reduce)NN)r+   r,   r-   r   r   r   ru   r   rB   rH   rT   rV   rZ   r   r\   r%   r.   r   r   r)   r   r     s   


%

	r   c                   @   sL   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	e
dd ZdS )AddConstraintconstraintsc                 C   s   || _ || _d S r   r   
constraint)r   r   r   r   r   r   r   e  s    zAddConstraint.__init__c                 C   s   | || j| j d S r   )add_constraintr~   r   rF   r   r   r   rH   i  s    zAddConstraint.state_forwardsc                 C   s2   |j || j}| |jj|r.||| j d S r   )rJ   rK   r   rL   rM   rN   r   r   rO   r   r   r   rT   l  s    zAddConstraint.database_forwardsc                 C   s2   |j || j}| |jj|r.||| j d S r   )rJ   rK   r   rL   rM   rN   remove_constraintr   rO   r   r   r   rV   q  s    z AddConstraint.database_backwardsc                 C   s   | j jg | j| jdfS )Nr   )r*   r+   r   r   r   r   r   r   rB   v  s    zAddConstraint.deconstructc                 C   s   d| j j| jf S )Nz Create constraint %s on model %s)r   r   r   r   r   r   r   rZ     s    zAddConstraint.describec                 C   s   d| j | jj f S r   )r~   r   r   r   r   r   r   r   r\     s    z%AddConstraint.migration_name_fragmentNr+   r,   r-   r{   r   rH   rT   rV   rB   rZ   r   r\   r   r   r   r   r   b  s   
r   c                   @   sL   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	e
dd ZdS )RemoveConstraintr   c                 C   s   || _ || _d S r   r   r   r   r   r   r     s    zRemoveConstraint.__init__c                 C   s   | || j| j d S r   )r   r~   r   rF   r   r   r   rH     s    zRemoveConstraint.state_forwardsc                 C   sL   |j || j}| |jj|rH|j|| jf }|| j	}|
|| d S r   )rJ   rK   r   rL   rM   rN   r   r~   get_constraint_by_namer   r   )r   r"   rP   rQ   rR   rS   r   r   r   r   r   rT     s
    z"RemoveConstraint.database_forwardsc                 C   sL   |j || j}| |jj|rH|j|| jf }|| j	}|
|| d S r   )rJ   rK   r   rL   rM   rN   r   r~   r   r   r   )r   r"   rP   rQ   rR   rS   r   r   r   r   r   rV     s
    z#RemoveConstraint.database_backwardsc                 C   s   | j jg | j| jdfS r   )r*   r+   r   r   r   r   r   r   rB     s    zRemoveConstraint.deconstructc                 C   s   d| j | jf S )Nz"Remove constraint %s from model %sr   r   r   r   r   rZ     s    zRemoveConstraint.describec                 C   s   d| j | j f S r   r   r   r   r   r   r\     s    z(RemoveConstraint.migration_name_fragmentNr   r   r   r   r   r     s   
r   N)'Z	django.dbr   Z$django.db.migrations.operations.baser   Zdjango.db.migrations.stater   Zdjango.db.migrations.utilsr   r   Zdjango.db.models.optionsr   Zdjango.utils.functionalr   r0   r
   r   r   r   r   r   r   r/   rs   rt   r   r   r   rz   r   r   r}   rv   ry   r   r   r   r   r   r   r   r   r   r   <module>   s:   
  O#w
3&AD76+ )