
    Evga                        d dl mZ d dlmZ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	 Z G d
 de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d  d!e          Z  G d" d#e          Z! G d$ d%e          Z" G d& d'e"          Z# G d( d)e"          Z$ G d* d+e"          Z% G d, d-e"          Z& G d. d/e"          Z'd0S )1    )models)	OperationOperationCategory)
ModelState)field_referencesresolve_relation)normalize_together)cached_property   )AddField
AlterFieldFieldOperationRemoveFieldRenameFieldc                     t                      }|D ]1}||v rt          d|d| d          |                    |           2d S )NzFound duplicate value z in CreateModel z
 argument.)set
ValueErroradd)arg_nameobjs	used_valsvals       c/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/django/db/migrations/operations/models.py_check_for_duplicatesr      sj    I  )*JM##xxxX   	c     c                   F     e Zd Zd Zed             Zd Z fdZd Z xZ	S )ModelOperationc                     || _         d S Nname)selfr!   s     r   __init__zModelOperation.__init__   s    			r   c                 4    | j                                         S r   )r!   lowerr"   s    r   
name_lowerzModelOperation.name_lower   s    y   r   c                 <    |                                 | j        k    S r   r%   r'   r"   r!   	app_labels      r   references_modelzModelOperation.references_model   s    zz||t..r   c                 t    t                                          ||          p|                     ||          S r   )superreducecan_reduce_throughr"   	operationr+   	__class__s      r   r/   zModelOperation.reduce    s9    ww~~i33 
t7N7Ny8
 8
 	
r   c                 :    |                     | j        |           S r   )r,   r!   )r"   r2   r+   s      r   r0   z!ModelOperation.can_reduce_through%   s    --diCCCCr   )
__name__
__module____qualname__r#   r
   r'   r,   r/   r0   __classcell__r3   s   @r   r   r      s           ! ! _!/ / /
 
 
 
 

D D D D D D Dr   r   c                   ~     e Zd ZdZej        Zg dZd fd	Zd Z	d Z
d Zd Zd	 Zed
             Zd Z fdZ xZS )CreateModelzCreate a model's table.)fieldsoptionsmanagersNc                 ^   || _         |pi | _        |pt          j        f| _        |pg | _        t                                          |           t          dd | j         D                        t          dd | j        D                        t          dd | j        D                        d S )Nr<   c              3       K   | ]	\  }}|V  
d S r    .0r!   _s      r   	<genexpr>z'CreateModel.__init__.<locals>.<genexpr>7   s&      (I(I'$(I(I(I(I(I(Ir   basesc              3      K   | ]K}t          |d           r|j        j        n*t          |t                    r|                                n|V  LdS )_metaN)hasattrrH   label_lower
isinstancestrr%   )rC   bases     r   rE   z'CreateModel.__init__.<locals>.<genexpr>:   sp          tW--IDJ**)3D#)>)>HD	     r   r>   c              3       K   | ]	\  }}|V  
d S r   rA   rB   s      r   rE   z'CreateModel.__init__.<locals>.<genexpr>C   s&      *M*MGD!4*M*M*M*M*M*Mr   )	r<   r=   r   ModelrF   r>   r.   r#   r   )r"   r!   r<   r=   rF   r>   r3   s         r   r#   zCreateModel.__init__/   s    }"-v|o
 B 	h(I(IT[(I(I(IJJJ  !J  
	
 
	
 
	
 	j*M*Mt}*M*M*MNNNNNr   c                    | j         | j        d}| j        r
| j        |d<   | j        r | j        t          j        fk    r
| j        |d<   | j        r)| j        dt	          j                    fgk    r
| j        |d<   | j        j	        g |fS )N)r!   r<   r=   rF   objectsr>   )
r!   r<   r=   rF   r   rO   r>   Managerr3   r7   r"   kwargss     r   deconstructzCreateModel.deconstructE   s    Ik
 
 < 	- $F9: 	)$*77"jF7O= 	/T]	6>;K;K/L.MMM!%F:+R88r   c                     |                     t          || j        t          | j                  t          | j                  t          | j                  t          | j	                                       d S r   )
	add_modelr   r!   listr<   dictr=   tuplerF   r>   r"   r+   states      r   state_forwardszCreateModel.state_forwardsR   sk    	T[!!T\""dj!!T]## 		
 		
 		
 		
 		
r   c                     |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models         r   database_forwardszCreateModel.database_forwards^   ]    ''	49==##M$<$BEJJ 	.&&u-----	. 	.r   c                     |j                             || j                  }|                     |j        j        |          r|                    |           d S d S r   r`   ra   r!   rb   rc   rd   delete_modelrf   s         r   database_backwardszCreateModel.database_backwardsc   ]    )))TY??##M$<$BEJJ 	.&&u-----	. 	.r   c                 V    d| j                             dd          rdndd| j        S )NzCreate proxyFzproxy  zmodel )r=   getr!   r&   s    r   describezCreateModel.describeh   s9     ((%88@HHb@@II
 	
r   c                     | j         S r   r'   r&   s    r   migration_name_fragmentz#CreateModel.migration_name_fragmentn   s
    r   c                 J   |                                 }|| j        k    rdS ||f}| j        D ]M}|t          j        ur=t          |t          j        j        t          f          rt          ||          |k    r dS N| j
        D ] \  }}t          || j        f||          r dS !dS )NTF)r%   r'   rF   r   rO   rK   rM   	ModelBaserL   r   r<   r   )r"   r!   r+   r'   reference_model_tuplerM   _namefields           r   r,   zCreateModel.references_modelr   s    ZZ\\
((4 "+J 7J 	 	DFL((tfk&;S%ABB )$T9559NNNtt !K 	 	LE5DO,e5J   tt ur   c                    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                  gS t          t                    rr| j        j        k    rbi | j        j        }j        D ]!}|j        vr|                    |d            "t          | j        | j	        || j
        | j                  gS t          t                     r>| j        j        k    r.t          | j        | j	        | j        | j
        j                  gS t          t"                    rN| j        j        k    r>t          | j        | j	        i | j        j        j        i| j
        | j                  gS t          t(                    rI| j        j        k    r9t          | j        | j	        i | j        dj        i| j
        | j                  gS t          t,                    rG| j        j        k    r6t          t0                    r>t          | j        | j	        j        j        fgz   | j        | j
        | j                  gS t          t4                    r:t          | j        fd| j	        D             | j        | j
        | j                  gS t          t6                    r| j                                        }dD ]O}|                    |d           }|r5t;          t=          t>          fd|D                                 }|r|||<   P|                    d          }|j        k    r|d= t          | j        fd| j	        D             || j
        | j                  gS t          t@                    r| j                                        }dD ]*}|                    |          }|rfd	|D             ||<   +|                    d          }|j!        k    r
j        |d<   t          | j        fd
| j	        D             || j
        | j                  gS nt          tD                    r| j        j        k    rt          tF                    rVt          | j        | j	        i | j        dg | j                            dg           j$        i| j
        | j                  gS t          tJ                    r[fd| j                            dg           D             }t          | j        | j	        i | j        d|i| j
        | j                  gS t          tL                    rVt          | j        | j	        i | j        dg | j                            dg           j'        i| j
        | j                  gS t          tP                    r[fd| j                            dg           D             }	t          | j        | j	        i | j        d|	i| j
        | j                  gS tS                      *                    |          S )Nrs   F)r<   r=   rF   r>   order_with_respect_toc                 B    g | ]\  }}||j         k    rj        n|fS rA   )r!   r~   rC   nvr2   s      r   
<listcomp>z&CreateModel.reduce.<locals>.<listcomp>   sD           $1 1	3F3F	AN     r   )unique_togetherindex_togetherc              3   N   K   | ]}t          fd |D                       V   dS )c              3   2   K   | ]}|j         k    |V  d S r   rx   rC   fr2   s     r   rE   z/CreateModel.reduce.<locals>.<genexpr>.<genexpr>   s9       *& *&./Q)BV=V=V=V=V=V=V*& *&r   NrZ   rC   r<   r2   s     r   rE   z%CreateModel.reduce.<locals>.<genexpr>   si       !" !" )/ %* *& *& *& *&39*& *& *& %& %&!" !" !" !" !" !"r   c                 X    g | ]&\  }}|                                 j        k    "||f'S rA   r)   r   s      r   r   z&CreateModel.reduce.<locals>.<listcomp>  sA           $1 wwyyI,@@@ F@@@r   c                 F    h | ]}t          fd |D                       S )c              3   @   K   | ]}|j         k    rj        n|V  d S r   old_namenew_namer   s     r   rE   z/CreateModel.reduce.<locals>.<setcomp>.<genexpr>  sM       " "$% 789;M6M6M	 2 2ST" " " " " "r   r   r   s     r   	<setcomp>z%CreateModel.reduce.<locals>.<setcomp>  s[     0 0 0
 !'	 " " " " ")/" " "  0 0 0r   c                 B    g | ]\  }}|j         k    rj        n||fS rA   r   r   s      r   r   z&CreateModel.reduce.<locals>.<listcomp>*  sI           $1 45	8J3J3JY//PQSTU     r   indexesc                 4    g | ]}|j         j         k    |S rA   r    )rC   indexr2   s     r   r   z&CreateModel.reduce.<locals>.<listcomp>H  s2     # # #zY^33 333r   constraintsc                 4    g | ]}|j         j         k    |S rA   r    )rC   
constraintr2   s     r   r   z&CreateModel.reduce.<locals>.<listcomp>j  s2     ' ' '"!).88 888r   )+rK   DeleteModelr'   r=   ru   RenameModelold_name_lowerr;   r   r<   rF   r>   AlterModelOptionsALTER_OPTION_KEYSpopr!   AlterModelManagersAlterTogetherOptionOperationoption_nameoption_valueAlterOrderWithRespectTor   r   model_name_lowerr   r~   r   r   copyr   filterboolr   r   IndexOperationAddIndexr   RemoveIndexAddConstraintr   RemoveConstraintr.   r/   )r"   r2   r+   r=   keyr   optionr   options_indexesoptions_constraintsr3   s    `        r   r/   zCreateModel.reduce   s[   y+..p	9#777L$$We44 8 Iy+..j	9#;;; &; L*!]    y"344]	9#777;;):;G 2 + +i///KKT***I;#*!]    y"455L	9#777 I; L*&/    y">??	9#777 I;,$0)2HI *!]	 	 	  y"9::o	9#777 I;,/1P  *!]	 	 	  y.11_	9#===)X.. S	#{y~y.O-PP $"j!%    Iz22 I	       (,      !%"j!%	 	 	  I{33 <,++--#H : :K$[[d;;F :!$" $!" !" !" !" 39	!" !" !" 
" 
" " :39GK0(/4K(L(L%(I,@@@ 78	       (,     
 !("j!%
 
 
  I{33 ,++--#H 	 	K$[[55F 0 0 0 0
 +10 0 0, )04K(L(L%(I,>>>7@7IG34	       (,      !("j!%	 	 	 8 y.11G	9#===)X.. C	#{!"l!% (!%!1!1)R!@!@( )(! ! #j!%    I{33 3# # # #!%!1!1)R!@!@# # #  	#{!"l!%! ! #j!%	 	 	  I}55 !	#{!"l!) ,!%!1!1-!D!D, ) 4,! ! #j!%    I'788 ' ' ' '&*l&6&6}b&I&I' ' '#  	#{!"l!)+>! ! #j!%	 	 	  ww~~i333r   )NNN)r5   r6   r7   __doc__r   ADDITIONcategoryserialization_expand_argsr#   rU   r]   rk   rp   rv   propertyry   r,   r/   r8   r9   s   @r   r;   r;   )   s        !! )H A A AO O O O O O,9 9 9

 

 

. . .
. . .

 
 
   X  .r4 r4 r4 r4 r4 r4 r4 r4 r4r   r;   c                   Z    e Zd ZdZej        Zd Zd Zd Z	d Z
d Zd Zed             Zd	S )
r   zDrop a model's table.c                 2    d| j         i}| j        j        g |fS Nr!   )r!   r3   r7   rS   s     r   rU   zDeleteModel.deconstruct  s$    DI
 +R88r   c                 <    |                     || j                   d S r   )remove_modelr'   r[   s      r   r]   zDeleteModel.state_forwards  s     9do66666r   c                     |j                             || j                  }|                     |j        j        |          r|                    |           d S d S r   rn   rf   s         r   rk   zDeleteModel.database_forwards  rq   r   c                     |j                             || j                  }|                     |j        j        |          r|                    |           d S d S r   r_   rf   s         r   rp   zDeleteModel.database_backwards  rl   r   c                     dS )NTrA   r*   s      r   r,   zDeleteModel.references_model  s	     tr   c                     d| j         z  S )NzDelete model %sr    r&   s    r   rv   zDeleteModel.describe  s     49,,r   c                     d| j         z  S )Nz	delete_%srx   r&   s    r   ry   z#DeleteModel.migration_name_fragment  s    T_,,r   N)r5   r6   r7   r   r   REMOVALr   rU   r]   rk   rp   r,   rv   r   ry   rA   r   r   r   r   ~  s         (H9 9 97 7 7. . .
. . .
  
- - - - - X- - -r   r   c                        e Zd ZdZej        Z fdZed             Z	ed             Z
d Zd Zd Zd Zd	 Zd
 Zed             Z fdZ xZS )r   zRename a model.c                 f    || _         || _        t                                          |           d S r   )r   r   r.   r#   )r"   r   r   r3   s      r   r#   zRenameModel.__init__  s/      """""r   c                 4    | j                                         S r   r   r%   r&   s    r   r   zRenameModel.old_name_lower      }""$$$r   c                 4    | j                                         S r   r   r%   r&   s    r   new_name_lowerzRenameModel.new_name_lower  r   r   c                 >    | j         | j        d}| j        j        g |fS )Nr   )r   r   r3   r7   rS   s     r   rU   zRenameModel.deconstruct  s,    
 
 +R88r   c                 H    |                     || j        | j                   d S r   )rename_modelr   r   r[   s      r   r]   zRenameModel.state_forwards  s$    9dmT]CCCCCr   c                 B   |j                             || j                  }|                     |j        j        |          r[|j                             || j                  }|                    ||j        j	        |j        j	                   |j        j
        D ]}|j        |k    r|}|| j        f}	n1|j        j        j        |j        j        j        f}	 |j         j        |	 } |j         j        |	 j                            |j        j                  }
|                    ||j        |
           t'          |j        j        |j        j                  }|D ]G\  }}|j        |j        k    s|j        j        j        j        s,|                    |||d           Fd S d S )NF)strict)r`   ra   r   rb   rc   rd   r   alter_db_tablerH   db_tablerelated_objectsrelated_modelr   r+   
model_name	get_fieldr~   r!   alter_fieldziplocal_many_to_manyrj   remote_fieldthroughauto_created_alter_many_to_many)r"   r+   rg   rh   ri   	new_model	old_modelrelated_objectrj   related_keyto_fieldr<   	old_field	new_fields                 r   rk   zRenameModel.database_forwards  s   M++It}EE	##M$<$BINN ,	"11)T]KKI((((   #,/"A  !/9<<%E#,d.A"BKK '4:D&4:E#K 4HM3[AE28=2K@FPP"(-  ))"(    2IO4V F )/  $	9 Oy'>>>$19?L ? 11 	 2    O,	 ,	> r   c                     | j         | j        c| _        | _         | j        | j        c| _        | _        |                     ||||           | j         | j        c| _        | _         | j        | j        c| _        | _        d S r   )r   r   r   r   rk   r"   r+   rg   rh   ri   s        r   rp   zRenameModel.database_backwards  s     	1T0 (,}dm$t}y-XNNN  	1T0 (,}dm$t}}}r   c                 v    |                                 | j        k    p|                                 | j        k    S r   )r%   r   r   r*   s      r   r,   zRenameModel.references_model  s/    JJLLD//V4::<<4CV3V	
r   c                 &    d| j         d| j        S )NzRename model  to r   r&   s    r   rv   zRenameModel.describe  s     *.---GGr   c                 &    d| j         d| j        S Nrename_rD   )r   r   r&   s    r   ry   z#RenameModel.migration_name_fragment  s     !%!4!4!4d6I6IJJr   c                    t          |t                    r+| j        |j        k    rt          | j        |j                  gS t          t          |                               ||          p|	                    | j        |           S r   )
rK   r   r   r   r   r   r.   r   r/   r,   r1   s      r   r/   zRenameModel.reduce
  s    y+..		#y'??? M&   ^T**11y
 
 F++DM9EEE	Fr   )r5   r6   r7   r   r   
ALTERATIONr   r#   r
   r   r   rU   r]   rk   rp   r,   rv   r   ry   r/   r8   r9   s   @r   r   r     s         +H# # # # #
 % % _% % % _%9 9 9D D D. . .`D D D
 
 

H H H K K XKF F F F F F F F Fr   r   c                   ,     e Zd Zej        Z fdZ xZS )ModelOptionOperationc                     t          || j        t          f          r| j        |j        k    r|gS t	                                          ||          S r   )rK   r3   r   r'   r.   r/   r1   s      r   r/   zModelOptionOperation.reduce  sL    y4>;"?@@	9#777;ww~~i333r   )r5   r6   r7   r   r   r   r/   r8   r9   s   @r   r   r     s@         +H4 4 4 4 4 4 4 4 4r   r   c                   V     e Zd ZdZ fdZd Zd Zd Zd Zd Z	e
d             Z xZS )	AlterModelTablezRename a model's table.c                 X    || _         t                                          |           d S r   )tabler.   r#   )r"   r!   r   r3   s      r   r#   zAlterModelTable.__init__+  s(    
r   c                 >    | j         | j        d}| j        j        g |fS )Nr!   r   )r!   r   r3   r7   rS   s     r   rU   zAlterModelTable.deconstruct/  s,    IZ
 
 +R88r   c                 L    |                     || j        d| j        i           d S )Nr   )alter_model_optionsr'   r   r[   s      r   r]   zAlterModelTable.state_forwards6  s)    !!)T_z4:>VWWWWWr   c                 2   |j                             || j                  }|                     |j        j        |          r|j                             || j                  }|                    ||j        j        |j        j                   t          |j        j
        |j        j
                  D ]f\  }}|j        j        j        j        rI|                    |j        j        |j        j        j        j        |j        j        j        j                   ed S d S r   )r`   ra   r!   rb   rc   rd   r   rH   r   r   r   r   r   r   )	r"   r+   rg   rh   ri   r   r   r   r   s	            r   rk   z!AlterModelTable.database_forwards9  s   M++ItyAA	##M$<$BINN 	"11)TYGGI((((   ),2IO4V) )  $	9 )17D !00!.6!.6<E!.6<E  	 	 r   c                 2    |                      ||||          S r   rk   r   s        r   rp   z"AlterModelTable.database_backwardsM      %%i
HUUUr   c                 8    d| j         d| j        | j        ndS )NzRename table for r   z	(default)r   r&   s    r   rv   zAlterModelTable.describeP  s*     III*0DJJkA
 	
r   c                     d| j         z  S )Nzalter_%s_tablerx   r&   s    r   ry   z'AlterModelTable.migration_name_fragmentV  s    $/11r   )r5   r6   r7   r   r#   rU   r]   rk   rp   rv   r   ry   r8   r9   s   @r   r   r   (  s        !!    9 9 9X X X  (V V V
 
 
 2 2 X2 2 2 2 2r   r   c                   R     e Zd Z fdZd Zd Zd Zd Zd Ze	d             Z
 xZS )AlterModelTableCommentc                 X    || _         t                                          |           d S r   )table_commentr.   r#   )r"   r!   r  r3   s      r   r#   zAlterModelTableComment.__init__\  s)    *r   c                 >    | j         | j        d}| j        j        g |fS )N)r!   r  )r!   r  r3   r7   rS   s     r   rU   z"AlterModelTableComment.deconstruct`  s-    I!/
 
 +R88r   c                 L    |                     || j        d| j        i           d S )Ndb_table_comment)r   r'   r  r[   s      r   r]   z%AlterModelTableComment.state_forwardsg  s6    !!t);T=O(P	
 	
 	
 	
 	
r   c                     |j                             || j                  }|                     |j        j        |          rM|j                             || j                  }|                    ||j        j        |j        j                   d S d S r   )	r`   ra   r!   rb   rc   rd   alter_db_table_commentrH   r  )r"   r+   rg   rh   ri   r   r   s          r   rk   z(AlterModelTableComment.database_forwardsl  s    M++ItyAA	##M$<$BINN 	"11)TYGGI0000    	 	r   c                 2    |                      ||||          S r   r   r   s        r   rp   z)AlterModelTableComment.database_backwardsv  r   r   c                     d| j          dS )NAlter z table commentr    r&   s    r   rv   zAlterModelTableComment.describey  s    1	1111r   c                     d| j          dS )Nalter__table_commentrx   r&   s    r   ry   z.AlterModelTableComment.migration_name_fragment|  s    77777r   )r5   r6   r7   r#   rU   r]   rk   rp   rv   r   ry   r8   r9   s   @r   r  r  [  s            9 9 9
 
 

  V V V2 2 2 8 8 X8 8 8 8 8r   r  c                   |     e Zd ZdZ fdZed             Zd Zd Zd Z	d Z
d Zd	 Zed
             Z fdZ xZS )r   Nc                     |rt          t          |                    }t          | | j        |           t	                                          |           d S r   )r   r	   setattrr   r.   r#   )r"   r!   r   r3   s      r   r#   z%AlterTogetherOptionOperation.__init__  sU     	A1,??@@Ld&555r   c                 ,    t          | | j                  S r   )getattrr   r&   s    r   r   z)AlterTogetherOptionOperation.option_value  s    tT-...r   c                 J    d| j         | j        | j        i}| j        j        g |fS r   )r!   r   r   r3   r7   rS   s     r   rU   z(AlterTogetherOptionOperation.deconstruct  s/    DId/
 +R88r   c                 V    |                     || j        | j        | j        i           d S r   )r   r'   r   r   r[   s      r   r]   z+AlterTogetherOptionOperation.state_forwards  s:    !!Ot01	
 	
 	
 	
 	
r   c           
         |j                             || j                  }|                     |j        j        |          r|j                             || j                  }t          |d| j        z            } ||t          |j        | j        t                                t          |j        | j        t                                           d S d S )Nzalter_%s)
r`   ra   r!   rb   rc   rd   r  r   rH   r   )r"   r+   rg   rh   ri   r   r   alter_togethers           r   rk   z.AlterTogetherOptionOperation.database_forwards  s    M++ItyAA	##M$<$BINN 	"11)TYGGI$]JAQ4QRRNN	)9355AA	)9355AA    	 	r   c                 2    |                      ||||          S r   r   r   s        r   rp   z/AlterTogetherOptionOperation.database_backwards  r   r   c                     |                      ||          o'| j         pt          fd| j        D                       S )Nc              3       K   | ]}|v V  	d S r   rA   )rC   r<   r!   s     r   rE   z@AlterTogetherOptionOperation.references_field.<locals>.<genexpr>  s'      DDDFNDDDDDDr   )r,   r   anyr"   r   r!   r+   s     ` r   references_fieldz-AlterTogetherOptionOperation.references_field  sR    $$Z;; 
!! EDDDD$2CDDDDD	
r   c                 V    d| j         d| j        dt          | j        pd          dS )Nr  z for z (rt   z constraint(s)))r   r!   lenr   r&   s    r   rv   z%AlterTogetherOptionOperation.describe  s<     III!'R((((
 	
r   c                 &    d| j         d| j        S )Nr  rD   )r'   r   r&   s    r   ry   z4AlterTogetherOptionOperation.migration_name_fragment  s      $1A1ABBr   c                     t                                          ||          p2t          |t                    ot	          |          t	          |           uS r   )r.   r0   rK   r   typer1   s      r   r0   z/AlterTogetherOptionOperation.can_reduce_through  sK    ww)))Y?? 
y">?? 2YtDzz1	
r   )r5   r6   r7   r   r#   r
   r   rU   r]   rk   rp   r  rv   r   ry   r0   r8   r9   s   @r   r   r     s        K     / / _/9 9 9
 
 
	 	 	V V V
 
 

 
 
 C C XC
 
 
 
 
 
 
 
 
r   r   c                   &     e Zd ZdZdZ fdZ xZS )AlterUniqueTogetherz|
    Change the value of unique_together to the target one.
    Input value of unique_together must be a set of tuples.
    r   c                 L    t                                          ||           d S r   r.   r#   )r"   r!   r   r3   s      r   r#   zAlterUniqueTogether.__init__  s#    /////r   r5   r6   r7   r   r   r#   r8   r9   s   @r   r$  r$    sI         
 $K0 0 0 0 0 0 0 0 0r   r$  c                   &     e Zd ZdZdZ fdZ xZS )AlterIndexTogetherzz
    Change the value of index_together to the target one.
    Input value of index_together must be a set of tuples.
    r   c                 L    t                                          ||           d S r   r&  )r"   r!   r   r3   s      r   r#   zAlterIndexTogether.__init__  s#    ~.....r   r'  r9   s   @r   r)  r)    sI         
 #K/ / / / / / / / /r   r)  c                   `     e Zd ZdZdZ fdZd Zd Zd Zd Z	d Z
d	 Zed
             Z xZS )r   z9Represent a change with the order_with_respect_to option.r   c                 X    || _         t                                          |           d S r   )r   r.   r#   )r"   r!   r   r3   s      r   r#   z AlterOrderWithRespectTo.__init__  s)    %:"r   c                 >    | j         | j        d}| j        j        g |fS )Nr!   r   )r!   r   r3   r7   rS   s     r   rU   z#AlterOrderWithRespectTo.deconstruct  s-    I%)%?
 
 +R88r   c                 V    |                     || j        | j        | j        i           d S r   )r   r'   r   r   r[   s      r   r]   z&AlterOrderWithRespectTo.state_forwards  s:    !!Ot9:	
 	
 	
 	
 	
r   c                 (   |j                             || j                  }|                     |j        j        |          r|j                             || j                  }|j        j        r<|j        j        s0|                    ||j        	                    d                     d S |j        j        r[|j        j        sQ|j        	                    d          }|
                                sd|_        |                    ||           d S d S d S d S )N_orderr   )r`   ra   r!   rb   rc   rd   rH   r   remove_fieldr   has_defaultdefault	add_field)r"   r+   rg   rh   ri   to_model
from_modelr~   s           r   rk   z)AlterOrderWithRespectTo.database_forwards  s>   =**9di@@##M$<$BHMM 	#229diHHJ  6 < **
 0 : :8 D D     4
"(>
 !00::((** &$%EM''    '	 	
 
 
 
r   c                 6    |                      ||||           d S r   r   r   s        r   rp   z*AlterOrderWithRespectTo.database_backwards  s"    y-XNNNNNr   c                 V    |                      ||          o| j        d u p
|| j        k    S r   )r,   r   r  s       r   r  z(AlterOrderWithRespectTo.references_field  s7    $$Z;; 
&$.T$$:T2T	
r   c                 &    d| j         d| j        S )NzSet order_with_respect_to on r   r.  r&   s    r   rv   z AlterOrderWithRespectTo.describe  s      III&&
 	
r   c                     d| j         z  S )Nzalter_%s_order_with_respect_torx   r&   s    r   ry   z/AlterOrderWithRespectTo.migration_name_fragment  s    /$/AAr   )r5   r6   r7   r   r   r#   rU   r]   rk   rp   r  rv   r   ry   r8   r9   s   @r   r   r     s        CC)K    9 9 9
 
 
  4O O O
 
 


 
 
 B B XB B B B Br   r   c                   ^     e Zd ZdZg dZ fdZd Zd Zd Zd Z	d Z
ed	             Z x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                 X    || _         t                                          |           d S r   )r=   r.   r#   )r"   r!   r=   r3   s      r   r#   zAlterModelOptions.__init__4  s(    r   c                 >    | j         | j        d}| j        j        g |fS )N)r!   r=   )r!   r=   r3   r7   rS   s     r   rU   zAlterModelOptions.deconstruct8  s,    I|
 
 +R88r   c                 T    |                     || j        | j        | j                   d S r   )r   r'   r=   r   r[   s      r   r]   z AlterModelOptions.state_forwards?  s7    !!OL"		
 	
 	
 	
 	
r   c                     d S r   rA   r   s        r   rk   z#AlterModelOptions.database_forwardsG      r   c                     d S r   rA   r   s        r   rp   z$AlterModelOptions.database_backwardsJ  rL  r   c                     d| j         z  S )NzChange Meta options on %sr    r&   s    r   rv   zAlterModelOptions.describeM  s    *TY66r   c                     d| j         z  S )Nzalter_%s_optionsrx   r&   s    r   ry   z)AlterModelOptions.migration_name_fragmentP  s    !DO33r   )r5   r6   r7   r   r   r#   rU   r]   rk   rp   rv   r   ry   r8   r9   s   @r   r   r     s               9 9 9
 
 
    7 7 7 4 4 X4 4 4 4 4r   r   c                   \     e Zd ZdZdgZ fdZd Zd Zd Zd Z	d Z
ed	             Z xZS )
r   zAlter the model's managers.r>   c                 X    || _         t                                          |           d S r   )r>   r.   r#   )r"   r!   r>   r3   s      r   r#   zAlterModelManagers.__init__Z  s(     r   c                 8    | j         j        | j        | j        gi fS r   )r3   r7   r!   r>   r&   s    r   rU   zAlterModelManagers.deconstruct^  s    +di-GLLr   c                 H    |                     || j        | j                   d S r   )alter_model_managersr'   r>   r[   s      r   r]   z!AlterModelManagers.state_forwardsa  s$    ""9dot}MMMMMr   c                     d S r   rA   r   s        r   rk   z$AlterModelManagers.database_forwardsd  rL  r   c                     d S r   rA   r   s        r   rp   z%AlterModelManagers.database_backwardsg  rL  r   c                     d| j         z  S )NzChange managers on %sr    r&   s    r   rv   zAlterModelManagers.describej  s    &22r   c                     d| j         z  S )Nzalter_%s_managersrx   r&   s    r   ry   z*AlterModelManagers.migration_name_fragmentm  s    "T_44r   )r5   r6   r7   r   r   r#   rU   r]   rk   rp   rv   r   ry   r8   r9   s   @r   r   r   U  s        %%!+    M M MN N N    3 3 3 5 5 X5 5 5 5 5r   r   c                   (    e Zd ZdZed             ZdS )r   r   c                 4    | j                                         S r   )r   r%   r&   s    r   r   zIndexOperation.model_name_loweru  s    $$&&&r   N)r5   r6   r7   r   r
   r   rA   r   r   r   r   r  s2        K' ' _' ' 'r   r   c                   j     e Zd ZdZej        Zd Zd Zd Z	d Z
d Zd Zed             Z fd	Z xZS )
r   zAdd an index on a model.c                 T    || _         |j        st          d|z            || _        d S )NzSIndexes passed to AddIndex operations require a name argument. %r doesn't have one.)r   r!   r   r   )r"   r   r   s      r   r#   zAddIndex.__init__  s?    $z 	1389   


r   c                 H    |                     || j        | j                   d S r   )	add_indexr   r   r[   s      r   r]   zAddIndex.state_forwards  s#    	4#8$*EEEEEr   c                     |j                             || j                  }|                     |j        j        |          r|                    || j                   d S d S r   )r`   ra   r   rb   rc   rd   r^  r   rf   s         r   rk   zAddIndex.database_forwards  sa    ''	4?CC##M$<$BEJJ 	7##E4:66666	7 	7r   c                     |j                             || j                  }|                     |j        j        |          r|                    || j                   d S d S r   )r`   ra   r   rb   rc   rd   remove_indexr   rf   s         r   rp   zAddIndex.database_backwards  sa    )))T_EE##M$<$BEJJ 	:&&udj99999	: 	:r   c                 >    | j         | j        d}| j        j        g |fS N)r   r   )r   r   r3   r7   rS   s     r   rU   zAddIndex.deconstruct  s2    /Z
 

 N'
 	
r   c                 
   | j         j        rAd| j         j        dd                    d | j         j        D                       d| j        S d| j         j        dd                    | j         j                  d| j        S )NzCreate index  on , c                 ,    g | ]}t          |          S rA   )rL   )rC   
expressions     r   r   z%AddIndex.describe.<locals>.<listcomp>  s    TTTz3z??TTTr   
 on model z on field(s) z
 of model )r   expressionsr!   joinr   r<   r&   s    r   rv   zAddIndex.describe  s    :! 	 	
		TTTZ=STTTUUUU 	 JOOOIIdj'((((OO
 	
r   c                 R    | j         d| j        j                                        S NrD   )r   r   r!   r%   r&   s    r   ry   z AddIndex.migration_name_fragment  s)    ///1F1F1H1H1HIIr   c                 N   t          |t                    r| j        j        |j        k    rg S t          |t                    rB| j        j        |j        k    r-|j        | j        _        t          | j        | j                  gS t                      
                    ||          S rc  )rK   r   r   r!   RenameIndexr   r   r   r   r.   r/   r1   s      r   r/   zAddIndex.reduce  s    i-- 	$*/Y^2S2SIi-- 	L$*/YEW2W2W'0DJOtzJJJKKww~~i333r   )r5   r6   r7   r   r   r   r   r#   r]   rk   rp   rU   rv   r   ry   r/   r8   r9   s   @r   r   r   z  s        "" )H  F F F7 7 7
: : :
	
 	
 	

 
 
 J J XJ4 4 4 4 4 4 4 4 4r   r   c                   Z    e Zd ZdZej        Zd Zd Zd Z	d Z
d Zd Zed             Zd	S )
r   zRemove an index from a model.c                 "    || _         || _        d S r   r   r!   r"   r   r!   s      r   r#   zRemoveIndex.__init__      $			r   c                 H    |                     || j        | j                   d S r   )ra  r   r!   r[   s      r   r]   zRemoveIndex.state_forwards  s%    9d&;TYGGGGGr   c                    |j                             || j                  }|                     |j        j        |          rF|j        || j        f         }|                    | j	                  }|
                    ||           d S d S r   )r`   ra   r   rb   rc   rd   r   r   get_index_by_namer!   ra  )r"   r+   rg   rh   ri   rj   from_model_stater   s           r   rk   zRemoveIndex.database_forwards  s    )))T_EE##M$<$BEJJ 	5)0D<Q1QR$66tyAAE&&ue44444	5 	5r   c                    |j                             || j                  }|                     |j        j        |          rF|j        || j        f         }|                    | j	                  }|
                    ||           d S d S r   )r`   ra   r   rb   rc   rd   r   r   rw  r!   r^  )r"   r+   rg   rh   ri   rj   to_model_stater   s           r   rp   zRemoveIndex.database_backwards  s    ''	4?CC##M$<$BEJJ 	2%_Y8M-MNN"44TY??E##E511111	2 	2r   c                 >    | j         | j        d}| j        j        g |fS Nrr  )r   r!   r3   r7   rS   s     r   rU   zRemoveIndex.deconstruct  s2    /I
 

 N'
 	
r   c                 &    d| j         d| j        S )NzRemove index z from r!   r   r&   s    r   rv   zRemoveIndex.describe  s     ,0IIItGGr   c                 J    d| j         d| j                                        S Nremove_rD   r   r!   r%   r&   s    r   ry   z#RemoveIndex.migration_name_fragment  '     !%!6!6!6	8I8I8IJJr   N)r5   r6   r7   r   r   r   r   r#   r]   rk   rp   rU   rv   r   ry   rA   r   r   r   r     s        '' (H  H H H5 5 52 2 2	
 	
 	
H H H K K XK K Kr   r   c                        e Zd ZdZej        ZddZed             Z	ed             Z
d Zd Zd Zd	 Zd
 Zed             Z fdZ xZS )ro  zRename an index.Nc                     |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   
old_fields)r"   r   r   r   r  s        r   r#   zRenameIndex.__init__  sp     	
 	    	
 	M   %  $r   c                 4    | j                                         S r   r   r&   s    r   r   zRenameIndex.old_name_lower  r   r   c                 4    | j                                         S r   r   r&   s    r   r   zRenameIndex.new_name_lower  r   r   c                     | 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  r3   r7   rS   s     r   rU   zRenameIndex.deconstruct  sX    /
 
 = 	/!%F:? 	3#'?F< +R88r   c                 2   | j         rh|                    || j        t          j        | j         | j                             |                    || j        t          j        | j                    d S |	                    || j        | j
        | j                   d S )Nr<   r!   )r  r^  r   r   Indexr   remove_model_optionsr)  r   rename_indexr   r[   s      r   r]   zRenameIndex.state_forwards  s    ? 	OO%DO$-HHH  
 &&%".	     40$-    r   c           
      ,   |j                             || j                  }|                     |j        j        |          sd S | j        r|j                             || j                  fd| j        D             }|                    |dd          }t          |          dk    rCt          dt          |          dj
        j        dd	                    |          d
          t          j        | j        |d                   }n.|j        || j        f         }	|	                    | j                  }|j        | j        k    rd S |j        || j        f         }
|
                    | j                  }|                    |||           d S )Nc                 N    g | ]!}j                             |          j        "S rA   )rH   r   column)rC   r~   r7  s     r   r   z1RenameIndex.database_forwards.<locals>.<listcomp>'  s:       =B
 **5118  r   TF)column_namesr   uniquer   zFound wrong number (z) of indexes for (rf  z).r   r  )r`   ra   r   rb   rc   rd   r  _constraint_namesr  r   rH   r   rk  r   r  r   rw  r   r!   r   r  )r"   r+   rg   rh   ri   rj   columnsmatching_index_name	old_indexrx  rz  	new_indexr7  s               @r   rk   zRenameIndex.database_forwards   s   ''	4?CC''(@(FNN 	F? 	J#229doNNJ   FJo  G #0"A"A$	 #B # # &''1,, j /0000"(111		'****	   (+  II
  *0D<Q1QR(::4=III>T]**F!D4I)IJ"44T]CC	""5)Y?????r   c                    | j         rd S | j        | j        c| _        | _        | j        | j        c| _        | _        |                     ||||           | j        | j        c| _        | _        | j        | j        c| _        | _        d S r   )r  r   r   r   r   rk   r   s        r   rp   zRenameIndex.database_backwardsH  s    ? 	F  	1T0 (,}dm$t}y-XNNN  	1T0 (,}dm$t}}}r   c                 x    | j         rd| j          d| j         d| j         S d| j         d| j         d| j         S )NzRename index re  r   zRename unnamed index for )r   r   r   r  r&   s    r   rv   zRenameIndex.describe[  sg    = 	WWW4?WWWW  T_  } 	
r   c                     | j         rd| j        d| j        S d| j        dd                    | j                  d| j        S r   )r   r   r   r   rk  r  r&   s    r   ry   z#RenameIndex.migration_name_fragmente  sk    = 	O 	O%)%8%8%8$:M:MNN	O !!!HHT_%%%%
 	
r   c                    t          |t                    rO| j        |j        k    r?|j        r8| j        |j        k    r(t          | j        |j        | j        | j                  gS t                      
                    ||          S )N)r   r   r  )rK   ro  r   r   r   r   r   r   r  r.   r/   r1   s      r   r/   zRenameIndex.reduceo  s    y+..	%)CCC" D#y'??? O&/!]#	    ww~~i333r   )NN)r5   r6   r7   r   r   r   r   r#   r
   r   r   rU   r]   rk   rp   rv   r   ry   r/   r8   r9   s   @r   ro  ro    s         +H% % % % % % _% % % _%	9 	9 	9  $&@ &@ &@PD D D&
 
 
 
 
 X
4 4 4 4 4 4 4 4 4r   ro  c                   j     e Zd Zej        ZdZd Zd Zd Z	d Z
d Zd Zed             Z fd	Z xZS )
r   r   c                 "    || _         || _        d S r   r   r   )r"   r   r   s      r   r#   zAddConstraint.__init__  s    $$r   c                 H    |                     || j        | j                   d S r   )add_constraintr   r   r[   s      r   r]   zAddConstraint.state_forwards  s%    Y(=tOOOOOr   c                     |j                             || j                  }|                     |j        j        |          r|                    || j                   d S d S r   )r`   ra   r   rb   rc   rd   r  r   rf   s         r   rk   zAddConstraint.database_forwards  sd    ''	4?CC##M$<$BEJJ 	A((@@@@@	A 	Ar   c                     |j                             || j                  }|                     |j        j        |          r|                    || j                   d S d S r   )r`   ra   r   rb   rc   rd   remove_constraintr   rf   s         r   rp   z AddConstraint.database_backwards  sd    ''	4?CC##M$<$BEJJ 	D++E4?CCCCC	D 	Dr   c                 :    | j         j        g | j        | j        dfS )Nr  )r3   r5   r   r   r&   s    r   rU   zAddConstraint.deconstruct  s+    N#"o"o 
 	
r   c                 0    d| j         j        d| j        S )NzCreate constraint ri  )r   r!   r   r&   s    r   rv   zAddConstraint.describe  s#     O   OO
 	
r   c                 R    | j         d| j        j                                        S rm  )r   r   r!   r%   r&   s    r   ry   z%AddConstraint.migration_name_fragment  s*    ///1E1K1K1M1M1MNNr   c                     t          |t                    r'| j        |j        k    r| j        j        |j        k    rg S t                                          ||          S r   )rK   r   r   r   r!   r.   r/   r1   s      r   r/   zAddConstraint.reduce  sV    y"233	%)CCC$	66Iww~~i333r   )r5   r6   r7   r   r   r   r   r#   r]   rk   rp   rU   rv   r   ry   r/   r8   r9   s   @r   r   r     s         )HK% % %P P PA A A
D D D

 
 

 
 
 O O XO4 4 4 4 4 4 4 4 4r   r   c                   Z    e Zd Zej        ZdZd Zd Zd Z	d Z
d Zd Zed             Zd	S )
r   r   c                 "    || _         || _        d S r   rr  rs  s      r   r#   zRemoveConstraint.__init__  rt  r   c                 H    |                     || j        | j                   d S r   )r  r   r!   r[   s      r   r]   zRemoveConstraint.state_forwards  s%    	4+@$)LLLLLr   c                    |j                             || j                  }|                     |j        j        |          rF|j        || j        f         }|                    | j	                  }|
                    ||           d S d S r   )r`   ra   r   rb   rc   rd   r   r   get_constraint_by_namer!   r  )r"   r+   rg   rh   ri   rj   rx  r   s           r   rk   z"RemoveConstraint.database_forwards  s    ''	4?CC##M$<$BEJJ 	?)0D<Q1QR)@@KKJ++E:>>>>>	? 	?r   c                    |j                             || j                  }|                     |j        j        |          rF|j        || j        f         }|                    | j	                  }|
                    ||           d S d S r   )r`   ra   r   rb   rc   rd   r   r   r  r!   r  )r"   r+   rg   rh   ri   rj   rz  r   s           r   rp   z#RemoveConstraint.database_backwards  s    ''	4?CC##M$<$BEJJ 	<%_Y8M-MNN'>>tyIIJ((
;;;;;	< 	<r   c                 :    | j         j        g | j        | j        dfS r|  )r3   r5   r   r!   r&   s    r   rU   zRemoveConstraint.deconstruct  s+    N#"o	 
 	
r   c                 &    d| j         d| j        S )NzRemove constraint z from model r~  r&   s    r   rv   zRemoveConstraint.describe  s     7;yyy$//RRr   c                 J    d| j         d| j                                        S r  r  r&   s    r   ry   z(RemoveConstraint.migration_name_fragment  r  r   N)r5   r6   r7   r   r   r   r   r#   r]   rk   rp   rU   rv   r   ry   rA   r   r   r   r     s         (HK  M M M? ? ?< < <
 
 
S S S K K XK K Kr   r   N)(	django.dbr   $django.db.migrations.operations.baser   r   django.db.migrations.stater   django.db.migrations.utilsr   r   django.db.models.optionsr	   django.utils.functionalr
   r<   r   r   r   r   r   r   r   r;   r   r   r   r   r  r   r$  r)  r   r   r   r   r   r   ro  r   r   rA   r   r   <module>r     s<         M M M M M M M M 1 1 1 1 1 1 I I I I I I I I 7 7 7 7 7 7 3 3 3 3 3 3 R R R R R R R R R R R R R R  D D D D DY D D D(R4 R4 R4 R4 R4. R4 R4 R4j
"- "- "- "- "-. "- "- "-JvF vF vF vF vF. vF vF vFr	4 	4 	4 	4 	4> 	4 	4 	402 02 02 02 02* 02 02 02f#8 #8 #8 #8 #81 #8 #8 #8L>
 >
 >
 >
 >
#7 >
 >
 >
B	0 	0 	0 	0 	06 	0 	0 	0	/ 	/ 	/ 	/ 	/5 	/ 	/ 	/AB AB AB AB AB2 AB AB ABH44 44 44 44 44, 44 44 44n5 5 5 5 5- 5 5 5:' ' ' ' 'Y ' ' '=4 =4 =4 =4 =4~ =4 =4 =4@*K *K *K *K *K. *K *K *KZW4 W4 W4 W4 W4. W4 W4 W4t04 04 04 04 04N 04 04 04f(K (K (K (K (K~ (K (K (K (K (Kr   