o
    ÕèFhÜª  ã                   @   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)Úarg_nameÚobjsÚ	used_valsÚval© r   ú_/var/www/html/loop/nvenv/lib/python3.10/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__   ó   
zModelOperation.__init__c                 C   ó
   | j  ¡ S r   )r   Úlower©r   r   r   r   Ú
name_lower   ó   
zModelOperation.name_lowerc                 C   s   |  ¡ | jkS r   ©r!   r#   ©r   r   Ú	app_labelr   r   r   Úreferences_model   ó   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,   %   ó   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 )Nr7   c                 s   ó   � | ]\}}|V  qd S r   r   ©Ú.0r   Ú_r   r   r   Ú	<genexpr>6   ó   € z'CreateModel.__init__.<locals>.<genexpr>Úbasesc                 s   s8   � | ]}t |d ƒr|jjn
t|tƒr| ¡ n|V  qdS )Ú_metaN)ÚhasattrrA   Úlabel_lowerÚ
isinstanceÚstrr!   )r<   Úbaser   r   r   r>   9   s   € ý
ÿ
ür9   c                 s   r:   r   r   r;   r   r   r   r>   B   r?   )	r7   r8   r   ÚModelr@   r9   r*   r   r   )r   r   r7   r8   r@   r9   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r0| jdt ¡ fgkr0| j|d< | jj	g |fS )N)r   r7   r8   r@   Úobjectsr9   )
r   r7   r8   r@   r   rG   r9   ÚManagerr0   r4   ©r   Úkwargsr   r   r   ÚdeconstructD   s   þ


zCreateModel.deconstructc              
   C   s6   |  t|| jt| jƒt| jƒt| jƒt| j	ƒƒ¡ d S r   )
Ú	add_modelr   r   Úlistr7   Údictr8   Útupler@   r9   ©r   r'   Ústater   r   r   Ústate_forwardsQ   s   úÿzCreateModel.state_forwardsc                 C   ó2   |j  || j¡}|  |jj|¡r| |¡ d S d S r   ©ÚappsÚ	get_modelr   Úallow_migrate_modelÚ
connectionÚaliasÚcreate_model©r   r'   Úschema_editorÚ
from_stateÚto_stateÚmodelr   r   r   Údatabase_forwards]   ó   ÿzCreateModel.database_forwardsc                 C   ó2   |j  || j¡}|  |jj|¡r| |¡ d S d S r   ©rV   rW   r   rX   rY   rZ   Údelete_modelr\   r   r   r   Údatabase_backwardsb   rb   zCreateModel.database_backwardsc                 C   s    d| j  dd¡r
dnd| jf S )NzCreate %smodel %sÚproxyFzproxy Ú )r8   Ú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 ]}|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 q0dS )NTF)r!   r#   r@   r   rG   rD   rF   Ú	ModelBaserE   r   r7   r   )r   r   r'   r#   Úreference_model_tuplerF   Ú_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rQ| |d ¡ qDt| j| j	|| j
| jd�gS t ˆ tƒrz| jˆ jkrzt| 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ƒ�r�| jˆ jk�r�t ˆ tƒråt| j| j	ˆ jˆ jfg | j| j
| jd�gS t ˆ tƒ�rt| j‡ fdd„| j	D ƒ| j| j
| jd�gS t ˆ tƒ�rS| j ¡ }dD ]!}| |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 ]}| |¡}|�ru‡ fdd„|D ƒ||< �q`| d¡}|ˆ j!k�r‡ˆ j|d< t| j‡ fdd„| j	D ƒ|| j
| jd�gS n¨t ˆ t"ƒ�rE| jˆ jk�rEt ˆ 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&ƒ�rEˆ j'�rE‡ fdd„| j dg ¡D ƒ}	|	�r|	| 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 )Nrg   F)r7   r8   r@   r9   Úorder_with_respect_toc                    s(   g | ]\}}||ˆ j krˆ jn|f‘qS r   )r   rp   ©r<   ÚnÚv©r.   r   r   Ú
<listcomp>ì   ó    ÿÿ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   rk   ©r<   Úfru   r   r   r>   þ   s   € ÿz/CreateModel.reduce.<locals>.<genexpr>.<genexpr>N©rP   ©r<   r7   ru   r   r   r>   ý   s   € ýÿ
ÿz%CreateModel.reduce.<locals>.<genexpr>c                    s&   g | ]\}}|  ¡ ˆ jkr||f‘qS r   r%   rr   ru   r   r   rv     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_namerz   ru   r   r   r>     s
   € ÿ
ÿz/CreateModel.reduce.<locals>.<setcomp>.<genexpr>r|   r}   ru   r   r   Ú	<setcomp>  s    üþÿz%CreateModel.reduce.<locals>.<setcomp>c                    s(   g | ]\}}|ˆ j krˆ jn||f‘qS r   r~   rr   ru   r   r   rv   )  rw   Úindexesc                    s   g | ]
}|j ˆ j kr|‘qS r   r   )r<   Úindexru   r   r   rv   G  s
    þc                    s   h | ]	}|ˆ j kr|’qS r   )Ú
old_fieldsr}   ru   r   r   r�   Y  s
    
þry   ©r7   r   ),rD   ÚDeleteModelr#   r8   ri   ÚRenameModelÚold_name_lowerr6   r€   r7   r@   r9   ÚAlterModelOptionsÚALTER_OPTION_KEYSÚpopr   ÚAlterModelManagersÚAlterTogetherOptionOperationÚoption_nameÚoption_valueÚAlterOrderWithRespectTorq   r   Úmodel_name_lowerr
   rp   r   r   Úcopyr   ÚfilterÚboolr   r   ÚIndexOperationÚAddIndexrƒ   ÚRemoveIndexÚRenameIndexr„   r   ÚIndexr*   r+   )
r   r.   r'   r8   ÚkeyrŽ   Úoptionrq   Úoptions_indexesÚoptions_index_togetherr/   ru   r   r+   ˆ   s¦  ÿÿÿûÿ
ÿ

€ûÿ
ÿûÿ
ÿÿ
þøÿÿÿþøÿÿ
ûÿ	
þøÿ

üþÿ€

þ÷ÿ



û€


þøÿñÿÿÿþþõÿ
þÿþøÿ
þÿÿÿþþ	óÿzCreateModel.reduce)NNN)r2   r3   r4   Ú__doc__Úserialization_expand_argsr   rL   rS   ra   rf   rj   Úpropertyrl   r(   r+   r5   r   r   r/   r   r6   )   s    
r6   c                   @   óL   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Drop a model's table.c                 C   s   d| j i}| jjg |fS ©Nr   )r   r0   r4   rJ   r   r   r   rL   y  s   ÿzDeleteModel.deconstructc                 C   s   |  || j¡ d S r   )Úremove_modelr#   rQ   r   r   r   rS     ó   zDeleteModel.state_forwardsc                 C   rc   r   rd   r\   r   r   r   ra   ‚  rb   zDeleteModel.database_forwardsc                 C   rT   r   rU   r\   r   r   r   rf   ‡  rb   zDeleteModel.database_backwardsc                 C   s   dS )NTr   r&   r   r   r   r(   Œ  s   zDeleteModel.references_modelc                 C   ó
   d| j  S )NzDelete model %sr   r"   r   r   r   rj   ‘  r   zDeleteModel.describec                 C   r¥   )Nz	delete_%srk   r"   r   r   r   rl   ”  r$   z#DeleteModel.migration_name_fragmentN)r2   r3   r4   rž   rL   rS   ra   rf   r(   rj   r    rl   r   r   r   r   r†   v  s    r†   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 )r‡   zRename a model.c                    s   || _ || _tƒ  |¡ d S r   )r   r€   r*   r   )r   r   r€   r/   r   r   r   œ  s   zRenameModel.__init__c                 C   r    r   ©r   r!   r"   r   r   r   rˆ   ¡  r$   zRenameModel.old_name_lowerc                 C   r    r   ©r€   r!   r"   r   r   r   Únew_name_lower¥  r$   zRenameModel.new_name_lowerc                 C   ó   | j | jdœ}| jjg |fS )Nr~   )r   r€   r0   r4   rJ   r   r   r   rL   ©  ó   þzRenameModel.deconstructc                 C   ó   |  || j| j¡ d S r   )Úrename_modelr   r€   rQ   r   r   r   rS   °  ó   zRenameModel.state_forwardsc                 C   s  |j  || j¡}|  |jj|¡r~|j  || j¡}| ||jj	|jj	¡ |jj
D ]0}|j|kr6|}|| jf}	n|j}|jjj|jjjf}	|j j|	Ž j |jj¡}
| ||j|
¡ q't|jj|jjƒ}|D ]\}}|j|jkss|jjjjstqc|j|||dd� qcd S d S )NF)Ústrict)rV   rW   r€   rX   rY   rZ   r   Úalter_db_tablerA   Údb_tableÚrelated_objectsÚrelated_modelr¨   r'   Ú
model_nameÚ	get_fieldrp   r   Úalter_fieldÚzipÚlocal_many_to_manyr`   Úremote_fieldÚthroughÚauto_createdÚ_alter_many_to_many)r   r'   r]   r^   r_   Ú	new_modelÚ	old_modelÚrelated_objectr`   Úrelated_keyÚto_fieldr7   Ú	old_fieldÚ	new_fieldr   r   r   ra   ³  sP   ý
þÿýÿ
ÿüÙzRenameModel.database_forwardsc                 C   s\   | j | j| _| _ | j| j| _| _|  ||||¡ | j | j| _| _ | j| j| _| _d S r   )rˆ   r¨   r   r€   ra   ©r   r'   r]   r^   r_   r   r   r   rf   ã  s   
þ
þzRenameModel.database_backwardsc                 C   s   |  ¡ | jkp|  ¡ | jkS r   )r!   rˆ   r¨   r&   r   r   r   r(   ò  s   ÿzRenameModel.references_modelc                 C   ó   d| j | jf S )NzRename model %s to %sr~   r"   r   r   r   rj   ÷  r1   zRenameModel.describec                 C   rÄ   )Núrename_%s_%s)rˆ   r¨   r"   r   r   r   rl   ú  ó   z#RenameModel.migration_name_fragmentc                    sH   t |tƒr| j|jkrt| j|jƒgS tt| ƒ ||¡p#| 	| j|¡ S r   )
rD   r‡   r¨   rˆ   r   r€   r*   r   r+   r(   r-   r/   r   r   r+   þ  s   ÿþÿ
ÿþzRenameModel.reduce)r2   r3   r4   rž   r   r   rˆ   r¨   rL   rS   ra   rf   r(   rj   r    rl   r+   r5   r   r   r/   r   r‡   ™  s     

0
r‡   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   )rD   r0   r†   r#   r*   r+   r-   r/   r   r   r+     s
   ÿzModelOptionOperation.reduce)r2   r3   r4   r+   r5   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                    ó   || _ tƒ  |¡ d S r   )Útabler*   r   )r   r   rÊ   r/   r   r   r     ó   zAlterModelTable.__init__c                 C   r©   )N©r   rÊ   )r   rÊ   r0   r4   rJ   r   r   r   rL   !  rª   zAlterModelTable.deconstructc                 C   ó   |  || jd| ji¡ d S )Nr°   )Úalter_model_optionsr#   rÊ   rQ   r   r   r   rS   (  s   zAlterModelTable.state_forwardsc           	      C   s˜   |j  || j¡}|  |jj|¡rH|j  || j¡}| ||jj|jj¡ t	|jj
|jj
ƒD ]\}}|jjjjrG| |jj|jjjj|jjjj¡ q,d S d S r   )rV   rW   r   rX   rY   rZ   r¯   rA   r°   r¶   r·   r¸   r¹   rº   )	r   r'   r]   r^   r_   r¼   r½   rÁ   rÂ   r   r   r   ra   +  s(   ýÿ

ý€ôz!AlterModelTable.database_forwardsc                 C   ó   |   ||||¡S r   ©ra   rÃ   r   r   r   rf   ?  r1   z"AlterModelTable.database_backwardsc                 C   s"   d| j | jd ur| jf S df S )NzRename table for %s to %sz	(default)rÌ   r"   r   r   r   rj   B  s   þþzAlterModelTable.describec                 C   r¥   )Nzalter_%s_tablerk   r"   r   r   r   rl   H  r$   z'AlterModelTable.migration_name_fragment)r2   r3   r4   rž   r   rL   rS   ra   rf   rj   r    rl   r5   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                    rÉ   r   )Útable_commentr*   r   )r   r   rÒ   r/   r   r   r   N  rË   zAlterModelTableComment.__init__c                 C   r©   )N)r   rÒ   )r   rÒ   r0   r4   rJ   r   r   r   rL   R  rª   z"AlterModelTableComment.deconstructc                 C   rÍ   )NÚdb_table_comment)rÎ   r#   rÒ   rQ   r   r   r   rS   Y  s   ÿz%AlterModelTableComment.state_forwardsc                 C   sN   |j  || j¡}|  |jj|¡r%|j  || j¡}| ||jj|jj¡ d S d S r   )	rV   rW   r   rX   rY   rZ   Úalter_db_table_commentrA   rÓ   )r   r'   r]   r^   r_   r¼   r½   r   r   r   ra   ^  s   ýþz(AlterModelTableComment.database_forwardsc                 C   rÏ   r   rÐ   rÃ   r   r   r   rf   h  r1   z)AlterModelTableComment.database_backwardsc                 C   ó   d| j › d�S )NzAlter z table commentr   r"   r   r   r   rj   k  r)   zAlterModelTableComment.describec                 C   rÕ   )NÚalter_Ú_table_commentrk   r"   r   r   r   rl   n  s   z.AlterModelTableComment.migration_name_fragment)r2   r3   r4   r   rL   rS   ra   rf   rj   r    rl   r5   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�   r0   r4   rJ   r   r   r   rL   €  s   þz(AlterTogetherOptionOperation.deconstructc                 C   ó   |  || j| j| ji¡ d S r   )rÎ   r#   rŽ   r�   rQ   r   r   r   rS   ‡  ó
   
ýz+AlterTogetherOptionOperation.state_forwardsc                 C   sp   |j  || j¡}|  |jj|¡r6|j  || j¡}t|d| j ƒ}||t|j| jt	ƒ ƒt|j| jt	ƒ ƒƒ d S d S )Nzalter_%s)
rV   rW   r   rX   rY   rZ   rÙ   rŽ   rA   r   )r   r'   r]   r^   r_   r¼   r½   Úalter_togetherr   r   r   ra   Ž  s   ýýz.AlterTogetherOptionOperation.database_forwardsc                 C   rÏ   r   rÐ   rÃ   r   r   r   rf   ™  r1   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   r}   r   r   r   r>   Ÿ  r?   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))rh   )rŽ   r   Úlenr�   r"   r   r   r   rj   ¢  s
   ýz%AlterTogetherOptionOperation.describec                 C   rÄ   )Nzalter_%s_%s)r#   rŽ   r"   r   r   r   rl   ©  rÆ   z4AlterTogetherOptionOperation.migration_name_fragmentc                    s(   t ƒ  ||¡pt|tƒot|ƒt| ƒuS r   )r*   r,   rD   r�   Útyper-   r/   r   r   r,   ­  s   
þz/AlterTogetherOptionOperation.can_reduce_through)r2   r3   r4   rŽ   r   r   r�   rL   rS   ra   rf   rß   rj   r    rl   r,   r5   r   r   r/   r   r�   s  s    

r�   c                       ó$   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.
    rx   c                    ó   t ƒ  ||¡ d S r   ©r*   r   )r   r   rx   r/   r   r   r   ¼  r¤   zAlterUniqueTogether.__init__©r2   r3   r4   rž   rŽ   r   r5   r   r   r/   r   rã   ´  ó    rã   c                       râ   )ÚAlterIndexTogetherzz
    Change the value of index_together to the target one.
    Input value of index_together must be a set of tuples.
    ry   c                    rä   r   rå   )r   r   ry   r/   r   r   r   È  r¤   zAlterIndexTogether.__init__ræ   r   r   r/   r   rè   À  rç   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.rq   c                    rÉ   r   )rq   r*   r   )r   r   rq   r/   r   r   r   Ñ  rË   z AlterOrderWithRespectTo.__init__c                 C   r©   )N©r   rq   )r   rq   r0   r4   rJ   r   r   r   rL   Õ  rª   z#AlterOrderWithRespectTo.deconstructc                 C   rÚ   r   )rÎ   r#   rŽ   rq   rQ   r   r   r   rS   Ü  rÛ   z&AlterOrderWithRespectTo.state_forwardsc                 C   sž   |j  || j¡}|  |jj|¡rI|j  || j¡}|jjr,|jjs,| ||j 	d¡¡ d S |jjrK|jjsM|j 	d¡}| 
¡ sAd|_| ||¡ d S d S d S d S )NÚ_orderr   )rV   rW   r   rX   rY   rZ   rA   rq   Úremove_fieldr´   Úhas_defaultÚdefaultÚ	add_field)r   r'   r]   r^   r_   Úto_modelÚ
from_modelrp   r   r   r   ra   ã  s.   ÿþÿÿþþíz)AlterOrderWithRespectTo.database_forwardsc                 C   s   |   ||||¡ d S r   rÐ   rÃ   r   r   r   rf   ý  s   z*AlterOrderWithRespectTo.database_backwardsc                 C   s    |   ||¡o| jd u p|| jkS r   )r(   rq   rÞ   r   r   r   rß      s   ÿz(AlterOrderWithRespectTo.references_fieldc                 C   rÄ   )Nz%Set order_with_respect_to on %s to %sré   r"   r   r   r   rj     s   þz AlterOrderWithRespectTo.describec                 C   r¥   )Nzalter_%s_order_with_respect_tork   r"   r   r   r   rl     r$   z/AlterOrderWithRespectTo.migration_name_fragment)r2   r3   r4   rž   rŽ   r   rL   rS   ra   rf   rß   rj   r    rl   r5   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 )r‰   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.
    )Úbase_manager_nameÚdefault_manager_nameÚdefault_related_nameÚget_latest_byÚmanagedÚorderingÚpermissionsÚdefault_permissionsÚselect_on_saveÚverbose_nameÚverbose_name_pluralc                    rÉ   r   )r8   r*   r   )r   r   r8   r/   r   r   r   &  rË   zAlterModelOptions.__init__c                 C   r©   )N)r   r8   )r   r8   r0   r4   rJ   r   r   r   rL   *  rª   zAlterModelOptions.deconstructc                 C   s   |  || j| j| j¡ d S r   )rÎ   r#   r8   rŠ   rQ   r   r   r   rS   1  s   üz AlterModelOptions.state_forwardsc                 C   ó   d S r   r   rÃ   r   r   r   ra   9  ó   z#AlterModelOptions.database_forwardsc                 C   rü   r   r   rÃ   r   r   r   rf   <  rý   z$AlterModelOptions.database_backwardsc                 C   r¥   )NzChange Meta options on %sr   r"   r   r   r   rj   ?  r   zAlterModelOptions.describec                 C   r¥   )Nzalter_%s_optionsrk   r"   r   r   r   rl   B  r$   z)AlterModelOptions.migration_name_fragment)r2   r3   r4   rž   rŠ   r   rL   rS   ra   rf   rj   r    rl   r5   r   r   r/   r   r‰     s    r‰   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 )rŒ   zAlter the model's managers.r9   c                    rÉ   r   )r9   r*   r   )r   r   r9   r/   r   r   r   L  rË   zAlterModelManagers.__init__c                 C   s   | j j| j| jgi fS r   )r0   r4   r   r9   r"   r   r   r   rL   P  r­   zAlterModelManagers.deconstructc                 C   r«   r   )Úalter_model_managersr#   r9   rQ   r   r   r   rS   S  r­   z!AlterModelManagers.state_forwardsc                 C   rü   r   r   rÃ   r   r   r   ra   V  rý   z$AlterModelManagers.database_forwardsc                 C   rü   r   r   rÃ   r   r   r   rf   Y  rý   z%AlterModelManagers.database_backwardsc                 C   r¥   )NzChange managers on %sr   r"   r   r   r   rj   \  r   zAlterModelManagers.describec                 C   r¥   )Nzalter_%s_managersrk   r"   r   r   r   rl   _  r$   z*AlterModelManagers.migration_name_fragment)r2   r3   r4   rž   rŸ   r   rL   rS   ra   rf   rj   r    rl   r5   r   r   r/   r   rŒ   G  s    rŒ   c                   @   s   e Zd ZdZedd„ ƒZdS )r•   r‚   c                 C   r    r   )r³   r!   r"   r   r   r   r‘   g  r$   zIndexOperation.model_name_lowerN)r2   r3   r4   rŽ   r   r‘   r   r   r   r   r•   d  s    r•   c                       ó\   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‡ fdd„Z‡  Z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   rƒ   )r   r³   rƒ   r   r   r   r   o  s   ÿÿ
zAddIndex.__init__c                 C   r«   r   )Ú	add_indexr‘   rƒ   rQ   r   r   r   rS   x  r­   zAddIndex.state_forwardsc                 C   ó6   |j  || j¡}|  |jj|¡r| || j¡ d S d S r   )rV   rW   r³   rX   rY   rZ   r   rƒ   r\   r   r   r   ra   {  ó   ÿzAddIndex.database_forwardsc                 C   s6   |j  || j¡}|  |jj|¡r| || j¡ d S d S r   )rV   rW   r³   rX   rY   rZ   Úremove_indexrƒ   r\   r   r   r   rf   €  r  zAddIndex.database_backwardsc                 C   r©   ©N)r³   rƒ   )r³   rƒ   r0   r4   rJ   r   r   r   rL   …  ó   þýzAddIndex.deconstructc                 C   sN   | j jrd| 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   )rE   )r<   Ú
expressionr   r   r   rv   ”  s    z%AddIndex.describe.<locals>.<listcomp>z*Create index %s on field(s) %s of model %s)rƒ   Úexpressionsr   Újoinr³   r7   r"   r   r   r   rj   �  s   ýýzAddIndex.describec                 C   ó   d| j | jj ¡ f S ©Nz%s_%s)r‘   rƒ   r   r!   r"   r   r   r   rl   �  ó   z AddIndex.migration_name_fragmentc                    s^   t |tƒr| jj|jkrg S t |tƒr(| jj|jkr(|j| j_t| j| jd�gS t	ƒ  
||¡S r  )rD   r—   rƒ   r   r˜   r   r€   r–   r³   r*   r+   r-   r/   r   r   r+   ¡  s   
zAddIndex.reduce)r2   r3   r4   rž   r   rS   ra   rf   rL   rj   r    rl   r+   r5   r   r   r/   r   r–   l  s    	
r–   c                   @   r¡   )r—   zRemove an index from a model.c                 C   ó   || _ || _d S r   ©r³   r   ©r   r³   r   r   r   r   r   ­  ó   
zRemoveIndex.__init__c                 C   r«   r   )r  r‘   r   rQ   r   r   r   rS   ±  r­   zRemoveIndex.state_forwardsc                 C   sP   |j  || j¡}|  |jj|¡r&|j|| jf }| | j	¡}| 
||¡ d S d S r   )rV   rW   r³   rX   rY   rZ   r   r‘   Úget_index_by_namer   r  )r   r'   r]   r^   r_   r`   Úfrom_model_staterƒ   r   r   r   ra   ´  ó   ýzRemoveIndex.database_forwardsc                 C   óP   |j  || j¡}|  |jj|¡r&|j|| jf }| | j	¡}| 
||¡ d S d S r   )rV   rW   r³   rX   rY   rZ   r   r‘   r  r   r   )r   r'   r]   r^   r_   r`   Úto_model_staterƒ   r   r   r   rf   »  r  zRemoveIndex.database_backwardsc                 C   r©   ©Nr  )r³   r   r0   r4   rJ   r   r   r   rL   Â  r  zRemoveIndex.deconstructc                 C   rÄ   )NzRemove index %s from %s©r   r³   r"   r   r   r   rj   Í  r1   zRemoveIndex.describec                 C   ó   d| j | j ¡ f S ©Nzremove_%s_%s©r‘   r   r!   r"   r   r   r   rl   Ð  ó   z#RemoveIndex.migration_name_fragmentN)r2   r3   r4   rž   r   rS   ra   rf   rL   rj   r    rl   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³   r€   r   r„   )r   r³   r€   r   r„   r   r   r   r   Ø  s   ÿÿ
zRenameIndex.__init__c                 C   r    r   r¦   r"   r   r   r   rˆ   ç  r$   zRenameIndex.old_name_lowerc                 C   r    r   r§   r"   r   r   r   r¨   ë  r$   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³   r€   r   r„   )r³   r€   r   r„   r0   r4   rJ   r   r   r   rL   ï  s   þ

zRenameIndex.deconstructc                 C   sX   | j r| || jtj| j | jd�¡ | || jtj| j ¡ d S | 	|| j| j
| j¡ d S )Nr…   )r„   r   r‘   r   r™   r€   Úremove_model_optionsrè   rŽ   Úrename_indexr   rQ   r   r   r   rS   ú  s   ýüÿzRenameIndex.state_forwardsc                    sú   |j  || j¡}|  |jj|¡sd S | jrP|j  || j¡‰ ‡ fdd„| jD ƒ}|jˆ |dd�}t|ƒdkrEt	dt|ƒˆ j
jd |¡f ƒ‚tj| j|d d	�}n|j|| jf }	|	 | j¡}|j| jkrfd S |j|| jf }
|
 | j¡}| |||¡ d S )
Nc                    s   g | ]	}ˆ j  |¡j‘qS r   )rA   r´   Úcolumn)r<   rp   ©rð   r   r   rv     s    ÿz1RenameIndex.database_forwards.<locals>.<listcomp>T)Úcolumn_namesrƒ   r	   z.Found wrong number (%s) of indexes for %s(%s).r  r   r…   )rV   rW   r³   rX   rY   rZ   r„   Ú_constraint_namesrà   r   rA   r°   r	  r   r™   r‘   r  r   r   r€   r  )r   r'   r]   r^   r_   r`   ÚcolumnsÚmatching_index_nameÚ	old_indexr  r  Ú	new_indexr   r  r   ra     s>   
ÿÿýÿÿþzRenameIndex.database_forwardsc                 C   sf   | j rd S | j| j| _| _| j| j| _| _|  ||||¡ | j| j| _| _| j| j| _| _d S r   )r„   rˆ   r¨   r   r€   ra   rÃ   r   r   r   rf   1  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 )r   r³   r€   r„   r"   r   r   r   rj   D  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_%sr=   )r   rˆ   r¨   r‘   r	  r„   r"   r   r   r   rl   N  s   
ýz#RenameIndex.migration_name_fragmentc                    sP   t |tƒr!| j|jkr!|jr!| j|jkr!t| j|j| j| jd�gS t	ƒ  
||¡S )N)r€   r   r„   )rD   r˜   r‘   r   r¨   rˆ   r³   r€   r„   r*   r+   r-   r/   r   r   r+   X  s   ÿÿüÿzRenameIndex.reduce)NN)r2   r3   r4   rž   r   r   rˆ   r¨   rL   rS   ra   rf   rj   r    rl   r+   r5   r   r   r/   r   r˜   Õ  s    


%

	r˜   c                       rÿ   )ÚAddConstraintÚconstraintsc                 C   r  r   ©r³   Ú
constraint)r   r³   r)  r   r   r   r   m  r  zAddConstraint.__init__c                 C   r«   r   )Úadd_constraintr‘   r)  rQ   r   r   r   rS   q  r­   zAddConstraint.state_forwardsc                 C   r  r   )rV   rW   r³   rX   rY   rZ   r*  r)  r\   r   r   r   ra   t  r  zAddConstraint.database_forwardsc                 C   r  r   )rV   rW   r³   rX   rY   rZ   Úremove_constraintr)  r\   r   r   r   rf   y  r  z AddConstraint.database_backwardsc                 C   ó   | j jg | j| jdœfS )Nr(  )r0   r2   r³   r)  r"   r   r   r   rL   ~  ó   þý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   rj   ˆ  s   þzAddConstraint.describec                 C   r
  r  )r‘   r)  r   r!   r"   r   r   r   rl   Ž  r  z%AddConstraint.migration_name_fragmentc                    s6   t |tƒr| j|jkr| jj|jkrg S tƒ  ||¡S r   )rD   ÚRemoveConstraintr‘   r)  r   r*   r+   r-   r/   r   r   r+   ’  s   ÿzAddConstraint.reduce)r2   r3   r4   rŽ   r   rS   ra   rf   rL   rj   r    rl   r+   r5   r   r   r/   r   r&  j  s    

r&  c                   @   r¡   )r.  r'  c                 C   r  r   r  r  r   r   r   r   Ÿ  r  zRemoveConstraint.__init__c                 C   r«   r   )r+  r‘   r   rQ   r   r   r   rS   £  r­   zRemoveConstraint.state_forwardsc                 C   sP   |j  || j¡}|  |jj|¡r&|j|| jf }| | j	¡}| 
||¡ d S d S r   )rV   rW   r³   rX   rY   rZ   r   r‘   Úget_constraint_by_namer   r+  )r   r'   r]   r^   r_   r`   r  r)  r   r   r   ra   ¦  r  z"RemoveConstraint.database_forwardsc                 C   r  r   )rV   rW   r³   rX   rY   rZ   r   r‘   r/  r   r*  )r   r'   r]   r^   r_   r`   r  r)  r   r   r   rf   ­  r  z#RemoveConstraint.database_backwardsc                 C   r,  r  )r0   r2   r³   r   r"   r   r   r   rL   ´  r-  zRemoveConstraint.deconstructc                 C   rÄ   )Nz"Remove constraint %s from model %sr  r"   r   r   r   rj   ¾  r1   zRemoveConstraint.describec                 C   r  r  r  r"   r   r   r   rl   Á  r  z(RemoveConstraint.migration_name_fragmentN)r2   r3   r4   rŽ   r   rS   ra   rf   rL   rj   r    rl   r   r   r   r   r.  œ  s    
r.  N)'Ú	django.dbr   Ú$django.db.migrations.operations.baser   Údjango.db.migrations.stater   Údjango.db.migrations.utilsr   r   Údjango.db.models.optionsr   Údjango.utils.functionalr   r7   r
   r   r   r   r   r   r   r6   r†   r‡   rÇ   rÈ   rÑ   r�   rã   rè   r�   r‰   rŒ   r•   r–   r—   r˜   r&  r.  r   r   r   r   Ú<module>   s<    
  O#w
3&AD7>+ 2