
    `?iM                     F   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	m
Z
 d dl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 d0 d1e%      Z* G d2 d3e%      Z+y4)5    )copy)models)	OperationOperationCategory)
ModelState)field_referencesresolve_relation)normalize_together)replace)cached_property   )AddField
AlterFieldFieldOperationRemoveFieldRenameFieldc                 t    t               }|D ])  }||v rt        d|d| d      |j                  |       + y )NzFound duplicate value z in CreateModel z
 argument.)set
ValueErroradd)arg_nameobjs	used_valsvals       x/home/cursorai/projects/django-cronjob-utils/venv/lib/python3.12/site-packages/django/db/migrations/operations/models.py_check_for_duplicatesr      s>    I)JMxX  	c     c                   @     e Zd Zd Zed        Zd Z fdZd Z xZ	S )ModelOperationc                     || _         y Nname)selfr#   s     r   __init__zModelOperation.__init__   s	    	r   c                 6    | j                   j                         S r!   )r#   lowerr$   s    r   
name_lowerzModelOperation.name_lower   s    yy  r   c                 <    |j                         | j                  k(  S r!   )r'   r)   r$   r#   	app_labels      r   references_modelzModelOperation.references_model    s    zz|t..r   c                 L    t         |   ||      xs | j                  ||      S r!   )superreducecan_reduce_throughr$   	operationr,   	__class__s      r   r0   zModelOperation.reduce#   s-    w~i3 
t7N7Ny8
 	
r   c                 <    |j                  | j                  |       S r!   )r-   r#   )r$   r3   r,   s      r   r1   z!ModelOperation.can_reduce_through(   s    --diiCCCr   )
__name__
__module____qualname__r%   r   r)   r-   r0   r1   __classcell__r4   s   @r   r   r      s,     ! !/

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managersc                 @   || _         |xs i | _        |xs t        j                  f| _        |xs g | _        t        |   |       t        dd | j                   D               t        dd | j                  D               t        dd | j
                  D               y )Nr=   c              3   &   K   | ]	  \  }}|  y wr!    .0r#   _s      r   	<genexpr>z'CreateModel.__init__.<locals>.<genexpr>:   s     (I['$[   basesc              3      K   | ]H  }t        |d       r|j                  j                  n!t        |t              r|j                         n| J yw)_metaN)hasattrrJ   label_lower
isinstancestrr'   )rD   bases     r   rF   z'CreateModel.__init__.<locals>.<genexpr>=   sL       'D tW- JJ**)3D#)>DI 's   AAr?   c              3   &   K   | ]	  \  }}|  y wr!   rB   rC   s      r   rF   z'CreateModel.__init__.<locals>.<genexpr>F   s     *M}GD!4}rG   )	r=   r>   r   ModelrH   r?   r/   r%   r   )r$   r#   r=   r>   rH   r?   r4   s         r   r%   zCreateModel.__init__2   s    }"-v||o
 B 	h(IT[[(IJ !JJ
	
 	j*Mt}}*MNr   c                    | j                   | j                  d}| j                  r| j                  |d<   | j                  r-| j                  t        j
                  fk7  r| j                  |d<   | j                  r3| j                  dt	        j                         fgk7  r| j                  |d<   | j                  j                  g |fS )N)r#   r=   r>   rH   objectsr?   )
r#   r=   r>   rH   r   rQ   r?   Managerr4   r8   r$   kwargss     r   deconstructzCreateModel.deconstructH   s    IIkk
 << $F9::$**7"jjF7O==T]]	6>>;K/L.MM!%F:++R88r   c                     |j                  t        || j                  t        | j                        t        | j                        t        | j                        t        | j                                     y r!   )
	add_modelr   r#   listr=   dictr>   tuplerH   r?   r$   r,   states      r   state_forwardszCreateModel.state_forwardsU   sP    		T[[!T\\"djj!T]]#		
r   c                 h   |j                   j                  || j                        }| j                  |j                  j
                  |      rf|j                  |       |j                  || j                  f   }|j                  j                  d      x}r|j                  |t               |       y y y )Nindex_together)apps	get_modelr#   allow_migrate_model
connectionaliascreate_modelr   r)   r>   getalter_index_togetherr   )r$   r,   schema_editor
from_stateto_statemodelto_model_statera   s           r   database_forwardszCreateModel.database_forwardsa   s    ''	499=##M$<$<$B$BEJ&&u-
 &__Y-GHN!/!7!7!;!;<L!MM~M22E" N Kr   c                     |j                   j                  || j                        }| j                  |j                  j
                  |      r|j                  |       y y r!   rb   rc   r#   rd   re   rf   delete_modelr$   r,   rj   rk   rl   rm   s         r   database_backwardszCreateModel.database_backwardsq   L    )))TYY?##M$<$<$B$BEJ&&u- Kr   c                 b    d| j                   j                  dd      rdndd| j                  S )NzCreate proxyFzproxy  zmodel )r>   rh   r#   r(   s    r   describezCreateModel.describev   s.    ((%8Hb@II
 	
r   c                     | j                   S r!   r)   r(   s    r   migration_name_fragmentz#CreateModel.migration_name_fragment|   s    r   c                 j   |j                         }|| j                  k(  ry||f}| j                  D ]Q  }|t        j                  ust        |t        j                  j                  t        f      sAt        ||      |k(  sQ y | j                  D ]   \  }}t        || j                  f||      s  y y)NTF)r'   r)   rH   r   rQ   rM   rO   	ModelBaserN   r	   r=   r   )r$   r#   r,   r)   reference_model_tuplerO   _namefields           r   r-   zCreateModel.references_model   s    ZZ\
( "+J 7JJDFLL(tfkk&;&;S%AB$T959NN  !KKLE5DOO,e5J 	 (
 r   c           
         t        t              r7| j                  j                  k(  r| j                  j	                  dd      sg S t        t
              r1| j                  j                  k(  rt        | j                        gS t        t              rs| j                  j                  k(  rZi | j                  j                  }j                  D ]#  }|j                  vs|j                  |d        % t        | |      gS t        t              r1| j                  j                  k(  rt        | j                        gS t        t              rA| j                  j                  k(  r(t        | i | j                  dj                  i      gS t        t               rA| j                  j                  k(  r(t        | i | j                  dj"                  i      gS t        t$              rK| j                  j                  k(  r2t        | i | j                  j&                  j(                  i      gS t        t*              rA| j                  j                  k(  r(t        | i | j                  dj,                  i      gS t        t.              ru| j                  j0                  k(  r[t        t2              r2t        | g | j4                  j6                  j8                  f	      gS t        t:              rHt        | | j4                  D cg c]$  \  }}||j6                  k(  rj8                  n|f& c}}	      gS t        t<              r| j                  j?                         }d
D ]A  }|j                  |d       }|stA        tC        tD        fd|D                    }|s=|||<   C |j	                  d      }	|	j                  k(  r|d= t        | | j4                  D cg c]&  \  }}|jG                         j                  k7  r||f( c}}|      gS t        tH              r| j                  j?                         }d
D ];  }|j	                  |      }|s|D 
ch c]  }
tK        fd|
D               c}
||<   = |j	                  d      }	|	jL                  k(  rj                  |d<   t        | | j4                  D cg c]$  \  }}|jL                  k(  rj                  n||f& c}}|      gS t        tN              r%| j                  j0                  k(  rt        tP              rFt        | i | j                  dg | j                  j	                  dg       jR                  i      gS t        tT              r`| j                  j	                  dg       D cg c]  }|j6                  j6                  k7  r| }}t        | i | j                  d|i      gS t        tV              rFt        | i | j                  dg | j                  j	                  dg       jX                  i      gS t        tZ              ro| j                  j	                  dg       D cg c]  }|j6                  j6                  k7  r| c}jX                  gz   }t        | i | j                  d|i      gS t        t\              r`| j                  j	                  dg       D cg c]  }|j6                  j6                  k7  r| }}t        | i | j                  d|i      gS t^        |   |      S c c}}w c c}}w c c}
w c c}}w c c}w c c}w c c}w )Nrw   Fr"   )r>   )r?   db_tabledb_table_commentorder_with_respect_to)r=   )unique_togetherra   c              3   F   K   | ]  }t        fd |D                yw)c              3   B   K   | ]  }|j                   k7  s|  y wr!   r{   rD   fr3   s     r   rF   z/CreateModel.reduce.<locals>.<genexpr>.<genexpr>   s"      *&39aQ)BVBV=V6s   N)r\   )rD   r=   r3   s     r   rF   z%CreateModel.reduce.<locals>.<genexpr>   s/      !" 39 %* *&39*& %& 39s   !)r=   r>   c              3   X   K   | ]!  }|j                   k(  rj                  n| # y wr!   old_namenew_namer   s     r   rF   z%CreateModel.reduce.<locals>.<genexpr>  s2      ")/A 789;M;M6M	 2 2ST T)/s   '*indexesconstraints)1rM   DeleteModelr)   r>   rh   RenameModelold_name_lowerr   r   AlterModelOptionsALTER_OPTION_KEYSpopAlterModelManagersr?   AlterModelTabletableAlterModelTableCommenttable_commentAlterTogetherOptionOperationoption_nameoption_valueAlterOrderWithRespectTor   r   model_name_lowerr   r=   r#   r   r   r   r   r   filterboolr'   r   r\   r   IndexOperationAddIndexindexRemoveIndexAddConstraint
constraintAlterConstraintRemoveConstraintr/   r0   )r$   r3   r,   r>   keynvr   optionr   r=   r   options_indexesr   options_constraintsr4   s    `             r   r0   zCreateModel.reduce   s   y+.9#7#77LL$$We4Iy+.9#;#;;Dy'9'9:;;y"349#7#77;;):):;G 22i///KKT* 3 D'233y"459#7#77D9+=+=>??y/29#7#77 It||IZI  y"899#7#77 ,,*I,C,C  y">?9#7#77 ,,$00)2H2HI  y"9:9#7#77 ,,/1P1P  y.19#=#==)X.PPy~~y.OP  Iz2 )- (31 1	3F	AN(3   I{3,,++-#HK$[[d;F!$" $!" 39	!"
" "39GK0 $I  )04K(L%(I,@,@@ 78 )- (31 wwyI,@,@@ F(3 
 !(
 
 I{3,,++-#HK$[[5F +10
 +1	 " ")/"  +10, $I )04K(L%(I,>,>>7@7I7IG34 )- (31 45	8J8J3JY//PQSTU(3  !(	 	 y.19#=#==)X.!"ll!% (!%!1!1)R!@( )(!	  I{3 "&!1!1)R!@#!@zzY^^3 !@   # !"ll!%!  I}5!"ll!) ,!%!1!1-!D, ) 4 4,!	  I7 '+ll&6&6}b&I'&I
!)..8 &I' ))*	'+# !"ll!)+>!  I'78 '+ll&6&6}b&I'&I
!)..8 &I $ ' !"ll!)+>!  w~i33U < 0 2#8''s*   /)])
+]/]5/)]:"^ "^"^
)NNN)r6   r7   r8   __doc__r   ADDITIONcategoryserialization_expand_argsr%   rW   r_   ro   rt   ry   propertyr|   r-   r0   r9   r:   s   @r   r<   r<   ,   s[    ! ))H AO,9

 .

  .d4 d4r   r<   c                   \    e Zd ZdZej
                  Zd Zd Zd Z	d Z
d Zd Zed        Zy	)
r   zDrop a model's table.c                 P    d| j                   i}| j                  j                  g |fS Nr#   )r#   r4   r8   rU   s     r   rW   zDeleteModel.deconstruct  s+    DII
 ++R88r   c                 <    |j                  || j                         y r!   )remove_modelr)   r]   s      r   r_   zDeleteModel.state_forwards  s    9doo6r   c                     |j                   j                  || j                        }| j                  |j                  j
                  |      r|j                  |       y y r!   rq   rs   s         r   ro   zDeleteModel.database_forwards  ru   r   c                     |j                   j                  || j                        }| j                  |j                  j
                  |      r|j                  |       y y r!   )rb   rc   r#   rd   re   rf   rg   rs   s         r   rt   zDeleteModel.database_backwards  sL    ''	499=##M$<$<$B$BEJ&&u- Kr   c                      y)NTrB   r+   s      r   r-   zDeleteModel.references_model  s     r   c                      d| j                   z  S )NzDelete model %sr"   r(   s    r   ry   zDeleteModel.describe  s     499,,r   c                      d| j                   z  S )Nz	delete_%sr{   r(   s    r   r|   z#DeleteModel.migration_name_fragment  s    T__,,r   N)r6   r7   r8   r   r   REMOVALr   rW   r_   ro   rt   r-   ry   r   r|   rB   r   r   r   r   ~  sB     ((H97.
.

- - -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                 @    || _         || _        t        |   |       y r!   )r   r   r/   r%   )r$   r   r   r4   s      r   r%   zRenameModel.__init__  s      "r   c                 6    | j                   j                         S r!   r   r'   r(   s    r   r   zRenameModel.old_name_lower      }}""$$r   c                 6    | j                   j                         S r!   r   r'   r(   s    r   new_name_lowerzRenameModel.new_name_lower  r   r   c                 f    | j                   | j                  d}| j                  j                  g |fS )Nr   )r   r   r4   r8   rU   s     r   rW   zRenameModel.deconstruct  s0    
 ++R88r   c                 R    |j                  || j                  | j                         y r!   )rename_modelr   r   r]   s      r   r_   zRenameModel.state_forwards  s    9dmmT]]Cr   c                 ~   |j                   j                  || j                        }| j                  |j                  j
                  |      r|j                   j                  || j                        }|j                  ||j                  j                  |j                  j                         |j                  j                  D ]  }|j                  |k(  r|}|| j                  f}	nY|j                  j                  j                  |j                  j                  j                  f}	 |j                   j                  |	 } |j                   j                  |	 j                  j                  |j                   j"                        }
|j%                  ||j                   |
        t'        |j                  j(                  |j                  j(                        }|D ]^  \  }}|j*                  |j                  k(  s*|j,                  j.                  j                  j0                  sJ|j3                  |||d       ` y y )NF)strict)rb   rc   r   rd   re   rf   r   alter_db_tablerJ   r   related_objectsrelated_modelr   r,   
model_name	get_fieldr   r#   alter_fieldziplocal_many_to_manyrm   remote_fieldthroughauto_created_alter_many_to_many)r$   r,   rj   rk   rl   	new_model	old_modelrelated_objectrm   related_keyto_fieldr=   	old_field	new_fields                 r   ro   zRenameModel.database_forwards  s   MM++It}}E	##M$<$<$B$BIN"11)T]]KI(((((( #,//"A"A!//9<%E#,d.A.A"BK '44::DD&44::EE#K 4HMM33[AE28==22K@FFPP"((-- ))"(( #B& 22IOO4V4VF )/$	9 OOy'>'>>$1199??LL11 	 2  )/? Or   c                 D   | j                   | j                  c| _        | _         | j                  | j                  c| _        | _        | j	                  ||||       | j                   | j                  c| _        | _         | j                  | j                  c| _        | _        y r!   )r   r   r   r   ro   r$   r,   rj   rk   rl   s        r   rt   zRenameModel.database_backwards  s     	1T0 (,}}dmm$t}y-XN  	1T0 (,}}dmm$t}r   c                 z    |j                         | j                  k(  xs |j                         | j                  k(  S r!   )r'   r   r   r+   s      r   r-   zRenameModel.references_model  s1    JJLD///V4::<4CVCV3V	
r   c                 :    d| j                   d| j                  S )NzRename model  to r   r(   s    r   ry   zRenameModel.describe  s    *.--GGr   c                 :    d| j                   d| j                  S Nrename_rE   )r   r   r(   s    r   r|   z#RenameModel.migration_name_fragment  s    !%!4!4d6I6IJJr   c                     t        |t              r1| j                  |j                  k(  rt	        | |j
                        gS t        t        | #  ||      xs |j                  | j
                  |       S N)r   )
rM   r   r   r   r   r   r/   r   r0   r-   r2   s      r   r0   zRenameModel.reduce
  sp    y+.##y'?'??D9+=+=>?? ^T1y
 F++DMM9EE	Fr   )r6   r7   r8   r   r   
ALTERATIONr   r%   r   r   r   rW   r_   ro   rt   r-   ry   r   r|   r0   r9   r:   s   @r   r   r     s     ++H#
 % % % %9D.`D

H K K
F 
Fr   r   c                   6     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!   )rM   r4   r   r)   r/   r0   r2   s      r   r0   zModelOptionOperation.reduce  sA    y4>>;"?@9#7#77;w~i33r   )r6   r7   r8   r   r   r   r0   r9   r:   s   @r   r   r     s     ++H4 4r   r   c                   P     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 )	r   zRename a model's table.c                 2    || _         t        | 	  |       y r!   )r   r/   r%   )r$   r#   r   r4   s      r   r%   zAlterModelTable.__init__&  s    
r   c                 f    | j                   | j                  d}| j                  j                  g |fS )Nr#   r   )r#   r   r4   r8   rU   s     r   rW   zAlterModelTable.deconstruct*  s0    IIZZ
 ++R88r   c                 V    |j                  || j                  d| j                  i       y )Nr   )alter_model_optionsr)   r   r]   s      r   r_   zAlterModelTable.state_forwards1  s!    !!)T__z4::>VWr   c                    |j                   j                  || j                        }| j                  |j                  j
                  |      r@|j                   j                  || j                        }|j                  ||j                  j                  |j                  j                         t        |j                  j                  |j                  j                        D ]  \  }}|j                  j                  j                  j                  s1|j                  |j                  j                  |j                  j                  j                  j                  |j                  j                  j                  j                          y y r!   )rb   rc   r#   rd   re   rf   r   rJ   r   r   r   r   r   r   )	r$   r,   rj   rk   rl   r   r   r   r   s	            r   ro   z!AlterModelTable.database_forwards4  s"   MM++ItyyA	##M$<$<$B$BIN"11)TYYGI(((((( ),22IOO4V4V)$	9 ))1177DD!00!..66!..66<<EE!..66<<EE	) Or   c                 *    | j                  ||||      S r!   ro   r   s        r   rt   z"AlterModelTable.database_backwardsH      %%i
HUUr   c                 Z    d| j                   d| j                  | j                  S dS )NzRename table for r   z	(default)r   r(   s    r   ry   zAlterModelTable.describeK  s6    II**0DJJA
 	
6AA
 	
r   c                      d| j                   z  S )Nzalter_%s_tabler{   r(   s    r   r|   z'AlterModelTable.migration_name_fragmentQ  s    $//11r   )r6   r7   r8   r   r%   rW   r_   ro   rt   ry   r   r|   r9   r:   s   @r   r   r   #  s:    !9X(V
 2 2r   r   c                   L     e Zd Z fdZd Zd Zd Zd Zd Ze	d        Z
 xZS )r   c                 2    || _         t        | 	  |       y r!   )r   r/   r%   )r$   r#   r   r4   s      r   r%   zAlterModelTableComment.__init__W  s    *r   c                 f    | j                   | j                  d}| j                  j                  g |fS )N)r#   r   )r#   r   r4   r8   rU   s     r   rW   z"AlterModelTableComment.deconstruct[  s2    II!//
 ++R88r   c                 V    |j                  || j                  d| j                  i       y )Nr   )r   r)   r   r]   s      r   r_   z%AlterModelTableComment.state_forwardsb  s'    !!t);T=O=O(P	
r   c                 `   |j                   j                  || j                        }| j                  |j                  j
                  |      rb|j                   j                  || j                        }|j                  ||j                  j                  |j                  j                         y y r!   )	rb   rc   r#   rd   re   rf   alter_db_table_commentrJ   r   )r$   r,   rj   rk   rl   r   r   s          r   ro   z(AlterModelTableComment.database_forwardsg  s    MM++ItyyA	##M$<$<$B$BIN"11)TYYGI000000 Or   c                 *    | j                  ||||      S r!   r   r   s        r   rt   z)AlterModelTableComment.database_backwardsq  r   r   c                 "    d| j                    dS )NAlter z table commentr"   r(   s    r   ry   zAlterModelTableComment.describet  s    		{.11r   c                 "    d| j                    dS )Nalter__table_commentr{   r(   s    r   r|   z.AlterModelTableComment.migration_name_fragmentw  s    (77r   )r6   r7   r8   r%   rW   r_   ro   rt   ry   r   r|   r9   r:   s   @r   r   r   V  s6    9

V2 8 8r   r   c                   p     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        |   |       y r!   )r   r
   setattrr   r/   r%   )r$   r#   r   r4   s      r   r%   z%AlterTogetherOptionOperation.__init__  s5    1,?@Ld&&5r   c                 .    t        | | j                        S r!   )getattrr   r(   s    r   r   z)AlterTogetherOptionOperation.option_value  s    tT--..r   c                 |    d| j                   | j                  | j                  i}| j                  j                  g |fS r   )r#   r   r   r4   r8   rU   s     r   rW   z(AlterTogetherOptionOperation.deconstruct  s<    DIId//
 ++R88r   c                 j    |j                  || j                  | j                  | j                  i       y r!   )r   r)   r   r   r]   s      r   r_   z+AlterTogetherOptionOperation.state_forwards  s.    !!OOt001	
r   c                    |j                   j                  || j                        }| j                  |j                  j
                  |      r|j                  || j                  f   }|j                  || j                  f   }t        |d| j                  z        } |||j                  j                  | j                        xs
 t               |j                  j                  | j                        xs
 t                      y y )Nzalter_%s)rb   rc   r#   rd   re   rf   r   r)   r  r   r>   rh   r   )	r$   r,   rj   rk   rl   r   from_model_statern   alter_togethers	            r   ro   z.AlterTogetherOptionOperation.database_forwards  s    MM++ItyyA	##M$<$<$B$BIN)00DOO1KL%__Y-GHN$]JAQAQ4QRN ((,,T-=-=>G#%&&**4+;+;<E	 Or   c                 *    | j                  ||||      S r!   r   r   s        r   rt   z/AlterTogetherOptionOperation.database_backwards  r   r   c                     | j                  ||      xr- | j                   xs t        fd| j                  D              S )Nc              3   &   K   | ]  }|v  
 y wr!   rB   )rD   r=   r#   s     r   rF   z@AlterTogetherOptionOperation.references_field.<locals>.<genexpr>  s     D2CDFN2Cs   )r-   r   anyr$   r   r#   r,   s     ` r   references_fieldz-AlterTogetherOptionOperation.references_field  sC    $$Z; 
!!! ED$2C2CDD	
r   c           	      p    d| j                   d| j                  dt        | j                  xs d      dS )Nr  z for z (rx   z constraint(s)))r   r#   lenr   r(   s    r   ry   z%AlterTogetherOptionOperation.describe  s/    II!!'R(
 	
r   c                 :    d| j                   d| j                  S Nr  rE   )r)   r   r(   s    r   r|   z4AlterTogetherOptionOperation.migration_name_fragment  s     $1A1ABBr   c                 x    t         |   ||      xs( t        |t              xr t	        |      t	        |       uS r!   )r/   r1   rM   r   typer2   s      r   r1   z/AlterTogetherOptionOperation.can_reduce_through  s<    w))Y? 
y">? 2YtDz1	
r   )r6   r7   r8   r   r%   r   r   rW   r_   ro   rt   r  ry   r   r|   r1   r9   r:   s   @r   r   r   |  s`    K / /9

V

 C 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                 &    t         |   ||       y r!   r/   r%   )r$   r#   r   r4   s      r   r%   zAlterUniqueTogether.__init__  s    /r   r6   r7   r8   r   r   r%   r9   r:   s   @r   r  r    s    
 $K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.
    ra   c                 &    t         |   ||       y r!   r   )r$   r#   ra   r4   s      r   r%   zAlterIndexTogether.__init__  s    ~.r   r!  r:   s   @r   r#  r#    s    
 #K/ /r   r#  c                   Z     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                 2    || _         t        | 	  |       y r!   )r   r/   r%   )r$   r#   r   r4   s      r   r%   z AlterOrderWithRespectTo.__init__  s    %:"r   c                 f    | j                   | j                  d}| j                  j                  g |fS )Nr#   r   )r#   r   r4   r8   rU   s     r   rW   z#AlterOrderWithRespectTo.deconstruct  s2    II%)%?%?
 ++R88r   c                 j    |j                  || j                  | j                  | j                  i       y r!   )r   r)   r   r   r]   s      r   r_   z&AlterOrderWithRespectTo.state_forwards  s.    !!OOt99:	
r   c                 ~   |j                   j                  || j                        }| j                  |j                  j
                  |      r|j                   j                  || j                        }|j                  j                  rB|j                  j                  s,|j                  ||j                  j                  d             y |j                  j                  r\|j                  j                  sE|j                  j                  d      }|j                         sd|_        |j                  ||       y y y y )N_orderr   )rb   rc   r#   rd   re   rf   rJ   r   remove_fieldr   has_defaultdefault	add_field)r$   r,   rj   rk   rl   to_model
from_modelr   s           r   ro   z)AlterOrderWithRespectTo.database_forwards  s    ==**9dii@##M$<$<$B$BHM#229diiHJ   66 <<**
 0 0 : :8 D 44"((>> 00:((*$%EM'' ? 5 Nr   c                 ,    | j                  ||||       y r!   r   r   s        r   rt   z*AlterOrderWithRespectTo.database_backwards  s    y-XNr   c                 h    | j                  ||      xr | j                  d u xs || j                  k(  S r!   )r-   r   r  s       r   r  z(AlterOrderWithRespectTo.references_field
  s:    $$Z; 
&&$.T$$:T:T2T	
r   c                 :    d| j                   d| j                  S )NzSet order_with_respect_to on r   r(  r(   s    r   ry   z AlterOrderWithRespectTo.describe  s    II&&
 	
r   c                      d| j                   z  S )Nzalter_%s_order_with_respect_tor{   r(   s    r   r|   z/AlterOrderWithRespectTo.migration_name_fragment  s    /$//AAr   )r6   r7   r8   r   r   r%   rW   r_   ro   rt   r  ry   r   r|   r9   r:   s   @r   r   r     sE    C)K9
4O


 B Br   r   c                   X     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                 2    || _         t        | 	  |       y r!   )r>   r/   r%   )r$   r#   r>   r4   s      r   r%   zAlterModelOptions.__init__0  s    r   c                 f    | j                   | j                  d}| j                  j                  g |fS )N)r#   r>   )r#   r>   r4   r8   rU   s     r   rW   zAlterModelOptions.deconstruct4  s0    II||
 ++R88r   c                 h    |j                  || j                  | j                  | j                         y r!   )r   r)   r>   r   r]   s      r   r_   z AlterModelOptions.state_forwards;  s*    !!OOLL""		
r   c                      y r!   rB   r   s        r   ro   z#AlterModelOptions.database_forwardsC      r   c                      y r!   rB   r   s        r   rt   z$AlterModelOptions.database_backwardsF  rF  r   c                      d| j                   z  S )NzChange Meta options on %sr"   r(   s    r   ry   zAlterModelOptions.describeI  s    *TYY66r   c                      d| j                   z  S )Nzalter_%s_optionsr{   r(   s    r   r|   z)AlterModelOptions.migration_name_fragmentL  s    !DOO33r   )r6   r7   r8   r   r   r%   rW   r_   ro   rt   ry   r   r|   r9   r:   s   @r   r   r     sB    9
7 4 4r   r   c                   V     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                 2    || _         t        | 	  |       y r!   )r?   r/   r%   )r$   r#   r?   r4   s      r   r%   zAlterModelManagers.__init__V  s     r   c                 `    | j                   j                  | j                  | j                  gi fS r!   )r4   r8   r#   r?   r(   s    r   rW   zAlterModelManagers.deconstructZ  s&    ++dii-GLLr   c                 R    |j                  || j                  | j                         y r!   )alter_model_managersr)   r?   r]   s      r   r_   z!AlterModelManagers.state_forwards]  s    ""9doot}}Mr   c                      y r!   rB   r   s        r   ro   z$AlterModelManagers.database_forwards`  rF  r   c                      y r!   rB   r   s        r   rt   z%AlterModelManagers.database_backwardsc  rF  r   c                      d| j                   z  S )NzChange managers on %sr"   r(   s    r   ry   zAlterModelManagers.describef  s    &22r   c                      d| j                   z  S )Nzalter_%s_managersr{   r(   s    r   r|   z*AlterModelManagers.migration_name_fragmenti  s    "T__44r   )r6   r7   r8   r   r   r%   rW   r_   ro   rt   ry   r   r|   r9   r:   s   @r   r   r   Q  sB    %!+MN3 5 5r   r   c                        e Zd ZdZed        Zy)r   r   c                 6    | j                   j                         S r!   )r   r'   r(   s    r   r   zIndexOperation.model_name_lowerq  s    $$&&r   N)r6   r7   r8   r   r   r   rB   r   r   r   r   n  s    K' 'r   r   c                   n     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        || _        y )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__{  s3    $zz1389  
r   c                 R    |j                  || j                  | j                         y r!   )	add_indexr   r   r]   s      r   r_   zAddIndex.state_forwards  s    	4#8#8$**Er   c                     |j                   j                  || j                        }| j                  |j                  j
                  |      r|j                  || j                         y y r!   )rb   rc   r   rd   re   rf   rX  r   rs   s         r   ro   zAddIndex.database_forwards  sR    ''	4??C##M$<$<$B$BEJ##E4::6 Kr   c                     |j                   j                  || j                        }| j                  |j                  j
                  |      r|j                  || j                         y y r!   )rb   rc   r   rd   re   rf   remove_indexr   rs   s         r   rt   zAddIndex.database_backwards  sR    )))T__E##M$<$<$B$BEJ&&udjj9 Kr   c                 f    | j                   | j                  d}| j                  j                  g |fS )N)r   r   )r   r   r4   r8   rU   s     r   rW   zAddIndex.deconstruct  s6    //ZZ

 NN''
 	
r   c                    | j                   j                  rcd| j                   j                  ddj                  | j                   j                  D cg c]  }t	        |       c}      d| j
                  S d| j                   j                  ddj                  | j                   j                        d| j
                  S c c}w )NzCreate index  on , 
 on model z on field(s) z
 of model )r   expressionsr#   joinrN   r   r=   )r$   
expressions     r   ry   zAddIndex.describe  s    ::!!

		TZZ=S=ST=Sz3z?=STU  " JJOOIIdjj''(OO
 	
 Us   Cc                 h    | j                   d| j                  j                  j                         S NrE   )r   r   r#   r'   r(   s    r   r|   z AddIndex.migration_name_fragment  s$    //1F1F1HIIr   c                 \   t        |t              r%| j                  j                  |j                  k(  rg S t        |t              rW| j                  j                  |j
                  k(  r4t        | j                        }|j                  |_        t        | |      gS t        | )  ||      S )N)r   )rM   r   r   r#   RenameIndexr   r   r   r   r/   r0   )r$   r3   r,   r   r4   s       r   r0   zAddIndex.reduce  s    i-$**//Y^^2SIi-$**//YEWEW2W$E"++EJD.//w~i33r   )r6   r7   r8   r   r   r   r   r%   r_   ro   rt   rW   ry   r   r|   r0   r9   r:   s   @r   r   r   v  sP    " ))HF7
:
	

 J J4 4r   r   c                   \    e Zd ZdZej
                  Zd Zd Zd Z	d Z
d Zd Zed        Zy	)
r   zRemove an index from a model.c                      || _         || _        y r!   r   r#   r$   r   r#   s      r   r%   zRemoveIndex.__init__      $	r   c                 R    |j                  || j                  | j                         y r!   )r[  r   r#   r]   s      r   r_   zRemoveIndex.state_forwards  s    9d&;&;TYYGr   c                 .   |j                   j                  || j                        }| j                  |j                  j
                  |      rI|j                  || j                  f   }|j                  | j                        }|j                  ||       y y r!   )rb   rc   r   rd   re   rf   r   r   get_index_by_namer#   r[  )r$   r,   rj   rk   rl   rm   r  r   s           r   ro   zRemoveIndex.database_forwards  s~    )))T__E##M$<$<$B$BEJ)00D<Q<Q1QR$66tyyAE&&ue4 Kr   c                 .   |j                   j                  || j                        }| j                  |j                  j
                  |      rI|j                  || j                  f   }|j                  | j                        }|j                  ||       y y r!   )rb   rc   r   rd   re   rf   r   r   ro  r#   rX  )r$   r,   rj   rk   rl   rm   rn   r   s           r   rt   zRemoveIndex.database_backwards  s{    ''	4??C##M$<$<$B$BEJ%__Y8M8M-MNN"44TYY?E##E51 Kr   c                 f    | j                   | j                  d}| j                  j                  g |fS Nrj  )r   r#   r4   r8   rU   s     r   rW   zRemoveIndex.deconstruct  s6    //II

 NN''
 	
r   c                 :    d| j                   d| j                  S )NzRemove index z from r#   r   r(   s    r   ry   zRemoveIndex.describe  s    ,0IItGGr   c                 V    d| j                   d| j                  j                         S Nremove_rE   r   r#   r'   r(   s    r   r|   z#RemoveIndex.migration_name_fragment      !%!6!6		8IJJr   N)r6   r7   r8   r   r   r   r   r%   r_   ro   rt   rW   ry   r   r|   rB   r   r   r   r     sF    ' ((HH52	
H 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 )rg  zRename an index.c                 x    |s|st        d      |r|rt        d      || _        || _        || _        || _        y )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__  sN    
  
M  %  $r   c                 6    | j                   j                         S r!   r   r(   s    r   r   zRenameIndex.old_name_lower  r   r   c                 6    | j                   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|  r4   r8   rU   s     r   rW   zRenameIndex.deconstruct   sZ    //
 ==!%F:??#'??F< ++R88r   c                 z   | j                   r}|j                  || j                  t        j                  | j                   | j
                               |j                  || j                  t        j                  | j                          y |j                  || j                  | j                  | j
                         y )Nr=   r#   )r|  rX  r   r   Indexr   remove_model_optionsr#  r   rename_indexr   r]   s      r   r_   zRenameIndex.state_forwards  s    ??OO%%DOO$--H
 &&%%"..	 400$--r   c           
         |j                   j                  || j                        }| j                  |j                  j
                  |      sy | j                  r|j                   j                  || j                        }| j                  D cg c]'  }|j                  j                  |      j                  ) }}|j                  ||dd      }	t        |	      dk7  rAt        dt        |	      d|j                  j                  ddj                  |      d	      t        j                   | j                  |	d
         }
n6|j                  || j"                  f   }|j%                  | j&                        }
|
j(                  | j*                  k(  ry |j                  || j"                  f   }|j%                  | j*                        }|j-                  ||
|       y c c}w )NTF)column_namesr   uniquer   zFound wrong number (z) of indexes for (r_  z).r   r  )rb   rc   r   rd   re   rf   r|  rJ   r   column_constraint_namesr  r   r   rb  r   r  r   ro  r   r#   r   r  )r$   r,   rj   rk   rl   rm   r1  r   columnsmatching_index_name	old_indexr  rn   	new_indexs                 r   ro   zRenameIndex.database_forwards  s   ''	4??C''(@(@(F(FN??#229dooNJFJooFUU
  **5188o   #0"A"A$	 #B # &'1,  /0"((11		'*	  (+I
  *00D<Q<Q1QR(::4==II>>T]]*!D4I4I)IJ"44T]]C	""5)Y??s   ,Gc                 ^   | j                   ry | j                  | j                  c| _        | _        | j                  | j                  c| _        | _        | j                  ||||       | j                  | j                  c| _        | _        | j                  | j                  c| _        | _        y r!   )r|  r   r   r   r   ro   r   s        r   rt   zRenameIndex.database_backwardsE  s    ??  	1T0 (,}}dmm$t}y-XN  	1T0 (,}}dmm$t}r   c                     | j                   r)d| j                    d| j                   d| j                   S d| j                   d| j                   d| j                   S )NzRename index r^  r   zRename unnamed index for )r   r   r   r|  r(   s    r   ry   zRenameIndex.describeX  s_    ==d4??2C4W ('8T__<MT}}o	
r   c                     | j                   rd| j                  d| j                  S d| j                  ddj	                  | j
                        d| j                  S r   )r   r   r   r   rb  r|  r(   s    r   r|   z#RenameIndex.migration_name_fragmentb  sS    ==%)%8%8$:M:MNN  !!HHT__%
 	
r   c                     t        |t              rV| j                  |j                  k(  r=|j                  r1| j                  |j
                  k(  rt        | |j                        gS t        | %  ||      S r   )
rM   rg  r   r   r   r   r   r   r/   r0   r2   s      r   r0   zRenameIndex.reducel  se    y+.%%)C)CC""##y'?'??D9+=+=>??w~i33r   )NN)r6   r7   r8   r   r   r   r   r%   r   r   r   rW   r_   ro   rt   ry   r   r|   r0   r9   r:   s   @r   rg  rg    sx     ++H% % % % %	9$&@PD&
 
 
4 4r   rg  c                   n     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                      || _         || _        y r!   r   r   )r$   r   r   s      r   r%   zAddConstraint.__init__{  s    $$r   c                 R    |j                  || j                  | j                         y r!   )add_constraintr   r   r]   s      r   r_   zAddConstraint.state_forwards  s    Y(=(=tOr   c                     |j                   j                  || j                        }| j                  |j                  j
                  |      r|j                  || j                         y y r!   )rb   rc   r   rd   re   rf   r  r   rs   s         r   ro   zAddConstraint.database_forwards  sR    ''	4??C##M$<$<$B$BEJ((@ Kr   c                     |j                   j                  || j                        }| j                  |j                  j
                  |      r|j                  || j                         y y r!   )rb   rc   r   rd   re   rf   remove_constraintr   rs   s         r   rt   z AddConstraint.database_backwards  sR    ''	4??C##M$<$<$B$BEJ++E4??C Kr   c                 b    | j                   j                  g | j                  | j                  dfS )Nr  )r4   r6   r   r   r(   s    r   rW   zAddConstraint.deconstruct  s/    NN##"oo"oo
 	
r   c                 N    d| j                   j                  d| j                  S )NzCreate constraint r`  )r   r#   r   r(   s    r   ry   zAddConstraint.describe  s     OO  OO
 	
r   c                 h    | j                   d| j                  j                  j                         S re  r   r   r#   r'   r(   s    r   r|   z%AddConstraint.migration_name_fragment  s&    //1E1E1K1K1MNNr   c                    t        |t              r>| j                  |j                  k(  r%| j                  j                  |j                  k(  rg S t        |t
              rT| j                  |j                  k(  r;| j                  j                  |j                  k(  rt        | |j                        gS t        | !  ||      S )N)r   )	rM   r   r   r   r#   r   r   r/   r0   r2   s      r   r0   zAddConstraint.reduce  s    y"23%%)C)CC$$	6Iy/2%%)C)CC$$	6DY-A-ABCCw~i33r   )r6   r7   r8   r   r   r   r   r%   r_   ro   rt   rW   ry   r   r|   r0   r9   r:   s   @r   r   r   w  sT     ))HK%PA
D


 O O4 4r   r   c                   \    e Zd Zej                  ZdZd Zd Zd Z	d Z
d Zd Zed        Zy	)
r   r   c                      || _         || _        y r!   rj  rk  s      r   r%   zRemoveConstraint.__init__  rl  r   c                 R    |j                  || j                  | j                         y r!   )r  r   r#   r]   s      r   r_   zRemoveConstraint.state_forwards  s    	4+@+@$))Lr   c                 .   |j                   j                  || j                        }| j                  |j                  j
                  |      rI|j                  || j                  f   }|j                  | j                        }|j                  ||       y y r!   )rb   rc   r   rd   re   rf   r   r   get_constraint_by_namer#   r  )r$   r,   rj   rk   rl   rm   r  r   s           r   ro   z"RemoveConstraint.database_forwards  s~    ''	4??C##M$<$<$B$BEJ)00D<Q<Q1QR)@@KJ++E:> Kr   c                 .   |j                   j                  || j                        }| j                  |j                  j
                  |      rI|j                  || j                  f   }|j                  | j                        }|j                  ||       y y r!   )rb   rc   r   rd   re   rf   r   r   r  r#   r  )r$   r,   rj   rk   rl   rm   rn   r   s           r   rt   z#RemoveConstraint.database_backwards  s{    ''	4??C##M$<$<$B$BEJ%__Y8M8M-MNN'>>tyyIJ((
; Kr   c                 b    | j                   j                  g | j                  | j                  dfS rr  )r4   r6   r   r#   r(   s    r   rW   zRemoveConstraint.deconstruct  s/    NN##"oo		
 	
r   c                 :    d| j                   d| j                  S )NzRemove constraint z from model rt  r(   s    r   ry   zRemoveConstraint.describe  s    7;yy$//RRr   c                 V    d| j                   d| j                  j                         S rv  rx  r(   s    r   r|   z(RemoveConstraint.migration_name_fragment  ry  r   N)r6   r7   r8   r   r   r   r   r%   r_   ro   rt   rW   ry   r   r|   rB   r   r   r   r     sH     ((HKM?<
S K Kr   r   c                   n     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                 .    || _         || _        || _        y r!   r   r#   r   )r$   r   r#   r   s       r   r%   zAlterConstraint.__init__  s    $	$r   c                 h    |j                  || j                  | j                  | j                         y r!   )alter_constraintr   r#   r   r]   s      r   r_   zAlterConstraint.state_forwards  s'    t,,dii	
r   c                      y r!   rB   r   s        r   ro   z!AlterConstraint.database_forwards  rF  r   c                      y r!   rB   r   s        r   rt   z"AlterConstraint.database_backwards  rF  r   c                 x    | j                   j                  g | j                  | j                  | j                  dfS )Nr  )r4   r6   r   r#   r   r(   s    r   rW   zAlterConstraint.deconstruct  s6    NN##"oo		"oo
 	
r   c                 :    d| j                    d| j                   S )NzAlter constraint r^  rt  r(   s    r   ry   zAlterConstraint.describe  s    "499+T$//1BCCr   c                 j    d| j                   d| j                  j                  j                         S r  r  r(   s    r   r|   z'AlterConstraint.migration_name_fragment  s&     $ 5 5t7K7K7Q7Q7STTr   c                     t        |t        t        f      r5| j                  |j                  k(  r| j                  |j                  k(  r|gS t
        |   ||      S r!   )rM   r   r   r   r#   r/   r0   r2   s      r   r0   zAlterConstraint.reduce  sP    y?4D"EF%%)C)CC		Y^^+;w~i33r   )r6   r7   r8   r   r   r   r   r%   r_   ro   rt   rW   ry   r   r|   r0   r9   r:   s   @r   r   r     sR     ++HK%


	
D U U4 4r   r   N),r   	django.dbr   $django.db.migrations.operations.baser   r   django.db.migrations.stater   django.db.migrations.utilsr   r	   django.db.models.optionsr
   django.utils.copyr   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   rg  r   r   r   rB   r   r   <module>r     s?     M 1 I 7 % 3 R RDY D(O4. O4d
"-. "-JqF. qFh	4> 	402* 02f#81 #8L?
#7 ?
D	06 	0	/5 	/AB2 ABH44, 44n5- 5:'Y '>4~ >4B*K. *KZP4. P4f64N 64r(K~ (KV-4n -4r   