U
     5øi„~  ã                   @   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$d-S ).é    )Úmodels)Ú	Operation)Ú
ModelState)Úfield_referencesÚresolve_relation)Únormalize_together)Úcached_propertyé   )ÚAddFieldÚ
AlterFieldÚFieldOperationÚRemoveFieldÚRenameFieldc                 C   s6   t ƒ }|D ]&}||k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   úJ/tmp/pip-unpacked-wheel-gcyiijx6/django/db/migrations/operations/models.pyÚ_check_for_duplicates   s    
ÿr   c                       s8   e Zd Zdd„ Zedd„ ƒZdd„ Z‡ f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| | j|¡ S r   )ÚsuperÚreducer#   r   ©r   Ú	operationr"   ©Ú	__class__r   r   r%   "   s    þzModelOperation.reduce)	Ú__name__Ú
__module__Ú__qualname__r   r   r   r#   r%   Ú__classcell__r   r   r(   r   r      s
   
r   c                       st   e Zd ZdZdddg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 )Nr/   c                 s   s   | ]\}}|V  qd S r   r   ©Ú.0r   Ú_r   r   r   Ú	<genexpr>6   s     z'CreateModel.__init__.<locals>.<genexpr>Úbasesc                 s   s6   | ].}t |d ƒr|jjnt|tƒr*| ¡ n|V  qdS )Ú_metaN)Úhasattrr7   Zlabel_lowerÚ
isinstanceÚstrr   )r3   Úbaser   r   r   r5   7   s   þr1   c                 s   s   | ]\}}|V  qd S r   r   r2   r   r   r   r5   <   s     )	r/   r0   r   ÚModelr6   r1   r$   r   r   )r   r   r/   r0   r6   r1   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   r/   r0   r6   Zobjectsr1   )
r   r/   r0   r6   r   r<   r1   ÚManagerr)   r,   ©r   Úkwargsr   r   r   Údeconstruct>   s    þ


ýzCreateModel.deconstructc              
   C   s6   |  t|| jt| jƒt| jƒt| jƒt| j	ƒƒ¡ d S r   )
Z	add_modelr   r   Úlistr/   Údictr0   Útupler6   r1   ©r   r"   Ústater   r   r   Ústate_forwardsO   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_forwardsY   s    zCreateModel.database_forwardsc                 C   s.   |j  || j¡}|  |jj|¡r*| |¡ d S r   ©rH   rI   r   rJ   rK   rL   Zdelete_modelrM   r   r   r   Údatabase_backwards^   s    zCreateModel.database_backwardsc                 C   s    d| j  dd¡rdnd| jf S )NzCreate %smodel %sÚproxyFzproxy Ú )r0   Úgetr   r   r   r   r   Údescribec   s    zCreateModel.describec                 C   s   | j S r   ©r   r   r   r   r   Úmigration_name_fragmentf   s    z#CreateModel.migration_name_fragmentc                 C   s†   |  ¡ }|| jkrdS ||f}| jD ]4}|tjk	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   r6   r   r<   r9   r;   Z	ModelBaser:   r   r/   r   )r   r   r"   r   Zreference_model_tupler;   Ú_nameÚfieldr   r   r   r#   j   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r¼| jˆ j–}ˆ jD ]}|ˆ jkr„| |d ¡ q„t| j| j	|| j
| jd�gS t ˆ tƒ�r | jˆ jk�r t| j| j	| jˆ jˆ ji–| j
| jd�gS t ˆ tƒ�rB| jˆ jk�rBt| j| j	| jdˆ ji–| j
| jd�gS t ˆ tƒ�r| jˆ jk�rt ˆ tƒ�r”t| 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ƒ�rp| j ¡ }dD ]B}| |d ¡}|�rættt‡ fdd	„|D ƒƒƒ}|�ræ|||< �qæ| d¡}|ˆ jk�rF|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 t!ƒ  "ˆ |¡S )NrU   F)r/   r0   r6   r1   Úorder_with_respect_toc                    s(   g | ] \}}||ˆ j krˆ jn|f‘qS r   )r   r\   ©r3   Ú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   rY   ©r3   Úfra   r   r   r5   Ë   s     
 z/CreateModel.reduce.<locals>.<genexpr>.<genexpr>N©rC   ©r3   r/   ra   r   r   r5   Ê   s    z%CreateModel.reduce.<locals>.<genexpr>c                    s&   g | ]\}}|  ¡ ˆ jkr||f‘qS r   r    r^   ra   r   r   rb   Õ   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_namere   ra   r   r   r5   å   s     z/CreateModel.reduce.<locals>.<setcomp>.<genexpr>rg   rh   ra   r   r   Ú	<setcomp>ä   s   ÿz%CreateModel.reduce.<locals>.<setcomp>c                    s(   g | ] \}}|ˆ j krˆ jn||f‘qS r   ri   r^   ra   r   r   rb   î   s   ÿ)#r9   ÚDeleteModelr   r0   rW   ÚRenameModelÚold_name_lowerr.   rk   r/   r6   r1   ÚAlterModelOptionsÚALTER_OPTION_KEYSÚpopr   ÚAlterTogetherOptionOperationÚoption_nameÚoption_valueÚAlterOrderWithRespectTor]   r   Úmodel_name_lowerr
   r\   r   r   Úcopyr   ÚfilterÚboolr   rj   r$   r%   )r   r'   r"   r0   Úkeyrt   Úoptionr]   r(   ra   r   r%   |   sà    

ÿþûÿ	

ûÿ	ûÿ	ûÿ	ûÿ	
þøÿ
ÿ


þ÷ÿ


þ


þøÿzCreateModel.reduce)NNN)r*   r+   r,   Ú__doc__Úserialization_expand_argsr   r@   rF   rR   rT   rX   ÚpropertyrZ   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 )rm   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   r@   ý   s     ÿýzDeleteModel.deconstructc                 C   s   |  || j¡ d S r   )Zremove_modelr   rD   r   r   r   rF     s    zDeleteModel.state_forwardsc                 C   s.   |j  || j¡}|  |jj|¡r*| |¡ d S r   rS   rM   r   r   r   rR   
  s    zDeleteModel.database_forwardsc                 C   s.   |j  || j¡}|  |jj|¡r*| |¡ d S r   rG   rM   r   r   r   rT     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   rX     s    zDeleteModel.describec                 C   s
   d| j  S )Nz	delete_%srY   r   r   r   r   rZ     s    z#DeleteModel.migration_name_fragmentN)r*   r+   r,   r}   r@   rF   rR   rT   r#   rX   r   rZ   r   r   r   r   rm   ú   s   
rm   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 )rn   zRename a model.c                    s   || _ || _tƒ  |¡ d S r   )rj   rk   r$   r   )r   rj   rk   r(   r   r   r   $  s    zRenameModel.__init__c                 C   s
   | j  ¡ S r   )rj   r   r   r   r   r   ro   )  s    zRenameModel.old_name_lowerc                 C   s
   | j  ¡ S r   )rk   r   r   r   r   r   Únew_name_lower-  s    zRenameModel.new_name_lowerc                 C   s   | j | jdœ}| jjg |fS )Nri   )rj   rk   r)   r,   r>   r   r   r   r@   1  s    þýzRenameModel.deconstructc                 C   s   |  || j| j¡ d S r   )Zrename_modelrj   rk   rD   r   r   r   rF   <  s    zRenameModel.state_forwardsc                 C   s<  |j  || j¡}|  |jj|¡�r8|j  || j¡}| ||jj	|jj	¡ |jj
D ]`}|j|krn|}|| jf}	n|j}|jjj|jjjf}	|j j|	Ž j |jj¡}
| ||j|
¡ qPt|jj|jjƒ}|D ]n\}}|j|jksÈ|jjjjsêqÈ|jj}|jj}| ||jj	|jj	¡ | ||j |jj¡|j |jj¡¡ qÈd S r   )rH   rI   rk   rJ   rK   rL   rj   Úalter_db_tabler7   Údb_tableZrelated_objectsZrelated_modelr�   r"   Ú
model_nameÚ	get_fieldr\   r   Zalter_fieldÚzipÚlocal_many_to_manyrQ   Úremote_fieldÚthroughÚauto_created)r   r"   rN   rO   rP   Ú	new_modelÚ	old_modelZrelated_objectrQ   Zrelated_keyZto_fieldr/   Ú	old_fieldÚ	new_fieldZold_m2m_modelZnew_m2m_modelr   r   r   rR   ?  sT    ý
þÿþýýýzRenameModel.database_forwardsc                 C   s\   | j | j | _| _ | j| j | _| _|  ||||¡ | j | j | _| _ | j| j | _| _d S r   )ro   r�   rj   rk   rR   ©r   r"   rN   rO   rP   r   r   r   rT   r  s
    zRenameModel.database_backwardsc                 C   s   |  ¡ | jkp|  ¡ | jkS r   )r   ro   r�   r!   r   r   r   r#   {  s    þzRenameModel.references_modelc                 C   s   d| j | jf S )NzRename model %s to %sri   r   r   r   r   rX   �  s    zRenameModel.describec                 C   s   d| j | jf S )Nzrename_%s_%s)ro   r�   r   r   r   r   rZ   „  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   )
r9   rn   r�   ro   rj   rk   r$   r   r%   r#   r&   r(   r   r   r%   ˆ  s    

ÿþÿ	þzRenameModel.reduce)r*   r+   r,   r}   r   r   ro   r�   r@   rF   rR   rT   r#   rX   r   rZ   r%   r-   r   r   r(   r   rn   !  s   

3	
rn   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   )r9   r)   rm   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   r@   §  s    þýzAlterModelTable.deconstructc                 C   s   |  || jd| ji¡ d S )Nrƒ   )Úalter_model_optionsr   r’   rD   r   r   r   rF   ²  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   )rH   rI   r   rJ   rK   rL   r‚   r7   rƒ   r†   r‡   rˆ   r‰   rŠ   )	r   r"   rN   rO   rP   r‹   rŒ   r�   rŽ   r   r   r   rR   µ  s    ý

ýz!AlterModelTable.database_forwardsc                 C   s   |   ||||¡S r   ©rR   r�   r   r   r   rT   Ç  s    z"AlterModelTable.database_backwardsc                 C   s   d| j | jd k	r| jndf S )NzRename table for %s to %sz	(default)r“   r   r   r   r   rX   Ê  s    þzAlterModelTable.describec                 C   s
   d| j  S )Nzalter_%s_tablerY   r   r   r   r   rZ   Ð  s    z'AlterModelTable.migration_name_fragment)r*   r+   r,   r}   r   r@   rF   rR   rT   rX   r   rZ   r-   r   r   r(   r   r‘      s   r‘   c                       sh   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‡  ZS )rs   Nc                    s.   |rt t|ƒƒ}t| | j|ƒ tƒ  |¡ d S r   )r   r   Úsetattrrt   r$   r   )r   r   ru   r(   r   r   r   Ø  s    z%AlterTogetherOptionOperation.__init__c                 C   s   t | | jƒS r   )Úgetattrrt   r   r   r   r   ru   Þ  s    z)AlterTogetherOptionOperation.option_valuec                 C   s    d| j | j| ji}| jjg |fS r€   )r   rt   ru   r)   r,   r>   r   r   r   r@   â  s      þýz(AlterTogetherOptionOperation.deconstructc                 C   s   |  || j| j| ji¡ d S r   )r”   r   rt   ru   rD   r   r   r   rF   í  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)
rH   rI   r   rJ   rK   rL   r—   rt   r7   r   )r   r"   rN   rO   rP   r‹   rŒ   Zalter_togetherr   r   r   rR   ô  s    ýz.AlterTogetherOptionOperation.database_forwardsc                 C   s   |   ||||¡S r   r•   r�   r   r   r   rT   ÿ  s    z/AlterTogetherOptionOperation.database_backwardsc                    s,   |   ||¡o*| j p*t‡ fdd„| jD ƒƒS )Nc                 3   s   | ]}ˆ |kV  qd S r   r   rh   r   r   r   r5     s     z@AlterTogetherOptionOperation.references_field.<locals>.<genexpr>)r#   ru   Ú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))rV   )rt   r   Úlenru   r   r   r   r   rX     s    z%AlterTogetherOptionOperation.describec                 C   s   d| j | jf S )Nzalter_%s_%s)r   rt   r   r   r   r   rZ     s    z4AlterTogetherOptionOperation.migration_name_fragment)r*   r+   r,   rt   r   r   ru   r@   rF   rR   rT   rš   rX   r   rZ   r-   r   r   r(   r   rs   Õ  s   
	rs   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.
    rc   c                    s   t ƒ  ||¡ d S r   ©r$   r   )r   r   rc   r(   r   r   r     s    zAlterUniqueTogether.__init__©r*   r+   r,   r}   rt   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.
    rd   c                    s   t ƒ  ||¡ d S r   r�   )r   r   rd   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 )rv   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   r@   2  s    þýz#AlterOrderWithRespectTo.deconstructc                 C   s   |  || j| j| ji¡ d S r   )r”   r   rt   r]   rD   r   r   r   rF   =  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¡}| 
¡ s€d|_| ||¡ d S )NÚ_orderr   )rH   rI   r   rJ   rK   rL   r7   r]   Zremove_fieldr…   Zhas_defaultÚdefaultZ	add_field)r   r"   rN   rO   rP   Zto_modelZ
from_modelr\   r   r   r   rR   D  s    þz)AlterOrderWithRespectTo.database_forwardsc                 C   s   |   ||||¡ d S r   r•   r�   r   r   r   rT   V  s    z*AlterOrderWithRespectTo.database_backwardsc                 C   s    |   ||¡o| jd kp|| jkS r   )r#   r]   r™   r   r   r   rš   Y  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   rX   b  s    z AlterOrderWithRespectTo.describec                 C   s
   d| j  S )Nzalter_%s_order_with_respect_torY   r   r   r   r   rZ   e  s    z/AlterOrderWithRespectTo.migration_name_fragment)r*   r+   r,   r}   rt   r   r@   rF   rR   rT   rš   rX   r   rZ   r-   r   r   r(   r   rv   )  s   	rv   c                       sn   e Zd ZdZdddddddd	d
d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 )rp   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orderingÚpermissionsZdefault_permissionsZselect_on_saveZverbose_nameZverbose_name_pluralc                    s   || _ tƒ  |¡ d S r   )r0   r$   r   )r   r   r0   r(   r   r   r   €  s    zAlterModelOptions.__init__c                 C   s   | j | jdœ}| jjg |fS )N)r   r0   )r   r0   r)   r,   r>   r   r   r   r@   „  s    þýzAlterModelOptions.deconstructc                 C   s   |  || j| j| j¡ d S r   )r”   r   r0   rq   rD   r   r   r   rF   �  s    üz AlterModelOptions.state_forwardsc                 C   s   d S r   r   r�   r   r   r   rR   —  s    z#AlterModelOptions.database_forwardsc                 C   s   d S r   r   r�   r   r   r   rT   š  s    z$AlterModelOptions.database_backwardsc                 C   s
   d| j  S )NzChange Meta options on %sr   r   r   r   r   rX   �  s    zAlterModelOptions.describec                 C   s
   d| j  S )Nzalter_%s_optionsrY   r   r   r   r   rZ      s    z)AlterModelOptions.migration_name_fragment)r*   r+   r,   r}   rq   r   r@   rF   rR   rT   rX   r   rZ   r-   r   r   r(   r   rp   j  s*   õrp   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 )ÚAlterModelManagerszAlter the model's managers.r1   c                    s   || _ tƒ  |¡ d S r   )r1   r$   r   )r   r   r1   r(   r   r   r   ª  s    zAlterModelManagers.__init__c                 C   s   | j j| j| jgi fS r   )r)   r,   r   r1   r   r   r   r   r@   ®  s    
ýzAlterModelManagers.deconstructc                 C   s   |  || j| j¡ d S r   )Zalter_model_managersr   r1   rD   r   r   r   rF   µ  s    z!AlterModelManagers.state_forwardsc                 C   s   d S r   r   r�   r   r   r   rR   ¸  s    z$AlterModelManagers.database_forwardsc                 C   s   d S r   r   r�   r   r   r   rT   »  s    z%AlterModelManagers.database_backwardsc                 C   s
   d| j  S )NzChange managers on %sr   r   r   r   r   rX   ¾  s    zAlterModelManagers.describec                 C   s
   d| j  S )Nzalter_%s_managersrY   r   r   r   r   rZ   Á  s    z*AlterModelManagers.migration_name_fragment)r*   r+   r,   r}   r~   r   r@   rF   rR   rT   rX   r   rZ   r-   r   r   r(   r   r¤   ¥  s   r¤   c                   @   s   e Zd ZdZedd„ ƒZdS )ÚIndexOperationZindexesc                 C   s
   | j  ¡ S r   )r„   r   r   r   r   r   rw   É  s    zIndexOperation.model_name_lowerN)r*   r+   r,   rt   r   rw   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 )ÚAddIndexz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   Úindex)r   r„   r§   r   r   r   r   Ñ  s    ÿÿzAddIndex.__init__c                 C   s   |  || j| j¡ d S r   )Ú	add_indexrw   r§   rD   r   r   r   rF   Ú  s    zAddIndex.state_forwardsc                 C   s2   |j  || j¡}|  |jj|¡r.| || j¡ d S r   )rH   rI   r„   rJ   rK   rL   r¨   r§   rM   r   r   r   rR   Ý  s    zAddIndex.database_forwardsc                 C   s2   |j  || j¡}|  |jj|¡r.| || j¡ d S r   )rH   rI   r„   rJ   rK   rL   Úremove_indexr§   rM   r   r   r   rT   â  s    zAddIndex.database_backwardsc                 C   s   | j | jdœ}| jjg |fS )N)r„   r§   )r„   r§   r)   r,   r>   r   r   r   r@   ç  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 %sz, c                 S   s   g | ]}t |ƒ‘qS r   )r:   )r3   Z
expressionr   r   r   rb   ö  s     z%AddIndex.describe.<locals>.<listcomp>z*Create index %s on field(s) %s of model %s)r§   Zexpressionsr   Újoinr„   r/   r   r   r   r   rX   ò  s    ýýzAddIndex.describec                 C   s   d| j | jj ¡ f S ©Nz%s_%s)rw   r§   r   r   r   r   r   r   rZ   ÿ  s    z AddIndex.migration_name_fragmentN©r*   r+   r,   r}   r   rF   rR   rT   r@   rX   r   rZ   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 )ÚRemoveIndexz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©   rw   r   rD   r   r   r   rF     s    zRemoveIndex.state_forwardsc                 C   sL   |j  || j¡}|  |jj|¡rH|j|| jf }| | j	¡}| 
||¡ d S r   )rH   rI   r„   rJ   rK   rL   r   rw   Úget_index_by_namer   r©   )r   r"   rN   rO   rP   rQ   Úfrom_model_stater§   r   r   r   rR     s
    zRemoveIndex.database_forwardsc                 C   sL   |j  || j¡}|  |jj|¡rH|j|| jf }| | j	¡}| 
||¡ d S r   )rH   rI   r„   rJ   rK   rL   r   rw   r°   r   r¨   )r   r"   rN   rO   rP   rQ   Úto_model_stater§   r   r   r   rT     s
    zRemoveIndex.database_backwardsc                 C   s   | j | jdœ}| jjg |fS ©Nr®   )r„   r   r)   r,   r>   r   r   r   r@     s    þýzRemoveIndex.deconstructc                 C   s   d| j | jf S )NzRemove index %s from %s©r   r„   r   r   r   r   rX   '  s    zRemoveIndex.describec                 C   s   d| j | j ¡ f S ©Nzremove_%s_%s©rw   r   r   r   r   r   r   rZ   *  s    z#RemoveIndex.migration_name_fragmentNr¬   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   2  s    zAddConstraint.__init__c                 C   s   |  || j| j¡ d S r   )Úadd_constraintrw   rº   rD   r   r   r   rF   6  s    zAddConstraint.state_forwardsc                 C   s2   |j  || j¡}|  |jj|¡r.| || j¡ d S r   )rH   rI   r„   rJ   rK   rL   r»   rº   rM   r   r   r   rR   9  s    zAddConstraint.database_forwardsc                 C   s2   |j  || j¡}|  |jj|¡r.| || j¡ d S r   )rH   rI   r„   rJ   rK   rL   Úremove_constraintrº   rM   r   r   r   rT   >  s    z AddConstraint.database_backwardsc                 C   s   | j jg | j| jdœfS )Nr¹   )r)   r*   r„   rº   r   r   r   r   r@   C  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   rX   I  s    zAddConstraint.describec                 C   s   d| j | jj ¡ f S r«   )rw   rº   r   r   r   r   r   r   rZ   L  s    z%AddConstraint.migration_name_fragmentN©r*   r+   r,   rt   r   rF   rR   rT   r@   rX   r   rZ   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 )ÚRemoveConstraintr¸   c                 C   s   || _ || _d S r   r®   r¯   r   r   r   r   T  s    zRemoveConstraint.__init__c                 C   s   |  || j| j¡ d S r   )r¼   rw   r   rD   r   r   r   rF   X  s    zRemoveConstraint.state_forwardsc                 C   sL   |j  || j¡}|  |jj|¡rH|j|| jf }| | j	¡}| 
||¡ d S r   )rH   rI   r„   rJ   rK   rL   r   rw   Úget_constraint_by_namer   r¼   )r   r"   rN   rO   rP   rQ   r±   rº   r   r   r   rR   [  s
    z"RemoveConstraint.database_forwardsc                 C   sL   |j  || j¡}|  |jj|¡rH|j|| jf }| | j	¡}| 
||¡ d S r   )rH   rI   r„   rJ   rK   rL   r   rw   r¿   r   r»   )r   r"   rN   rO   rP   rQ   r²   rº   r   r   r   rT   b  s
    z#RemoveConstraint.database_backwardsc                 C   s   | j jg | j| jdœfS r³   )r)   r*   r„   r   r   r   r   r   r@   i  s    þzRemoveConstraint.deconstructc                 C   s   d| j | jf S )Nz"Remove constraint %s from model %sr´   r   r   r   r   rX   o  s    zRemoveConstraint.describec                 C   s   d| j | j ¡ f S rµ   r¶   r   r   r   r   rZ   r  s    z(RemoveConstraint.migration_name_fragmentNr½   r   r   r   r   r¾   Q  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   r/   r
   r   r   r   r   r   r   r.   rm   rn   r�   r‘   rs   rœ   rŸ   rv   rp   r¤   r¥   r¦   r­   r·   r¾   r   r   r   r   Ú<module>   s2   
 R'x5>A;!6+"