U
    8ÄT_:�  ã                   @   sˆ  d dl mZ d dlmZ d dl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l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)Únormalize_together)Úcached_propertyé   )ÚAddFieldÚ
AlterFieldÚFieldOperationÚRemoveFieldÚRenameField)Úfield_referencesÚget_referencesÚresolve_relationc                 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-dv63caxw/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                       sh   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
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   s     z'CreateModel.__init__.<locals>.<genexpr>Úbasesc                 s   s6   | ].}t |d ƒr|jjnt|tƒr*| ¡ n|V  qdS )Ú_metaN)Úhasattrr8   Zlabel_lowerÚ
isinstanceÚstrr   )r4   Úbaser   r   r   r6   7   s   þr2   c                 s   s   | ]\}}|V  qd S r   r   r3   r   r   r   r6   <   s     )	r0   r1   r   ÚModelr7   r2   r%   r   r   )r   r   r0   r1   r7   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   r7   Zobjectsr2   )
r   r0   r1   r7   r   r=   r2   Ú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   Úlistr0   Údictr1   Útupler7   r2   ©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   ©rI   rJ   r   rK   rL   rM   Zdelete_modelrN   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 Ú )r1   Úgetr   r   r   r   r   Údescribec   s    zCreateModel.describec                 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    r7   r   r=   r:   r<   Z	ModelBaser;   r   r0   r   )r   r   r#   r    Zreference_model_tupler<   Ú_nameÚfieldr   r   r   r$   f   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–t| j| j	| 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ƒ�r| jˆ jk�rt| j| j	| jdˆ ji–| j
| jd�gS t ˆ tƒ�rØ| jˆ jk�rØt ˆ tƒ�rjt| 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ƒ�rF| 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 t ƒ  !ˆ |¡S )NrV   F)r0   r1   r7   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   Úfr`   r   r   r6   Ã   s     
 z/CreateModel.reduce.<locals>.<genexpr>.<genexpr>N©rD   ©r4   r0   r`   r   r   r6   Â   s    z%CreateModel.reduce.<locals>.<genexpr>c                    s&   g | ]\}}|  ¡ ˆ jkr||f‘qS r   r!   r]   r`   r   r   ra   Í   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_namerd   r`   r   r   r6   Ý   s     z/CreateModel.reduce.<locals>.<setcomp>.<genexpr>rf   rg   r`   r   r   Ú	<setcomp>Ü   s   ÿz%CreateModel.reduce.<locals>.<setcomp>c                    s(   g | ] \}}|ˆ j krˆ jn||f‘qS r   rh   r]   r`   r   r   ra   æ   s   ÿ)"r:   ÚDeleteModelr    r1   rX   ÚRenameModelÚold_name_lowerr/   rj   r0   r7   r2   ÚAlterModelOptionsr   ÚAlterTogetherOptionOperationÚoption_nameÚoption_valueÚAlterOrderWithRespectTor\   r
   Úmodel_name_lowerr   r[   r	   r   ÚcopyÚpopr   ÚfilterÚboolr   ri   r%   r&   )r   r(   r#   r1   rq   Úoptionr\   r)   r`   r   r&   x   sØ    

ÿþûÿ	
ûÿ	ûÿ	ûÿ	ûÿ	
þøÿ
ÿ


þ÷ÿ


þ


þøÿzCreateModel.reduce)NNN)r+   r,   r-   Ú__doc__Úserialization_expand_argsr   rA   rG   rS   rU   rY   r$   r&   r.   r   r   r)   r   r/   )   s   

r/   c                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )rl   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   rA   õ   s     ÿýzDeleteModel.deconstructc                 C   s   |  || j¡ d S r   )Úremove_modelr    rE   r   r   r   rG   ÿ   s    zDeleteModel.state_forwardsc                 C   s.   |j  || j¡}|  |jj|¡r*| |¡ d S r   rT   rN   r   r   r   rS     s    zDeleteModel.database_forwardsc                 C   s.   |j  || j¡}|  |jj|¡r*| |¡ d S r   rH   rN   r   r   r   rU     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   rY     s    zDeleteModel.describeN)
r+   r,   r-   rz   rA   rG   rS   rU   r$   rY   r   r   r   r   rl   ò   s   
rl   c                       st   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‡ fdd„Z‡  ZS )rm   zRename a model.c                    s   || _ || _tƒ  |¡ d S r   )ri   rj   r%   r   )r   ri   rj   r)   r   r   r     s    zRenameModel.__init__c                 C   s
   | j  ¡ S r   )ri   r   r   r   r   r   rn     s    zRenameModel.old_name_lowerc                 C   s
   | j  ¡ S r   )rj   r   r   r   r   r   Únew_name_lower!  s    zRenameModel.new_name_lowerc                 C   s   | j | jdœ}| jjg |fS )Nrh   )ri   rj   r*   r-   r?   r   r   r   rA   %  s    þýzRenameModel.deconstructc                 C   sì   |j || jf  ¡ }| j|_||j || jf< || jf}d|| jf }tƒ }t||ƒD ]d\}}}	}
d }|
jrz|	 ¡ }||j	_
|
jr˜|d kr�|	 ¡ }||j	_|rT||j|< | |j|jf¡ qT|j|dd� | || j¡ |j|| jdd� d S )Nz%s.%sT©Údelay)r   rn   Úclonerj   r   r~   r   r   ÚtoÚremote_fieldrR   Úthroughr0   r   r#   r    Zreload_modelsr}   Úreload_model)r   r#   rF   Zrenamed_modelZold_model_tupleZnew_remote_modelZ	to_reloadÚmodel_stater   r[   Ú	referenceZchanged_fieldr   r   r   rG   0  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   )rI   rJ   rj   rK   rL   rM   ri   Úalter_db_tabler8   Údb_tableZrelated_objectsZrelated_modelr~   r#   Ú
model_nameÚ	get_fieldr[   r   Zalter_fieldÚzipÚlocal_many_to_manyrR   rƒ   r„   Úauto_created)r   r#   rO   rP   rQ   Ú	new_modelÚ	old_modelZrelated_objectrR   Zrelated_keyZto_fieldr0   Ú	old_fieldÚ	new_fieldZold_m2m_modelZnew_m2m_modelr   r   r   rS   K  sT    ý
þÿþýýýzRenameModel.database_forwardsc                 C   s\   | j | j | _| _ | j| j | _| _|  ||||¡ | j | j | _| _ | j| j | _| _d S r   )rn   r~   ri   rj   rS   ©r   r#   rO   rP   rQ   r   r   r   rU   ~  s
    zRenameModel.database_backwardsc                 C   s   |  ¡ | jkp|  ¡ | jkS r   )r   rn   r~   r"   r   r   r   r$   ‡  s    þzRenameModel.references_modelc                 C   s   d| j | jf S )NzRename model %s to %srh   r   r   r   r   rY   �  s    zRenameModel.describec                    sH   t |tƒr&| j|jkr&t| j|jƒgS tt| ƒ ||¡pF| 	| j|¡ S r   )
r:   rm   r~   rn   ri   rj   r%   r   r&   r$   r'   r)   r   r   r&   �  s    

ÿþÿ	þzRenameModel.reduce)r+   r,   r-   rz   r   r   rn   r~   rA   rG   rS   rU   r$   rY   r&   r.   r   r   r)   r   rm     s   

3	rm   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*   rl   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                       sH   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	‡  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   rA   ¯  s    þýzAlterModelTable.deconstructc                 C   s.   | j |j|| jf jd< |j|| jdd� d S )Nr‰   Tr   )r–   r   r    r1   r…   rE   r   r   r   rG   º  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   )rI   rJ   r   rK   rL   rM   rˆ   r8   r‰   rŒ   r�   rƒ   r„   rŽ   )	r   r#   rO   rP   rQ   r�   r�   r‘   r’   r   r   r   rS   ¾  s    ý

ýz!AlterModelTable.database_forwardsc                 C   s   |   ||||¡S r   ©rS   r“   r   r   r   rU   Ð  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   rY   Ó  s    þzAlterModelTable.describe)r+   r,   r-   rz   r   rA   rG   rS   rU   rY   r.   r   r   r)   r   r•   ¨  s   r•   c                       s\   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‡  ZS )rp   Nc                    s.   |rt t|ƒƒ}t| | j|ƒ tƒ  |¡ d S r   )r   r   Úsetattrrq   r%   r   )r   r   rr   r)   r   r   r   Ý  s    z%AlterTogetherOptionOperation.__init__c                 C   s   t | | jƒS r   )Úgetattrrq   r   r   r   r   rr   ã  s    z)AlterTogetherOptionOperation.option_valuec                 C   s    d| j | j| ji}| jjg |fS r|   )r   rq   rr   r*   r-   r?   r   r   r   rA   ç  s      þýz(AlterTogetherOptionOperation.deconstructc                 C   s4   |j || jf }| j|j| j< |j|| jdd� d S ©NTr   )r   r    rr   r1   rq   r…   ©r   r#   rF   r†   r   r   r   rG   ò  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)
rI   rJ   r   rK   rL   rM   rš   rq   r8   r   )r   r#   rO   rP   rQ   r�   r�   Zalter_togetherr   r   r   rS   ÷  s    ýz.AlterTogetherOptionOperation.database_forwardsc                 C   s   |   ||||¡S r   r˜   r“   r   r   r   rU     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   rg   r   r   r   r6   
  s     z@AlterTogetherOptionOperation.references_field.<locals>.<genexpr>)r$   rr   Ú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))rW   )rq   r   Úlenrr   r   r   r   r   rY     s    z%AlterTogetherOptionOperation.describe)r+   r,   r-   rq   r   r   rr   rA   rG   rS   rU   rŸ   rY   r.   r   r   r)   r   rp   Ú  s   
	rp   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.
    rb   c                    s   t ƒ  ||¡ d S r   ©r%   r   )r   r   rb   r)   r   r   r     s    zAlterUniqueTogether.__init__©r+   r,   r-   rz   rq   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.
    rc   c                    s   t ƒ  ||¡ d S r   r¢   )r   r   rc   r)   r   r   r   $  s    zAlterIndexTogether.__init__r£   r   r   r)   r   r¤     s   r¤   c                       sT   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‡  ZS )rs   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   rA   1  s    þýz#AlterOrderWithRespectTo.deconstructc                 C   s2   |j || jf }| j|jd< |j|| jdd� d S )Nr\   Tr   )r   r    r\   r1   r…   rœ   r   r   r   rG   <  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   )rI   rJ   r   rK   rL   rM   r8   r\   Zremove_fieldr‹   Zhas_defaultÚdefaultZ	add_field)r   r#   rO   rP   rQ   Zto_modelZ
from_modelr[   r   r   r   rS   A  s    þz)AlterOrderWithRespectTo.database_forwardsc                 C   s   |   ||||¡ d S r   r˜   r“   r   r   r   rU   S  s    z*AlterOrderWithRespectTo.database_backwardsc                 C   s    |   ||¡o| jd kp|| jkS r   )r$   r\   rž   r   r   r   rŸ   V  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   rY   _  s    z AlterOrderWithRespectTo.describe)r+   r,   r-   rz   rq   r   rA   rG   rS   rU   rŸ   rY   r.   r   r   r)   r   rs   (  s   	rs   c                       sb   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
‡  ZS )ro   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   )r1   r%   r   )r   r   r1   r)   r   r   r   y  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   rA   }  s    þýzAlterModelOptions.deconstructc                 C   sX   |j || jf }|j| j–|_| jD ]}|| jkr$|j |d¡ q$|j|| jdd� d S )NFTr   )r   r    r1   ÚALTER_OPTION_KEYSrv   r…   )r   r#   rF   r†   Úkeyr   r   r   rG   ˆ  s    

z AlterModelOptions.state_forwardsc                 C   s   d S r   r   r“   r   r   r   rS   �  s    z#AlterModelOptions.database_forwardsc                 C   s   d S r   r   r“   r   r   r   rU   “  s    z$AlterModelOptions.database_backwardsc                 C   s
   d| j  S )NzChange Meta options on %sr   r   r   r   r   rY   –  s    zAlterModelOptions.describe)r+   r,   r-   rz   r©   r   rA   rG   rS   rU   rY   r.   r   r   r)   r   ro   c  s&   õro   c                       sN   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
‡  ZS )ÚAlterModelManagerszAlter the model's managers.r2   c                    s   || _ tƒ  |¡ d S r   )r2   r%   r   )r   r   r2   r)   r   r   r   Ÿ  s    zAlterModelManagers.__init__c                 C   s   | j j| j| jgi fS r   )r*   r-   r   r2   r   r   r   r   rA   £  s    
ýzAlterModelManagers.deconstructc                 C   s2   |j || jf }t| jƒ|_|j|| jdd� d S r›   )r   r    rB   r2   r…   rœ   r   r   r   rG   ª  s    z!AlterModelManagers.state_forwardsc                 C   s   d S r   r   r“   r   r   r   rS   ¯  s    z$AlterModelManagers.database_forwardsc                 C   s   d S r   r   r“   r   r   r   rU   ²  s    z%AlterModelManagers.database_backwardsc                 C   s
   d| j  S )NzChange managers on %sr   r   r   r   r   rY   µ  s    zAlterModelManagers.describe)r+   r,   r-   rz   r{   r   rA   rG   rS   rU   rY   r.   r   r   r)   r   r«   š  s   r«   c                   @   s   e Zd ZdZedd„ ƒZdS )ÚIndexOperationÚindexesc                 C   s
   | j  ¡ S r   )rŠ   r   r   r   r   r   rt   ¼  s    zIndexOperation.model_name_lowerN)r+   r,   r-   rq   r   rt   r   r   r   r   r¬   ¹  s   r¬   c                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Z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   sF   |j || jf }|j| j | j ¡ f•|j| j< |j|| jdd� d S r›   )r   rt   r1   rq   r¯   r�   r…   rœ   r   r   r   rG   Í  s     zAddIndex.state_forwardsc                 C   s2   |j  || j¡}|  |jj|¡r.| || j¡ d S r   )rI   rJ   rŠ   rK   rL   rM   Ú	add_indexr¯   rN   r   r   r   rS   Ò  s    zAddIndex.database_forwardsc                 C   s2   |j  || j¡}|  |jj|¡r.| || j¡ d S r   )rI   rJ   rŠ   rK   rL   rM   Úremove_indexr¯   rN   r   r   r   rU   ×  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   rA   Ü  s    þýzAddIndex.deconstructc                 C   s   d| j jd | j j¡| jf S )Nz*Create index %s on field(s) %s of model %sz, )r¯   r   Újoinr0   rŠ   r   r   r   r   rY   ç  s
    ýzAddIndex.describeN©
r+   r,   r-   rz   r   rG   rS   rU   rA   rY   r   r   r   r   r®   Á  s   	r®   c                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Z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                    sL   |j |ˆ jf }|jˆ j }‡ fdd„|D ƒ|jˆ j< |j|ˆ jdd� d S )Nc                    s   g | ]}|j ˆ j kr|‘qS r   r   )r4   Úidxr   r   r   ra   ù  s      z.RemoveIndex.state_forwards.<locals>.<listcomp>Tr   ©r   rt   r1   rq   r…   )r   r#   rF   r†   r­   r   r   r   rG   ö  s    zRemoveIndex.state_forwardsc                 C   sL   |j  || j¡}|  |jj|¡rH|j|| jf }| | j	¡}| 
||¡ d S r   )rI   rJ   rŠ   rK   rL   rM   r   rt   Úget_index_by_namer   r±   )r   r#   rO   rP   rQ   rR   Úfrom_model_stater¯   r   r   r   rS   ü  s
    zRemoveIndex.database_forwardsc                 C   sL   |j  || j¡}|  |jj|¡rH|j|| jf }| | j	¡}| 
||¡ d S r   )rI   rJ   rŠ   rK   rL   rM   r   rt   r¹   r   r°   )r   r#   rO   rP   rQ   rR   Úto_model_stater¯   r   r   r   rU     s
    zRemoveIndex.database_backwardsc                 C   s   | j | jdœ}| jjg |fS ©Nrµ   )rŠ   r   r*   r-   r?   r   r   r   rA   
  s    þýzRemoveIndex.deconstructc                 C   s   d| j | jf S )NzRemove index %s from %s©r   rŠ   r   r   r   r   rY     s    zRemoveIndex.describeNr³   r   r   r   r   r´   ï  s   r´   c                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚAddConstraintÚconstraintsc                 C   s   || _ || _d S r   ©rŠ   Ú
constraint)r   rŠ   rÁ   r   r   r   r     s    zAddConstraint.__init__c                 C   sB   |j || jf }|j| j | jf•|j| j< |j|| jdd� d S r›   )r   rt   r1   rq   rÁ   r…   rœ   r   r   r   rG      s    zAddConstraint.state_forwardsc                 C   s2   |j  || j¡}|  |jj|¡r.| || j¡ d S r   )rI   rJ   rŠ   rK   rL   rM   Úadd_constraintrÁ   rN   r   r   r   rS   %  s    zAddConstraint.database_forwardsc                 C   s2   |j  || j¡}|  |jj|¡r.| || j¡ d S r   )rI   rJ   rŠ   rK   rL   rM   Úremove_constraintrÁ   rN   r   r   r   rU   *  s    z AddConstraint.database_backwardsc                 C   s   | j jg | j| jdœfS )NrÀ   )r*   r+   rŠ   rÁ   r   r   r   r   rA   /  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   rY   5  s    zAddConstraint.describeN©
r+   r,   r-   rq   r   rG   rS   rU   rA   rY   r   r   r   r   r¾     s   r¾   c                   @   s@   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dS )ÚRemoveConstraintr¿   c                 C   s   || _ || _d S r   rµ   r¶   r   r   r   r   <  s    zRemoveConstraint.__init__c                    sL   |j |ˆ jf }|jˆ j }‡ fdd„|D ƒ|jˆ j< |j|ˆ jdd� d S )Nc                    s   g | ]}|j ˆ j kr|‘qS r   r   )r4   Úcr   r   r   ra   C  s      z3RemoveConstraint.state_forwards.<locals>.<listcomp>Tr   r¸   )r   r#   rF   r†   r¿   r   r   r   rG   @  s    zRemoveConstraint.state_forwardsc                 C   sL   |j  || j¡}|  |jj|¡rH|j|| jf }| | j	¡}| 
||¡ d S r   )rI   rJ   rŠ   rK   rL   rM   r   rt   Úget_constraint_by_namer   rÃ   )r   r#   rO   rP   rQ   rR   rº   rÁ   r   r   r   rS   F  s
    z"RemoveConstraint.database_forwardsc                 C   sL   |j  || j¡}|  |jj|¡rH|j|| jf }| | j	¡}| 
||¡ d S r   )rI   rJ   rŠ   rK   rL   rM   r   rt   rÇ   r   rÂ   )r   r#   rO   rP   rQ   rR   r»   rÁ   r   r   r   rU   M  s
    z#RemoveConstraint.database_backwardsc                 C   s   | j jg | j| jdœfS r¼   )r*   r+   rŠ   r   r   r   r   r   rA   T  s    þzRemoveConstraint.deconstructc                 C   s   d| j | jf S )Nz"Remove constraint %s from model %sr½   r   r   r   r   rY   Z  s    zRemoveConstraint.describeNrÄ   r   r   r   r   rÅ   9  s   rÅ   N)&Z	django.dbr   Z$django.db.migrations.operations.baser   Zdjango.db.migrations.stater   Zdjango.db.models.optionsr   Zdjango.utils.functionalr   r0   r   r	   r
   r   r   Úutilsr   r   r   r   r   r/   rl   rm   r”   r•   rp   r¡   r¤   rs   ro   r«   r¬   r®   r´   r¾   rÅ   r   r   r   r   Ú<module>   s4   
 J# 28;7.* 