a
    Lcòfì§  ã                   @   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   úc/home/httpd/docs/test/DocsMgr/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   Ú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   ©rK   rL   r   rM   rN   rO   Zdelete_modelrP   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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ƒ�rJ| jˆ jk�rJt ˆ 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 ƒ�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�ršt ˆ t#ƒ�r®t| 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 )NrX   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   Úfrd   r   r   r6   þ   s   z/CreateModel.reduce.<locals>.<genexpr>.<genexpr>N©rF   ©r4   r0   rd   r   r   r6   ý   s   ýÿz%CreateModel.reduce.<locals>.<genexpr>c                    s&   g | ]\}}|  ¡ ˆ jkr||f‘qS r   r    ra   rd   r   r   re     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_namerh   rd   r   r   r6     s   ÿz/CreateModel.reduce.<locals>.<setcomp>.<genexpr>rj   rk   rd   r   r   Ú	<setcomp>  s   üþz%CreateModel.reduce.<locals>.<setcomp>c                    s(   g | ] \}}|ˆ j krˆ jn||f‘qS r   rl   ra   rd   r   r   re   )  s   ÿÚindexesc                    s   g | ]}|j ˆ j kr|‘qS r   r   )r4   Úindexrd   r   r   re   G  s   þc                    s   h | ]}|ˆ j kr|’qS r   )Ú
old_fieldsrk   rd   r   r   ro   Y  s   
þrg   ©r0   r   ),r;   ÚDeleteModelr   r1   rZ   ÚRenameModelÚold_name_lowerr/   rn   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   rm   ÚIndexOperationÚAddIndexrq   ÚRemoveIndexÚRenameIndexrr   r   ÚIndexr$   r%   )
r   r(   r"   r1   Úkeyr|   Úoptionr`   Zoptions_indexesZoptions_index_togetherr)   rd   r   r%   ˆ   s®   ÿ
þýÿ
þûÿ
ÿ
þ

ûÿ
ÿ
þûÿ
ÿ
þÿ
þøÿÿ
þÿþøÿÿ
þûÿ	
þøÿ

üþÿ

þ÷ÿ


û


þøÿÿ
þÿÿþþõÿ
þÿþøÿ
þÿÿÿþþ	óÿzCreateModel.reduce)NNN)r+   r,   r-   Ú__doc__Úserialization_expand_argsr   rC   rI   rU   rW   r[   Ú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 )rt   zDrop a model's table.c                 C   s   d| j i}| jjg |fS ©Nr   )r   r*   r-   rA   r   r   r   rC   y  s    ÿzDeleteModel.deconstructc                 C   s   |  || j¡ d S r   )Zremove_modelr   rG   r   r   r   rI     s    zDeleteModel.state_forwardsc                 C   s.   |j  || j¡}|  |jj|¡r*| |¡ d S r   rV   rP   r   r   r   rU   ‚  s    zDeleteModel.database_forwardsc                 C   s.   |j  || j¡}|  |jj|¡r*| |¡ d S r   rJ   rP   r   r   r   rW   ‡  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   r[   ‘  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Š   rC   rI   rU   rW   r#   r[   rŒ   r]   r   r   r   r   rt   v  s   rt   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 )ru   zRename a model.c                    s   || _ || _tƒ  |¡ d S r   )rm   rn   r$   r   )r   rm   rn   r)   r   r   r   œ  s    zRenameModel.__init__c                 C   s
   | j  ¡ S r   ©rm   r   r   r   r   r   rv   ¡  s    zRenameModel.old_name_lowerc                 C   s
   | j  ¡ S r   ©rn   r   r   r   r   r   Únew_name_lower¥  s    zRenameModel.new_name_lowerc                 C   s   | j | jdœ}| jjg |fS )Nrl   )rm   rn   r*   r-   rA   r   r   r   rC   ©  s    þzRenameModel.deconstructc                 C   s   |  || j| j¡ d S r   )Zrename_modelrm   rn   rG   r   r   r   rI   °  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sèqÆ|j|||dd� qÆd S )NF)Ústrict)rK   rL   rn   rM   rN   rO   rm   Úalter_db_tabler9   Údb_tableZrelated_objectsZrelated_modelr�   r"   Ú
model_nameÚ	get_fieldr_   r   Zalter_fieldÚzipÚlocal_many_to_manyrT   Úremote_fieldÚthroughÚauto_createdZ_alter_many_to_many)r   r"   rQ   rR   rS   Ú	new_modelÚ	old_modelZrelated_objectrT   Zrelated_keyZto_fieldr0   Ú	old_fieldÚ	new_fieldr   r   r   rU   ³  sN    ý
þÿýÿ
ÿ
þüzRenameModel.database_forwardsc                 C   s\   | j | j | _| _ | j| j | _| _|  ||||¡ | j | j | _| _ | j| j | _| _d S r   )rv   r�   rm   rn   rU   ©r   r"   rQ   rR   rS   r   r   r   rW   ã  s    þ
þ
zRenameModel.database_backwardsc                 C   s   |  ¡ | jkp|  ¡ | jkS r   )r   rv   r�   r!   r   r   r   r#   ò  s    ÿzRenameModel.references_modelc                 C   s   d| j | jf S )NzRename model %s to %srl   r   r   r   r   r[   ÷  s    zRenameModel.describec                 C   s   d| j | jf S )Núrename_%s_%s)rv   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;   ru   r�   rv   rm   rn   r$   r   r%   r#   r'   r)   r   r   r%   þ  s    ÿ
þþÿ
ÿþzRenameModel.reduce)r+   r,   r-   rŠ   r   r   rv   r�   rC   rI   rU   rW   r#   r[   rŒ   r]   r%   r.   r   r   r)   r   ru   ™  s   

0
ru   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*   rt   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-   rA   r   r   r   rC   !  s    þzAlterModelTable.deconstructc                 C   s   |  || jd| ji¡ d S )Nr“   )Úalter_model_optionsr   r£   rG   r   r   r   rI   (  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   )rK   rL   r   rM   rN   rO   r’   r9   r“   r–   r—   r˜   r™   rš   )	r   r"   rQ   rR   rS   r›   rœ   r�   rž   r   r   r   rU   +  s"    ýÿ

ýz!AlterModelTable.database_forwardsc                 C   s   |   ||||¡S r   ©rU   rŸ   r   r   r   rW   ?  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   r[   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   rC   rI   rU   rW   r[   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-   rA   r   r   r   rC   R  s    þz"AlterModelTableComment.deconstructc                 C   s   |  || jd| ji¡ d S )NÚdb_table_comment)r¥   r   r¨   rG   r   r   r   rI   Y  s    ÿz%AlterModelTableComment.state_forwardsc                 C   sJ   |j  || j¡}|  |jj|¡rF|j  || j¡}| ||jj|jj¡ d S r   )	rK   rL   r   rM   rN   rO   Zalter_db_table_commentr9   r©   )r   r"   rQ   rR   rS   r›   rœ   r   r   r   rU   ^  s    ýz(AlterModelTableComment.database_forwardsc                 C   s   |   ||||¡S r   r¦   rŸ   r   r   r   rW   h  s    z)AlterModelTableComment.database_backwardsc                 C   s   d| j › d�S )NzAlter z table commentr   r   r   r   r   r[   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   rC   rI   rU   rW   r[   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 )r{   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-   rA   r   r   r   rC   €  s    þz(AlterTogetherOptionOperation.deconstructc                 C   s   |  || j| j| ji¡ d S r   )r¥   r   r|   r}   rG   r   r   r   rI   ‡  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)
rK   rL   r   rM   rN   rO   r«   r|   r9   r   )r   r"   rQ   rR   rS   r›   rœ   Zalter_togetherr   r   r   rU   Ž  s    ýz.AlterTogetherOptionOperation.database_forwardsc                 C   s   |   ||||¡S r   r¦   rŸ   r   r   r   rW   ™  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   rk   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))rY   )r|   r   Úlenr}   r   r   r   r   r[   ¢  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;   r{   Útyper'   r)   r   r   r&   ­  s    
þz/AlterTogetherOptionOperation.can_reduce_through)r+   r,   r-   r|   r   r   r}   rC   rI   rU   rW   r®   r[   rŒ   r]   r&   r.   r   r   r)   r   r{   s  s   

r{   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.
    rf   c                    s   t ƒ  ||¡ d S r   ©r$   r   )r   r   rf   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.
    rg   c                    s   t ƒ  ||¡ d S r   r²   )r   r   rg   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-   rA   r   r   r   rC   Õ  s    þz#AlterOrderWithRespectTo.deconstructc                 C   s   |  || j| j| ji¡ d S r   )r¥   r   r|   r`   rG   r   r   r   rI   Ü  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   )rK   rL   r   rM   rN   rO   r9   r`   Zremove_fieldr•   Zhas_defaultÚdefaultZ	add_field)r   r"   rQ   rR   rS   Zto_modelÚ
from_modelr_   r   r   r   rU   ã  s*    ÿþÿÿþþz)AlterOrderWithRespectTo.database_forwardsc                 C   s   |   ||||¡ d S r   r¦   rŸ   r   r   r   rW   ý  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   r[     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   rC   rI   rU   rW   r®   r[   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 )rw   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-   rA   r   r   r   rC   *  s    þzAlterModelOptions.deconstructc                 C   s   |  || j| j| j¡ d S r   )r¥   r   r1   rx   rG   r   r   r   rI   1  s    üz AlterModelOptions.state_forwardsc                 C   s   d S r   r   rŸ   r   r   r   rU   9  s    z#AlterModelOptions.database_forwardsc                 C   s   d S r   r   rŸ   r   r   r   rW   <  s    z$AlterModelOptions.database_backwardsc                 C   s
   d| j  S )NzChange Meta options on %sr   r   r   r   r   r[   ?  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Š   rx   r   rC   rI   rU   rW   r[   rŒ   r]   r.   r   r   r)   r   rw     s   rw   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 )rz   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   rC   P  s    zAlterModelManagers.deconstructc                 C   s   |  || j| j¡ d S r   )Zalter_model_managersr   r2   rG   r   r   r   rI   S  s    z!AlterModelManagers.state_forwardsc                 C   s   d S r   r   rŸ   r   r   r   rU   V  s    z$AlterModelManagers.database_forwardsc                 C   s   d S r   r   rŸ   r   r   r   rW   Y  s    z%AlterModelManagers.database_backwardsc                 C   s
   d| j  S )NzChange managers on %sr   r   r   r   r   r[   \  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   rC   rI   rU   rW   r[   rŒ   r]   r.   r   r   r)   r   rz   G  s   rz   c                   @   s   e Zd ZdZedd„ ƒZdS )rƒ   rp   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   rq   )r   r”   rq   r   r   r   r   o  s    ÿÿzAddIndex.__init__c                 C   s   |  || j| j¡ d S r   )Ú	add_indexr   rq   rG   r   r   r   rI   x  s    zAddIndex.state_forwardsc                 C   s2   |j  || j¡}|  |jj|¡r.| || j¡ d S r   )rK   rL   r”   rM   rN   rO   r¹   rq   rP   r   r   r   rU   {  s    zAddIndex.database_forwardsc                 C   s2   |j  || j¡}|  |jj|¡r.| || j¡ d S r   )rK   rL   r”   rM   rN   rO   Úremove_indexrq   rP   r   r   r   rW   €  s    zAddIndex.database_backwardsc                 C   s   | j | jdœ}| jjg |fS )N)r”   rq   )r”   rq   r*   r-   rA   r   r   r   rC   …  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   re   ”  r7   z%AddIndex.describe.<locals>.<listcomp>z*Create index %s on field(s) %s of model %s)rq   Zexpressionsr   Újoinr”   r0   r   r   r   r   r[   �  s    ýýzAddIndex.describec                 C   s   d| j | jj ¡ f S ©Nz%s_%s)r   rq   r   r   r   r   r   r   r]   �  s    z AddIndex.migration_name_fragmentN©r+   r,   r-   rŠ   r   rI   rU   rW   rC   r[   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   rG   r   r   r   rI   ©  s    zRemoveIndex.state_forwardsc                 C   sL   |j  || j¡}|  |jj|¡rH|j|| jf }| | j	¡}| 
||¡ d S r   )rK   rL   r”   rM   rN   rO   r   r   Úget_index_by_namer   rº   )r   r"   rQ   rR   rS   rT   Úfrom_model_staterq   r   r   r   rU   ¬  s
    zRemoveIndex.database_forwardsc                 C   sL   |j  || j¡}|  |jj|¡rH|j|| jf }| | j	¡}| 
||¡ d S r   )rK   rL   r”   rM   rN   rO   r   r   rÁ   r   r¹   )r   r"   rQ   rR   rS   rT   Úto_model_staterq   r   r   r   rW   ³  s
    zRemoveIndex.database_backwardsc                 C   s   | j | jdœ}| jjg |fS ©Nr¿   )r”   r   r*   r-   rA   r   r   r   rC   º  s    þýzRemoveIndex.deconstructc                 C   s   d| j | jf S )NzRemove index %s from %s©r   r”   r   r   r   r   r[   Å  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”   rn   rm   rr   )r   r”   rn   rm   rr   r   r   r   r   Ð  s    ÿÿzRenameIndex.__init__c                 C   s
   | j  ¡ S r   rŽ   r   r   r   r   rv   ß  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”   rn   rm   rr   )r”   rn   rm   rr   r*   r-   rA   r   r   r   rC   ç  s    þ

zRenameIndex.deconstructc                 C   sV   | j r<| || jtj| j | jd�¡ | || jtj| j ¡ n| 	|| j| j
| j¡ d S )Nrs   )rr   r¹   r   r   r‡   rn   Zremove_model_optionsr´   r|   Úrename_indexrm   rG   r   r   r   rI   ò  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   re     s   z1RenameIndex.database_forwards.<locals>.<listcomp>T)Zcolumn_namesrq   r	   z.Found wrong number (%s) of indexes for %s(%s).r»   r   rs   )rK   rL   r”   rM   rN   rO   rr   Z_constraint_namesr¯   r   r9   r“   r¼   r   r‡   r   rÁ   rm   r   rn   rÈ   )r   r"   rQ   rR   rS   rT   ÚcolumnsZmatching_index_nameZ	old_indexrÂ   rÃ   Z	new_indexr   rÊ   r   rU     s>    
ÿÿýÿÿþzRenameIndex.database_forwardsc                 C   sf   | j r
d S | j| j | _| _| j| j | _| _|  ||||¡ | j| j | _| _| j| j | _| _d S r   )rr   rv   r�   rm   rn   rU   rŸ   r   r   r   rW   )  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 )rm   r”   rn   rr   r   r   r   r   r[   <  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   )rm   rv   r�   r   r¼   rr   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)rn   rm   rr   )r;   r†   r   rm   r�   rv   r”   rn   rr   r$   r%   r'   r)   r   r   r%   P  s     ÿ
þý
üüÿzRenameIndex.reduce)NN)r+   r,   r-   rŠ   r   r   rv   r�   rC   rI   rU   rW   r[   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Ï   rG   r   r   r   rI   i  s    zAddConstraint.state_forwardsc                 C   s2   |j  || j¡}|  |jj|¡r.| || j¡ d S r   )rK   rL   r”   rM   rN   rO   rÐ   rÏ   rP   r   r   r   rU   l  s    zAddConstraint.database_forwardsc                 C   s2   |j  || j¡}|  |jj|¡r.| || j¡ d S r   )rK   rL   r”   rM   rN   rO   Úremove_constraintrÏ   rP   r   r   r   rW   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   rC   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   r[   €  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   rI   rU   rW   rC   r[   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   rG   r   r   r   rI   ’  s    zRemoveConstraint.state_forwardsc                 C   sL   |j  || j¡}|  |jj|¡rH|j|| jf }| | j	¡}| 
||¡ d S r   )rK   rL   r”   rM   rN   rO   r   r   Úget_constraint_by_namer   rÑ   )r   r"   rQ   rR   rS   rT   rÂ   rÏ   r   r   r   rU   •  s
    z"RemoveConstraint.database_forwardsc                 C   sL   |j  || j¡}|  |jj|¡rH|j|| jf }| | j	¡}| 
||¡ d S r   )rK   rL   r”   rM   rN   rO   r   r   rÔ   r   rÐ   )r   r"   rQ   rR   rS   rT   rÃ   rÏ   r   r   r   rW   œ  s
    z#RemoveConstraint.database_backwardsc                 C   s   | j jg | j| jdœfS rÄ   )r*   r+   r”   r   r   r   r   r   rC   £  s    þýzRemoveConstraint.deconstructc                 C   s   d| j | jf S )Nz"Remove constraint %s from model %srÅ   r   r   r   r   r[   ­  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/   rt   ru   r¡   r¢   r§   r{   r±   r´   r~   rw   rz   rƒ   r„   r…   r†   rÌ   rÓ   r   r   r   r   Ú<module>   s:   
  O#w
3&AD76+ )