o
    ×ŸŽiÃ�  ã                   @   s¤  d dl mZ d dlmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZ ddlmZmZmZmZmZ d	d
„ ZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd „ d eƒZG d!d"„ d"eƒZG d#d$„ d$eƒZ G d%d&„ d&eƒZ!G d'd(„ d(e!ƒZ"G d)d*„ d*e!ƒZ#G d+d,„ d,e!ƒZ$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   úpC:\Users\psant\Downloads\Anu Raj Backend\school\venv\Lib\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 )Nr5   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)Úhasattrr?   Zlabel_lowerÚ
isinstanceÚstrr   )r:   Úbaser   r   r   r<   9   s   € ü
ÿ
ÿ
ûr7   c                 s   r8   r   r   r9   r   r   r   r<   B   r=   )	r5   r6   r   ÚModelr>   r7   r(   r   r   )r   r   r5   r6   r>   r7   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   r5   r6   r>   Zobjectsr7   )
r   r5   r6   r>   r   rD   r7   ÚManagerr.   r2   ©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   Úlistr5   Údictr6   Útupler>   r7   ©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ÚaliasZ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   ©rQ   rR   r   rS   rT   rU   Zdelete_modelrV   r   r   r   Údatabase_backwardsb   r\   zCreateModel.database_backwardsc                 C   s    d| j  dd¡r
dnd| jf S )NzCreate %smodel %sÚproxyFzproxy Ú )r6   Ú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   rD   rA   rC   Z	ModelBaserB   r   r5   r   )r   r   r%   r!   Zreference_model_tuplerC   Ú_nameÚfieldr   r   r   r&   q   s(   

ÿþý€ÿýzCreateModel.references_modelc                    sF  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 t"ƒ  #ˆ |¡S )Nr`   F)r5   r6   r>   r7   Úorder_with_respect_toc                    s(   g | ]\}}||ˆ j krˆ jn|f‘qS r   )r   rg   ©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   rd   ©r:   Úfrl   r   r   r<   þ   s   € 
ÿ
ÿz/CreateModel.reduce.<locals>.<genexpr>.<genexpr>N©rK   ©r:   r5   rl   r   r   r<   ý   s   € ýÿ
ÿz%CreateModel.reduce.<locals>.<genexpr>c                    s&   g | ]\}}|  ¡ ˆ jkr||f‘qS r   r#   ri   rl   r   r   rm     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_namerq   rl   r   r   r<     s
   € ÿ
ÿz/CreateModel.reduce.<locals>.<setcomp>.<genexpr>rs   rt   rl   r   r   Ú	<setcomp>  s    üþÿz%CreateModel.reduce.<locals>.<setcomp>c                    s(   g | ]\}}|ˆ j krˆ jn||f‘qS r   ru   ri   rl   r   r   rm   )  rn   )$rA   ÚDeleteModelr!   r6   rb   ÚRenameModelÚold_name_lowerr4   rw   r5   r>   r7   ÚAlterModelOptionsÚALTER_OPTION_KEYSÚpopr   ÚAlterModelManagersÚAlterTogetherOptionOperationÚoption_nameÚoption_valueÚAlterOrderWithRespectTorh   r   Úmodel_name_lowerr
   rg   r   r   Úcopyr   ÚfilterÚboolr   rv   r(   r)   )r   r,   r%   r6   Úkeyr�   Úoptionrh   r-   rl   r   r)   ˆ   s8  ÿ
þýÿ
þûÿ
ÿ
þ

€ûÿ
ÿ
þûÿ
ÿ
þÿ
þøÿÿ
þÿþøÿÿ
þ
ûÿ	
þøÿ

üþÿ€

þ÷ÿ



û€


þøÿzCreateModel.reduce)NNN)r0   r1   r2   Ú__doc__Úserialization_expand_argsr   rH   rN   r[   r_   rc   Úpropertyre   r&   r)   r3   r   r   r-   r   r4   )   s    
r4   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 )ry   zDrop a model's table.c                 C   s   d| j i}| jjg |fS ©Nr   )r   r.   r2   rF   r   r   r   rH   8  s   ÿzDeleteModel.deconstructc                 C   s   |  || j¡ d S r   )Zremove_modelr!   rL   r   r   r   rN   >  ó   zDeleteModel.state_forwardsc                 C   r]   r   r^   rV   r   r   r   r[   A  r\   zDeleteModel.database_forwardsc                 C   rO   r   rP   rV   r   r   r   r_   F  r\   zDeleteModel.database_backwardsc                 C   s   dS )NTr   r$   r   r   r   r&   K  s   zDeleteModel.references_modelc                 C   ó
   d| j  S )NzDelete model %sr   r    r   r   r   rc   P  r   zDeleteModel.describec                 C   r�   )Nz	delete_%srd   r    r   r   r   re   S  r"   z#DeleteModel.migration_name_fragmentN)r0   r1   r2   rŠ   rH   rN   r[   r_   r&   rc   rŒ   re   r   r   r   r   ry   5  s    ry   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 )rz   zRename a model.c                    s   || _ || _tƒ  |¡ d S r   )rv   rw   r(   r   )r   rv   rw   r-   r   r   r   [  s   zRenameModel.__init__c                 C   r   r   ©rv   r   r    r   r   r   r{   `  r"   zRenameModel.old_name_lowerc                 C   r   r   ©rw   r   r    r   r   r   Únew_name_lowerd  r"   zRenameModel.new_name_lowerc                 C   ó   | j | jdœ}| jjg |fS )Nru   )rv   rw   r.   r2   rF   r   r   r   rH   h  ó   þzRenameModel.deconstructc                 C   ó   |  || j| j¡ d S r   )Zrename_modelrv   rw   rL   r   r   r   rN   o  ó   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)rQ   rR   rw   rS   rT   rU   rv   Úalter_db_tabler?   Údb_tableZrelated_objectsZrelated_modelr“   r%   Ú
model_nameÚ	get_fieldrg   r   Zalter_fieldÚzipÚlocal_many_to_manyrZ   Úremote_fieldÚthroughÚauto_createdZ_alter_many_to_many)r   r%   rW   rX   rY   Ú	new_modelÚ	old_modelZrelated_objectrZ   Zrelated_keyZto_fieldr5   Ú	old_fieldÚ	new_fieldr   r   r   r[   r  sR   ý
þÿýÿ
ÿ
þüÙzRenameModel.database_forwardsc                 C   s\   | j | j| _| _ | j| j| _| _|  ||||¡ | j | j| _| _ | j| j| _| _d S r   )r{   r“   rv   rw   r[   ©r   r%   rW   rX   rY   r   r   r   r_   ¢  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 %sru   r    r   r   r   rc   ¶  r/   zRenameModel.describec                 C   r§   )Núrename_%s_%s)r{   r“   r    r   r   r   re   ¹  ó   z#RenameModel.migration_name_fragmentc                    sH   t |tƒr| j|jkrt| j|jƒgS tt| ƒ ||¡p#| 	| j|¡ S r   )
rA   rz   r“   r{   rv   rw   r(   r   r)   r&   r+   r-   r   r   r)   ½  s   ÿ
þþÿ
ÿþzRenameModel.reduce)r0   r1   r2   rŠ   r   r   r{   r“   rH   rN   r[   r_   r&   rc   rŒ   re   r)   r3   r   r   r-   r   rz   X  s     

0
rz   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   )rA   r.   ry   r!   r(   r)   r+   r-   r   r   r)   Ð  s   ÿ
þzModelOptionOperation.reduce)r0   r1   r2   r)   r3   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­   r.   r2   rF   r   r   r   rH   à  r•   zAlterModelTable.deconstructc                 C   ó   |  || jd| ji¡ d S )Nrš   )Úalter_model_optionsr!   r­   rL   r   r   r   rN   ç  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   )rQ   rR   r   rS   rT   rU   r™   r?   rš   r�   rž   rŸ   r    r¡   )	r   r%   rW   rX   rY   r¢   r£   r¤   r¥   r   r   r   r[   ê  s(   ýÿ

ý€ôz!AlterModelTable.database_forwardsc                 C   ó   |   ||||¡S r   ©r[   r¦   r   r   r   r_   þ  r/   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   rc     s   þþzAlterModelTable.describec                 C   r�   )Nzalter_%s_tablerd   r    r   r   r   re     r"   z'AlterModelTable.migration_name_fragment)r0   r1   r2   rŠ   r   rH   rN   r[   r_   rc   rŒ   re   r3   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     r®   zAlterModelTableComment.__init__c                 C   r”   )N)r   rµ   )r   rµ   r.   r2   rF   r   r   r   rH     r•   z"AlterModelTableComment.deconstructc                 C   r°   )NÚdb_table_comment)r±   r!   rµ   rL   r   r   r   rN     s   ÿz%AlterModelTableComment.state_forwardsc                 C   sN   |j  || j¡}|  |jj|¡r%|j  || j¡}| ||jj|jj¡ d S d S r   )	rQ   rR   r   rS   rT   rU   Zalter_db_table_commentr?   r¶   )r   r%   rW   rX   rY   r¢   r£   r   r   r   r[     s   ýþz(AlterModelTableComment.database_forwardsc                 C   r²   r   r³   r¦   r   r   r   r_   '  r/   z)AlterModelTableComment.database_backwardsc                 C   ó   d| j › d�S )NzAlter z table commentr   r    r   r   r   rc   *  r'   zAlterModelTableComment.describec                 C   r·   )NZalter_Z_table_commentrd   r    r   r   r   re   -  s   z.AlterModelTableComment.migration_name_fragment)r0   r1   r2   r   rH   rN   r[   r_   rc   rŒ   re   r3   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 )r€   Nc                    s.   |rt t|ƒƒ}t| | j|ƒ tƒ  |¡ d S r   )r   r   Úsetattrr�   r(   r   )r   r   r‚   r-   r   r   r   5  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.   r2   rF   r   r   r   rH   ?  s   þz(AlterTogetherOptionOperation.deconstructc                 C   ó   |  || j| j| ji¡ d S r   )r±   r!   r�   r‚   rL   r   r   r   rN   F  ó
   
ý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)
rQ   rR   r   rS   rT   rU   r¹   r�   r?   r   )r   r%   rW   rX   rY   r¢   r£   Zalter_togetherr   r   r   r[   M  s   ýýz.AlterTogetherOptionOperation.database_forwardsc                 C   r²   r   r³   r¦   r   r   r   r_   X  r/   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   rt   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))ra   )r�   r   Úlenr‚   r    r   r   r   rc   a  s
   ýz%AlterTogetherOptionOperation.describec                 C   r§   )Nzalter_%s_%s)r!   r�   r    r   r   r   re   h  r©   z4AlterTogetherOptionOperation.migration_name_fragmentc                    s(   t ƒ  ||¡pt|tƒot|ƒt| ƒuS r   )r(   r*   rA   r€   Útyper+   r-   r   r   r*   l  s   
þz/AlterTogetherOptionOperation.can_reduce_through)r0   r1   r2   r�   r   r   r‚   rH   rN   r[   r_   r¾   rc   rŒ   re   r*   r3   r   r   r-   r   r€   2  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.
    ro   c                    ó   t ƒ  ||¡ d S r   ©r(   r   )r   r   ro   r-   r   r   r   {  r�   zAlterUniqueTogether.__init__©r0   r1   r2   rŠ   r�   r   r3   r   r   r-   r   rÂ   s  ó    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.
    rp   c                    rÃ   r   rÄ   )r   r   rp   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.rh   c                    r¬   r   )rh   r(   r   )r   r   rh   r-   r   r   r   �  r®   z AlterOrderWithRespectTo.__init__c                 C   r”   )N©r   rh   )r   rh   r.   r2   rF   r   r   r   rH   ”  r•   z#AlterOrderWithRespectTo.deconstructc                 C   rº   r   )r±   r!   r�   rh   rL   r   r   r   rN   ›  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   )rQ   rR   r   rS   rT   rU   r?   rh   Zremove_fieldrœ   Zhas_defaultÚdefaultZ	add_field)r   r%   rW   rX   rY   Zto_modelÚ
from_modelrg   r   r   r   r[   ¢  s.   ÿþÿÿþþíz)AlterOrderWithRespectTo.database_forwardsc                 C   s   |   ||||¡ d S r   r³   r¦   r   r   r   r_   ¼  s   z*AlterOrderWithRespectTo.database_backwardsc                 C   s    |   ||¡o| jd u p|| jkS r   )r&   rh   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   rc   Ä  s   þz AlterOrderWithRespectTo.describec                 C   r�   )Nzalter_%s_order_with_respect_tord   r    r   r   r   re   Ê  r"   z/AlterOrderWithRespectTo.migration_name_fragment)r0   r1   r2   rŠ   r�   r   rH   rN   r[   r_   r¾   rc   rŒ   re   r3   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.
    )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                    r¬   r   )r6   r(   r   )r   r   r6   r-   r   r   r   å  r®   zAlterModelOptions.__init__c                 C   r”   )N)r   r6   )r   r6   r.   r2   rF   r   r   r   rH   é  r•   zAlterModelOptions.deconstructc                 C   s   |  || j| j| j¡ d S r   )r±   r!   r6   r}   rL   r   r   r   rN   ð  s   üz AlterModelOptions.state_forwardsc                 C   ó   d S r   r   r¦   r   r   r   r[   ø  ó   z#AlterModelOptions.database_forwardsc                 C   rÌ   r   r   r¦   r   r   r   r_   û  rÍ   z$AlterModelOptions.database_backwardsc                 C   r�   )NzChange Meta options on %sr   r    r   r   r   rc   þ  r   zAlterModelOptions.describec                 C   r�   )Nzalter_%s_optionsrd   r    r   r   r   re     r"   z)AlterModelOptions.migration_name_fragment)r0   r1   r2   rŠ   r}   r   rH   rN   r[   r_   rc   rŒ   re   r3   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.r7   c                    r¬   r   )r7   r(   r   )r   r   r7   r-   r   r   r     r®   zAlterModelManagers.__init__c                 C   s   | j j| j| jgi fS r   )r.   r2   r   r7   r    r   r   r   rH     r—   zAlterModelManagers.deconstructc                 C   r–   r   )Zalter_model_managersr!   r7   rL   r   r   r   rN     r—   z!AlterModelManagers.state_forwardsc                 C   rÌ   r   r   r¦   r   r   r   r[     rÍ   z$AlterModelManagers.database_forwardsc                 C   rÌ   r   r   r¦   r   r   r   r_     rÍ   z%AlterModelManagers.database_backwardsc                 C   r�   )NzChange managers on %sr   r    r   r   r   rc     r   zAlterModelManagers.describec                 C   r�   )Nzalter_%s_managersrd   r    r   r   r   re     r"   z*AlterModelManagers.migration_name_fragment)r0   r1   r2   rŠ   r‹   r   rH   rN   r[   r_   rc   rŒ   re   r3   r   r   r-   r   r     s    r   c                   @   s   e Zd ZdZedd„ ƒZdS )ÚIndexOperationZindexesc                 C   r   r   )r›   r   r    r   r   r   r„   &  r"   zIndexOperation.model_name_lowerN)r0   r1   r2   r�   r   r„   r   r   r   r   rÎ   #  s    rÎ   c                   @   r�   )Ú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   r–   r   )Ú	add_indexr„   rÐ   rL   r   r   r   rN   7  r—   zAddIndex.state_forwardsc                 C   ó6   |j  || j¡}|  |jj|¡r| || j¡ d S d S r   )rQ   rR   r›   rS   rT   rU   rÑ   rÐ   rV   r   r   r   r[   :  ó   ÿzAddIndex.database_forwardsc                 C   s6   |j  || j¡}|  |jj|¡r| || j¡ d S d S r   )rQ   rR   r›   rS   rT   rU   Úremove_indexrÐ   rV   r   r   r   r_   ?  rÓ   zAddIndex.database_backwardsc                 C   r”   )N)r›   rÐ   )r›   rÐ   r.   r2   rF   r   r   r   rH   D  ó   þý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   )rB   )r:   Z
expressionr   r   r   rm   S  s    z%AddIndex.describe.<locals>.<listcomp>z*Create index %s on field(s) %s of model %s)rÐ   Zexpressionsr   Újoinr›   r5   r    r   r   r   rc   O  s   ýýzAddIndex.describec                 C   ó   d| j | jj ¡ f S ©Nz%s_%s)r„   rÐ   r   r   r    r   r   r   re   \  ó   z AddIndex.migration_name_fragmentN©r0   r1   r2   rŠ   r   rN   r[   r_   rH   rc   rŒ   re   r   r   r   r   rÏ   +  s    	rÏ   c                   @   r�   )ÚRemoveIndexzRemove an index from a model.c                 C   ó   || _ || _d S r   ©r›   r   ©r   r›   r   r   r   r   r   d  ó   
zRemoveIndex.__init__c                 C   r–   r   )rÔ   r„   r   rL   r   r   r   rN   h  r—   zRemoveIndex.state_forwardsc                 C   sP   |j  || j¡}|  |jj|¡r&|j|| jf }| | j	¡}| 
||¡ d S d S r   )rQ   rR   r›   rS   rT   rU   r   r„   Úget_index_by_namer   rÔ   )r   r%   rW   rX   rY   rZ   Úfrom_model_staterÐ   r   r   r   r[   k  ó   ýzRemoveIndex.database_forwardsc                 C   óP   |j  || j¡}|  |jj|¡r&|j|| jf }| | j	¡}| 
||¡ d S d S r   )rQ   rR   r›   rS   rT   rU   r   r„   rá   r   rÑ   )r   r%   rW   rX   rY   rZ   Úto_model_staterÐ   r   r   r   r_   r  rã   zRemoveIndex.database_backwardsc                 C   r”   ©NrÞ   )r›   r   r.   r2   rF   r   r   r   rH   y  rÕ   zRemoveIndex.deconstructc                 C   r§   )NzRemove index %s from %s©r   r›   r    r   r   r   rc   „  r/   zRemoveIndex.describec                 C   ó   d| j | j ¡ f S ©Nzremove_%s_%s©r„   r   r   r    r   r   r   re   ‡  ó   z#RemoveIndex.migration_name_fragmentNrÛ   r   r   r   r   rÜ   a  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›   rw   rv   Ú
old_fields)r   r›   rw   rv   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›   rw   rv   rí   )r›   rw   rv   rí   r.   r2   rF   r   r   r   rH   ¦  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 )N©r5   r   )rí   rÑ   r„   r   ÚIndexrw   Zremove_model_optionsrÇ   r�   Úrename_indexrv   rL   r   r   r   rN   ±  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   )r?   rœ   Úcolumn)r:   rg   ©rË   r   r   rm   Ê  s    ÿz1RenameIndex.database_forwards.<locals>.<listcomp>T)Zcolumn_namesrÐ   r	   z.Found wrong number (%s) of indexes for %s(%s).rÖ   r   rî   )rQ   rR   r›   rS   rT   rU   rí   Z_constraint_namesr¿   r   r?   rš   r×   r   rï   r„   rá   rv   r   rw   rð   )r   r%   rW   rX   rY   rZ   ÚcolumnsZmatching_index_nameZ	old_indexrâ   rå   Z	new_indexr   rò   r   r[   Ã  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“   rv   rw   r[   r¦   r   r   r   r_   è  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 )rv   r›   rw   rí   r    r   r   r   rc   û  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;   )rv   r{   r“   r„   r×   rí   r    r   r   r   re     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)rw   rv   rí   )rA   rì   r„   rv   r“   r{   r›   rw   rí   r(   r)   r+   r-   r   r   r)     s    ÿ
þý
üüÿzRenameIndex.reduce)NN)r0   r1   r2   rŠ   r   r   r{   r“   rH   rN   r[   r_   rc   rŒ   re   r)   r3   r   r   r-   r   rì   Œ  s    


%

	rì   c                   @   r�   )ÚAddConstraintÚconstraintsc                 C   rÝ   r   ©r›   Ú
constraint)r   r›   r÷   r   r   r   r   $  rà   zAddConstraint.__init__c                 C   r–   r   )Úadd_constraintr„   r÷   rL   r   r   r   rN   (  r—   zAddConstraint.state_forwardsc                 C   rÒ   r   )rQ   rR   r›   rS   rT   rU   rø   r÷   rV   r   r   r   r[   +  rÓ   zAddConstraint.database_forwardsc                 C   rÒ   r   )rQ   rR   r›   rS   rT   rU   Úremove_constraintr÷   rV   r   r   r   r_   0  rÓ   z AddConstraint.database_backwardsc                 C   ó   | j jg | j| jdœfS )Nrö   )r.   r0   r›   r÷   r    r   r   r   rH   5  ó   þý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   rc   ?  s   þzAddConstraint.describec                 C   rØ   rÙ   )r„   r÷   r   r   r    r   r   r   re   E  rÚ   z%AddConstraint.migration_name_fragmentN©r0   r1   r2   r�   r   rN   r[   r_   rH   rc   rŒ   re   r   r   r   r   rô   !  s    
rô   c                   @   r�   )ÚRemoveConstraintrõ   c                 C   rÝ   r   rÞ   rß   r   r   r   r   M  rà   zRemoveConstraint.__init__c                 C   r–   r   )rù   r„   r   rL   r   r   r   rN   Q  r—   zRemoveConstraint.state_forwardsc                 C   sP   |j  || j¡}|  |jj|¡r&|j|| jf }| | j	¡}| 
||¡ d S d S r   )rQ   rR   r›   rS   rT   rU   r   r„   Úget_constraint_by_namer   rù   )r   r%   rW   rX   rY   rZ   râ   r÷   r   r   r   r[   T  rã   z"RemoveConstraint.database_forwardsc                 C   rä   r   )rQ   rR   r›   rS   rT   rU   r   r„   rþ   r   rø   )r   r%   rW   rX   rY   rZ   rå   r÷   r   r   r   r_   [  rã   z#RemoveConstraint.database_backwardsc                 C   rú   ræ   )r.   r0   r›   r   r    r   r   r   rH   b  rû   zRemoveConstraint.deconstructc                 C   r§   )Nz"Remove constraint %s from model %srç   r    r   r   r   rc   l  r/   zRemoveConstraint.describec                 C   rè   ré   rê   r    r   r   r   re   o  rë   z(RemoveConstraint.migration_name_fragmentNrü   r   r   r   r   rý   J  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   r5   r
   r   r   r   r   r   r   r4   ry   rz   rª   r«   r´   r€   rÂ   rÇ   rƒ   r|   r   rÎ   rÏ   rÜ   rì   rô   rý   r   r   r   r   Ú<module>   s<    
  #w
3&AD76+ )