a
    ‘ÐOc[š  ã                   @   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%d/S )0é    )Ú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   ú]/var/www/html/gsl.tools/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                    sT  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Ài | j¥ˆ j¥}ˆ jD ]}|ˆ jvrˆ| |d ¡ qˆt| j| j	|| j
| jd�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	i | j¥ˆ jˆ ji¥| j
| jd�gS t ˆ tƒ�r†| jˆ jk�r†t| j| j	i | j¥dˆ ji¥| j
| jd�gS t ˆ tƒ�rF| jˆ jk�rFt ˆ 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ƒ�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 ƒ�rF| 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 )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   ÿ)$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   r$   r%   )r   r(   r"   r1   Úkeyrw   Úoptionr_   r)   rc   r   r%   ˆ   s2   ÿ
þýÿ
þûÿ
ÿ
þ

ûÿ
ÿ
þûÿ
ÿ
þÿ
þøÿÿ
þÿþøÿÿ
þûÿ	
þøÿ

üþÿ

þ÷ÿ


û


þøÿ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 )ro   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   8  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   A  s    zDeleteModel.database_forwardsc                 C   s.   |j  || j¡}|  |jj|¡r*| |¡ d S r   rI   rO   r   r   r   rV   F  s    zDeleteModel.database_backwardsc                 C   s   dS )NTr   r!   r   r   r   r#   K  s    zDeleteModel.references_modelc                 C   s
   d| j  S )NzDelete model %sr   r   r   r   r   rZ   P  s    zDeleteModel.describec                 C   s
   d| j  S )Nz	delete_%sr[   r   r   r   r   r\   S  s    z#DeleteModel.migration_name_fragmentN)r+   r,   r-   r€   rB   rH   rT   rV   r#   rZ   r‚   r\   r   r   r   r   ro   5  s   ro   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 )rp   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   rq   `  s    zRenameModel.old_name_lowerc                 C   s
   | j  ¡ S r   ©rm   r   r   r   r   r   Únew_name_lowerd  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   h  s    þzRenameModel.deconstructc                 C   s   |  || j| j¡ d S r   )Zrename_modelrl   rm   rF   r   r   r   rH   o  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   )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_created)r   r"   rP   rQ   rR   Ú	new_modelÚ	old_modelZrelated_objectrS   Zrelated_keyZto_fieldr0   Ú	old_fieldÚ	new_fieldZold_m2m_modelZnew_m2m_modelr   r   r   rT   r  sZ    ý
þÿýÿ
ÿ
þýýzRenameModel.database_forwardsc                 C   s\   | j | j | _| _ | j| j | _| _|  ||||¡ | j | j | _| _ | j| j | _| _d S r   )rq   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   rq   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)rq   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;   rp   r†   rq   rl   rm   r$   r   r%   r#   r'   r)   r   r   r%   Å  s    ÿ
þþÿ
ÿþzRenameModel.reduce)r+   r,   r-   r€   r   r   rq   r†   rB   rH   rT   rV   r#   rZ   r‚   r\   r%   r.   r   r   r)   r   rp   X  s   

8
rp   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*   ro   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   	  s    þzAlterModelTable.describec                 C   s
   d| j  S )Nzalter_%s_tabler[   r   r   r   r   r\     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                       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 )rv   Nc                    s.   |rt t|ƒƒ}t| | j|ƒ tƒ  |¡ d S r   )r   r   Úsetattrrw   r$   r   )r   r   rx   r)   r   r   r     s    z%AlterTogetherOptionOperation.__init__c                 C   s   t | | jƒS r   )Úgetattrrw   r   r   r   r   rx     s    z)AlterTogetherOptionOperation.option_valuec                 C   s    d| j | j| ji}| jjg |fS rƒ   )r   rw   rx   r*   r-   r@   r   r   r   rB   !  s    þz(AlterTogetherOptionOperation.deconstructc                 C   s   |  || j| j| ji¡ d S r   )rš   r   rw   rx   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�   rw   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#   rx   Ú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   )rw   r   Úlenrx   r   r   r   r   rZ   C  s
    ýz%AlterTogetherOptionOperation.describec                 C   s   d| j | jf S )Nzalter_%s_%s)r   rw   r   r   r   r   r\   J  s    z4AlterTogetherOptionOperation.migration_name_fragmentc                    s(   t ƒ  ||¡p&t|tƒo&t|ƒt| ƒuS r   )r$   r&   r;   rv   Útyper'   r)   r   r   r&   N  s    
þz/AlterTogetherOptionOperation.can_reduce_through)r+   r,   r-   rw   r   r   rx   rB   rH   rT   rV   r    rZ   r‚   r\   r&   r.   r   r   r)   r   rv     s   

rv   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€   rw   r   r.   r   r   r)   r   r£   U  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   i  s    zAlterIndexTogether.__init__r¥   r   r   r)   r   r¦   a  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 )ry   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   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   v  s    þz#AlterOrderWithRespectTo.deconstructc                 C   s   |  || j| j| ji¡ d S r   )rš   r   rw   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¡}| 
¡ s€d|_| ||¡ 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€   rw   r   rB   rH   rT   rV   r    rZ   r‚   r\   r.   r   r   r)   r   ry   m  s   ry   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 )rr   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   rs   rF   r   r   r   rH   Ò  s    üz AlterModelOptions.state_forwardsc                 C   s   d S r   r   r”   r   r   r   rT   Ú  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\   ã  s    z)AlterModelOptions.migration_name_fragment)r+   r,   r-   r€   rs   r   rB   rH   rT   rV   rZ   r‚   r\   r.   r   r   r)   r   rr   ±  s   rr   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 )ru   z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   rB   ñ  s    zAlterModelManagers.deconstructc                 C   s   |  || j| j¡ d S r   )Zalter_model_managersr   r2   rF   r   r   r   rH   ô  s    z!AlterModelManagers.state_forwardsc                 C   s   d S r   r   r”   r   r   r   rT   ÷  s    z$AlterModelManagers.database_forwardsc                 C   s   d S r   r   r”   r   r   r   rV   ú  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   ru   è  s   ru   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   rz     s    zIndexOperation.model_name_lowerN)r+   r,   r-   rw   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 )Ú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_indexrz   r­   rF   r   r   r   rH     s    zAddIndex.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     s    zAddIndex.database_forwardsc                 C   s2   |j  || j¡}|  |jj|¡r.| || j¡ d S r   )rJ   rK   r‰   rL   rM   rN   Úremove_indexr­   rO   r   r   r   rV   !  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   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   5  r7   z%AddIndex.describe.<locals>.<listcomp>z*Create index %s on field(s) %s of model %s)r­   Zexpressionsr   Újoinr‰   r0   r   r   r   r   rZ   1  s    ýýzAddIndex.describec                 C   s   d| j | jj ¡ f S ©Nz%s_%s)rz   r­   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¬     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   F  s    zRemoveIndex.__init__c                 C   s   |  || j| j¡ d S r   )r¯   rz   r   rF   r   r   r   rH   J  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   rz   Úget_index_by_namer   r¯   )r   r"   rP   rQ   rR   rS   Úfrom_model_stater­   r   r   r   rT   M  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   rz   r·   r   r®   )r   r"   rP   rQ   rR   rS   Úto_model_stater­   r   r   r   rV   T  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   f  s    zRemoveIndex.describec                 C   s   d| j | j ¡ f S ©Nzremove_%s_%s©rz   r   r   r   r   r   r   r\   i  s    z#RemoveIndex.migration_name_fragmentNr³   r   r   r   r   r´   C  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 )ÚRenameIndexz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   Ú
old_fields)r   r‰   rm   rl   r¿   r   r   r   r   q  s    ÿÿzRenameIndex.__init__c                 C   s
   | j  ¡ S r   r„   r   r   r   r   rq   €  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   r¿   )r‰   rm   rl   r¿   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 )N©r0   r   )r¿   r®   rz   r   ÚIndexrm   Zremove_model_optionsr¦   rw   Ú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rŠt	dt|ƒˆ j
jd |¡f ƒ‚tj| j|d d	�}n|j|| jf }	|	 | j¡}|j| jkrÌd 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_namesr­   r	   z.Found wrong number (%s) of indexes for %s(%s).r°   r   rÀ   )rJ   rK   r‰   rL   rM   rN   r¿   Z_constraint_namesr¡   r   r9   rˆ   r±   r   rÁ   rz   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   )r¿   rq   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   r¿   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   rq   r†   rz   r±   r¿   r   r   r   r   r\   ç  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   r¿   )r;   r¾   rz   rl   r†   rq   r‰   rm   r¿   r$   r%   r'   r)   r   r   r%   ñ  s     ÿ
þý
üüÿzRenameIndex.reduce)NN)r+   r,   r-   r€   r   r   rq   r†   rB   rH   rT   rV   rZ   r‚   r\   r%   r.   r   r   r)   r   r¾   n  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     s    zAddConstraint.__init__c                 C   s   |  || j| j¡ d S r   )Úadd_constraintrz   rÉ   rF   r   r   r   rH   
  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     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     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     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²   )rz   rÉ   r   r   r   r   r   r   r\   '  s    z%AddConstraint.migration_name_fragmentN©r+   r,   r-   rw   r   rH   rT   rV   rB   rZ   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 )Ú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Ë   rz   r   rF   r   r   r   rH   3  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   rz   Úget_constraint_by_namer   rË   )r   r"   rP   rQ   rR   rS   r¸   rÉ   r   r   r   rT   6  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   rz   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   D  s    þýzRemoveConstraint.deconstructc                 C   s   d| j | jf S )Nz"Remove constraint %s from model %sr»   r   r   r   r   rZ   N  s    zRemoveConstraint.describec                 C   s   d| j | j ¡ f S r¼   r½   r   r   r   r   r\   Q  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/   ro   rp   r–   r—   rv   r£   r¦   ry   rr   ru   r«   r¬   r´   r¾   rÆ   rÍ   r   r   r   r   Ú<module>   s8   
  #
3AD76+ )