
    Hwg                        d dl mZ d dlmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZ ddlmZmZmZmZmZ d	 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&y0)1    )models)	Operation)
ModelState)field_referencesresolve_relation)normalize_together)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       ]/var/www/horilla/myenv/lib/python3.12/site-packages/django/db/migrations/operations/models.py_check_for_duplicatesr      sC    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   r-   zModelOperation.reduce    s-    w~i3 
t7N7Ny8
 	
r   c                 <    |j                  | j                  |       S r   )r*   r    )r!   r0   r)   s      r   r.   z!ModelOperation.can_reduce_through%   s    --diiCCCr   )
__name__
__module____qualname__r"   r	   r&   r*   r-   r.   __classcell__r1   s   @r   r   r      s,     ! !/

Dr   r   c                   j     e Zd Zd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>6   s     (I'$(I   basesc              3      K   | ]H  }t        |d       r|j                  j                  n!t        |t              r|j                         n| J yw)_metaN)hasattrrG   label_lower
isinstancestrr$   )rA   bases     r   rC   z'CreateModel.__init__.<locals>.<genexpr>9   sO       	 4) 

&& dC( ZZ\	s   AAr<   c              3   &   K   | ]	  \  }}|  y wr   r?   r@   s      r   rC   z'CreateModel.__init__.<locals>.<genexpr>B   s     *MGD!4*MrD   )	r:   r;   r   ModelrE   r<   r,   r"   r   )r!   r    r:   r;   rE   r<   r1   s         r   r"   zCreateModel.__init__.   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;   rE   objectsr<   )
r    r:   r;   rE   r   rN   r<   Managerr1   r5   r!   kwargss     r   deconstructzCreateModel.deconstructD   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;   tuplerE   r<   r!   r)   states      r   state_forwardszCreateModel.state_forwardsQ   sP    		T[[!T\\"djj!T]]#		
r   c                     |j                   j                  || j                        }| j                  |j                  j
                  |      r|j                  |       y y 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]   L    ''	499=##M$<$<$B$BEJ&&u- Kr   c                     |j                   j                  || j                        }| j                  |j                  j
                  |      r|j                  |       y y r   r_   r`   r    ra   rb   rc   delete_modelre   s         r   database_backwardszCreateModel.database_backwardsb   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;   getr    r%   s    r   describezCreateModel.describeg   s.    ((%8Hb@II
 	
r   c                     | j                   S r   r&   r%   s    r   migration_name_fragmentz#CreateModel.migration_name_fragmentm   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&   rE   r   rN   rJ   rL   	ModelBaserK   r   r:   r   )r!   r    r)   r&   reference_model_tuplerL   _namefields           r   r*   zCreateModel.references_modelq   s    ZZ\
( "+J 7JJ 	DFLL(tfkk&;&;S%AB$T959NN	 !KK 	LE5DOO,e5J 		
 r   c                    t        t              r7| j                  j                  k(  r| j                  j	                  dd      sg S t        t
              r\| j                  j                  k(  rCt        j                  | j                  | j                  | j                  | j                        gS t        t              r| j                  j                  k(  ri | j                  j                  }j                  D ]#  }|j                  vs|j                  |d        % t        | j                  | j                  || j                  | j                        gS t        t               r\| j                  j                  k(  rCt        | j                  | j                  | j                  | j                  j                        gS t        t"              rv| j                  j                  k(  r]t        | j                  | j                  i | j                  j$                  j&                  i| j                  | j                        gS t        t(              rl| j                  j                  k(  rSt        | j                  | j                  i | j                  dj*                  i| j                  | j                        gS t        t,              r| j                  j.                  k(  rt        t0              r]t        | j                  | j                  j                  j2                  fgz   | j                  | j                  | j                        gS t        t4              rst        | j                  | j                  D cg c]$  \  }}||j                  k(  rj2                  n|f& c}}| j                  | j                  | j                        gS t        t6              r| j                  j9                         }dD ]A  }|j                  |d       }|st;        t=        t>        fd|D                    }|s=|||<   C |j	                  d      }	|	j                  k(  r|d= t        | j                  | j                  D cg c]&  \  }}|jA                         j                  k7  r||f( c}}|| j                  | j                        gS t        tB              rL| j                  j9                         }dD ];  }|j	                  |      }|s|D 
ch c]  }
tE        fd|
D               c}
||<   = |j	                  d      }	|	jF                  k(  rj                  |d<   t        | j                  | j                  D cg c]$  \  }}|jF                  k(  rj                  n||f& c}}|| j                  | j                        gS t        tH              rI| j                  j.                  k(  r/t        tJ              rqt        | j                  | j                  i | j                  dg | j                  j	                  dg       jL                  i| j                  | j                        gS t        tN              r| j                  j	                  dg       D cg c]  }|j                  j                  k7  r| }}t        | j                  | j                  i | j                  d|i| j                  | j                        gS t        tP              rjR                  r| j                  j	                  d	g       D 
ch c]  }
|
jR                  k7  r|
 }}
|r|| j                  d	<   n| j                  j                  d	d        t        | j                  | j                  i | j                  dg | j                  j	                  dg       tU        jV                  jR                  j                  
      i| j                  | j                        gS tX        |   |      S c c}}w c c}}w c c}
w c c}}w c c}w c c}
w )Nrr   F)r:   r;   rE   r<   order_with_respect_to)unique_togetherindex_togetherc              3   F   K   | ]  }t        fd |D                yw)c              3   B   K   | ]  }|j                   k7  s|  y wr   rw   rA   fr0   s     r   rC   z/CreateModel.reduce.<locals>.<genexpr>.<genexpr>   s#      *&./Q)BVBV=V*&s   N)rY   )rA   r:   r0   s     r   rC   z%CreateModel.reduce.<locals>.<genexpr>   s-      !" )/ %* *&39*& %&!"s   !c              3   X   K   | ]!  }|j                   k(  rj                  n| # y wr   old_namenew_namer   s     r   rC   z%CreateModel.reduce.<locals>.<genexpr>  s2      "$% 789;M;M6M	 2 2ST T"s   '*indexesr   r:   r    ).rJ   DeleteModelr&   r;   rt   RenameModelold_name_lowerr9   r   r:   rE   r<   AlterModelOptionsALTER_OPTION_KEYSpopr    AlterModelManagersAlterTogetherOptionOperationoption_nameoption_valueAlterOrderWithRespectTor   r   model_name_lowerr   r}   r   r   copyr   filterboolr$   r   rY   r   IndexOperationAddIndexindexRemoveIndexRenameIndex
old_fieldsr   Indexr,   r-   )r!   r0   r)   r;   keynvr   optionr   r:   r   options_indexesoptions_index_togetherr1   s    `            r   r-   zCreateModel.reduce   s   y+.9#7#77LL$$We4Iy+.9#;#;; &&;; LL**!]]  y"349#7#77;;):):;G 22 +i///KKT*+ II;;#**!]]  y"459#7#77 II;; LL**&//  y">?9#7#77 II;;,,$00)2H2HI **!]]	  y"9:9#7#77 II;;,,/1P1P **!]]	  y.19#=#==)X.		#{{y~~y.O-PP $"jj!%  Iz2		 )-  $1 1	3F	AN  !%"jj!%	  I{3,,++-#H :K$[[d;F!$" $!" 39	!"
" "39GK0:  )04K(L%(I,@,@@ 78		 )-  $1 wwyI,@,@@ F 
 !("jj!%
  I{3,,++-#H 	K$[[5F +10
 !'	 " ")/" 0,	 )04K(L%(I,>,>>7@7I7IG34		 )-  $1 45	8J8J3JY//PQSTU  !("jj!%	  y.19#=#==)X.		#{{!"ll!% (!%!1!1)R!@( )(! #jj!%  I{3 "&!1!1)R!@#zzY^^3 # #  		#{{!"ll!%! #jj!%	  I{3	8L8L #',,"2"23CR"H*!5!55 *& *
 *5KDLL!12LL$$%5t<		#{{!"ll!% (!%!1!1)R!@( &+4+?+?iFXFX!"(! #jj!% " w~i33O B 0 <#$*s$   )a+a3a$$)a)"a/0a4)NNN)r3   r4   r5   __doc__serialization_expand_argsr"   rT   r\   rj   ro   ru   propertyrx   r*   r-   r6   r7   s   @r   r9   r9   )   sP    ! AO,9

.
.

  .k4 k4r   r9   c                   D    e Zd Zd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    r1   r5   rR   s     r   rT   zDeleteModel.deconstructy  s+    DII
 ++R88r   c                 <    |j                  || j                         y r   )remove_modelr&   rZ   s      r   r\   zDeleteModel.state_forwards  s    9doo6r   c                     |j                   j                  || j                        }| j                  |j                  j
                  |      r|j                  |       y y r   rm   re   s         r   rj   zDeleteModel.database_forwards  rp   r   c                     |j                   j                  || j                        }| j                  |j                  j
                  |      r|j                  |       y y r   r^   re   s         r   ro   zDeleteModel.database_backwards  rk   r   c                      y)NTr?   r(   s      r   r*   zDeleteModel.references_model  s     r   c                      d| j                   z  S )NzDelete model %sr   r%   s    r   ru   zDeleteModel.describe  s     499,,r   c                      d| j                   z  S )Nz	delete_%srw   r%   s    r   rx   z#DeleteModel.migration_name_fragment  s    T__,,r   N)r3   r4   r5   r   rT   r\   rj   ro   r*   ru   r   rx   r?   r   r   r   r   v  s7    97.
.

- - -r   r   c                        e Zd Zd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   r1   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   r1   r5   rR   s     r   rT   zRenameModel.deconstruct  s0    
 ++R88r   c                 R    |j                  || j                  | j                         y r   )rename_modelr   r   rZ   s      r   r\   zRenameModel.state_forwards  s    9dmmT]]Cr   c                 d   |j                   j                  || j                        }| j                  |j                  j
                  |      r|j                   j                  || j                        }|j                  ||j                  j                  |j                  j                         |j                  j                  D ]  }|j                  |k(  r|}|| j                  f}	nL|j                  }|j                  j                  j                  |j                  j                  j                  f}	 |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)r_   r`   r   ra   rb   rc   r   alter_db_tablerG   db_tablerelated_objectsrelated_modelr   r)   
model_name	get_fieldr}   r    alter_fieldziplocal_many_to_manyri   remote_fieldthroughauto_created_alter_many_to_many)r!   r)   rf   rg   rh   	new_model	old_modelrelated_objectri   related_keyto_fieldr:   	old_field	new_fields                 r   rj   zRenameModel.database_forwards  s   MM++It}}E	##M$<$<$B$BIN"11)T]]KI(((((( #,//"A"A !//9<%E#,d.A.A"BK*88E&44::DD&44::EE#K 38==22K@FFPP"((-- ))"((& 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   rj   r!   r)   rf   rg   rh   s        r   ro   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   ru   zRenameModel.describe  s    *.--GGr   c                 :    d| j                   d| j                  S Nrename_rB   )r   r   r%   s    r   rx   z#RenameModel.migration_name_fragment  s    !%!4!4d6I6IJJr   c                     t        |t              r:| j                  |j                  k(  r!t        | j                  |j
                        gS t        t        | #  ||      xs |j                  | j
                  |       S r   )
rJ   r   r   r   r   r   r,   r   r-   r*   r/   s      r   r-   zRenameModel.reduce  s~    y+.##y'?'?? MM&&  ^T1y
 F++DMM9EE	Fr   )r3   r4   r5   r   r"   r	   r   r   rT   r\   rj   ro   r*   ru   r   rx   r-   r6   r7   s   @r   r   r     sw    #
 % % % %9D.`D

H K KF Fr   r   c                        e Zd Z fdZ xZS )ModelOptionOperationc                     t        || j                  t        f      r| j                  |j                  k(  r|gS t        |   ||      S r   )rJ   r1   r   r&   r,   r-   r/   s      r   r-   zModelOptionOperation.reduce  sA    y4>>;"?@9#7#77;w~i33r   )r3   r4   r5   r-   r6   r7   s   @r   r   r     s    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 )	AlterModelTablezRename a model's table.c                 2    || _         t        | 	  |       y r   )tabler,   r"   )r!   r    r   r1   s      r   r"   zAlterModelTable.__init__  s    
r   c                 f    | j                   | j                  d}| j                  j                  g |fS )Nr    r   )r    r   r1   r5   rR   s     r   rT   zAlterModelTable.deconstruct!  s0    IIZZ
 ++R88r   c                 V    |j                  || j                  d| j                  i       y )Nr   )alter_model_optionsr&   r   rZ   s      r   r\   zAlterModelTable.state_forwards(  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   )r_   r`   r    ra   rb   rc   r   rG   r   r   r   r   r   r   )	r!   r)   rf   rg   rh   r   r   r   r   s	            r   rj   z!AlterModelTable.database_forwards+  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   rj   r   s        r   ro   z"AlterModelTable.database_backwards?      %%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   ru   zAlterModelTable.describeB  s6    II**0DJJA
 	
6AA
 	
r   c                      d| j                   z  S )Nzalter_%s_tablerw   r%   s    r   rx   z'AlterModelTable.migration_name_fragmentH  s    $//11r   )r3   r4   r5   r   r"   rT   r\   rj   ro   ru   r   rx   r6   r7   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 )AlterModelTableCommentc                 2    || _         t        | 	  |       y r   )table_commentr,   r"   )r!   r    r   r1   s      r   r"   zAlterModelTableComment.__init__N  s    *r   c                 f    | j                   | j                  d}| j                  j                  g |fS )N)r    r   )r    r   r1   r5   rR   s     r   rT   z"AlterModelTableComment.deconstructR  s2    II!//
 ++R88r   c                 V    |j                  || j                  d| j                  i       y )Ndb_table_comment)r   r&   r   rZ   s      r   r\   z%AlterModelTableComment.state_forwardsY  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   )	r_   r`   r    ra   rb   rc   alter_db_table_commentrG   r   )r!   r)   rf   rg   rh   r   r   s          r   rj   z(AlterModelTableComment.database_forwards^  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   ro   z)AlterModelTableComment.database_backwardsh  r   r   c                 "    d| j                    dS )NAlter z table commentr   r%   s    r   ru   zAlterModelTableComment.describek  s    		{.11r   c                 "    d| j                    dS )Nalter__table_commentrw   r%   s    r   rx   z.AlterModelTableComment.migration_name_fragmentn  s    (77r   )r3   r4   r5   r"   rT   r\   rj   ro   ru   r   rx   r6   r7   s   @r   r   r   M  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   r1   s      r   r"   z%AlterTogetherOptionOperation.__init__v  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   r1   r5   rR   s     r   rT   z(AlterTogetherOptionOperation.deconstruct  s<    DIId//
 ++R88r   c                 j    |j                  || j                  | j                  | j                  i       y r   )r   r&   r   r   rZ   s      r   r\   z+AlterTogetherOptionOperation.state_forwards  s.    !!OOt001	
r   c           
         |j                   j                  || j                        }| j                  |j                  j
                  |      r|j                   j                  || j                        }t        |d| j                  z        } ||t        |j                  | j                  t                     t        |j                  | j                  t                            y y )Nzalter_%s)
r_   r`   r    ra   rb   rc   r  r   rG   r   )r!   r)   rf   rg   rh   r   r   alter_togethers           r   rj   z.AlterTogetherOptionOperation.database_forwards  s    MM++ItyyA	##M$<$<$B$BIN"11)TYYGI$]JAQAQ4QRN	)9)935A	)9)935A Or   c                 *    | j                  ||||      S r   r   r   s        r   ro   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   r?   )rA   r:   r    s     r   rC   z@AlterTogetherOptionOperation.references_field.<locals>.<genexpr>  s     DDFNDs   )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 (rs   z constraint(s)))r   r    lenr   r%   s    r   ru   z%AlterTogetherOptionOperation.describe  s/    II!!'R(
 	
r   c                 :    d| j                   d| j                  S )Nr   rB   )r&   r   r%   s    r   rx   z4AlterTogetherOptionOperation.migration_name_fragment  s     $1A1ABBr   c                 x    t         |   ||      xs( t        |t              xr t	        |      t	        |       uS r   )r,   r.   rJ   r   typer/   s      r   r.   z/AlterTogetherOptionOperation.can_reduce_through  s<    w))Y? 
y">? 2YtDz1	
r   )r3   r4   r5   r   r"   r	   r   rT   r\   rj   ro   r  ru   r   rx   r.   r6   r7   s   @r   r   r   s  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   r1   s      r   r"   zAlterUniqueTogether.__init__  s    /r   r3   r4   r5   r   r   r"   r6   r7   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.
    r   c                 &    t         |   ||       y r   r  )r!   r    r   r1   s      r   r"   zAlterIndexTogether.__init__  s    ~.r   r  r7   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   r1   s      r   r"   z AlterOrderWithRespectTo.__init__  s    %:"r   c                 f    | j                   | j                  d}| j                  j                  g |fS )Nr    r   )r    r   r1   r5   rR   s     r   rT   z#AlterOrderWithRespectTo.deconstruct  s2    II%)%?%?
 ++R88r   c                 j    |j                  || j                  | j                  | j                  i       y r   )r   r&   r   r   rZ   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   )r_   r`   r    ra   rb   rc   rG   r   remove_fieldr   has_defaultdefault	add_field)r!   r)   rf   rg   rh   to_model
from_modelr}   s           r   rj   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   ro   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   ru   z AlterOrderWithRespectTo.describe  s    II&&
 	
r   c                      d| j                   z  S )Nzalter_%s_order_with_respect_torw   r%   s    r   rx   z/AlterOrderWithRespectTo.migration_name_fragment  s    /$//AAr   )r3   r4   r5   r   r   r"   rT   r\   rj   ro   r  ru   r   rx   r6   r7   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;   r1   s      r   r"   zAlterModelOptions.__init__&  s    r   c                 f    | j                   | j                  d}| j                  j                  g |fS )N)r    r;   )r    r;   r1   r5   rR   s     r   rT   zAlterModelOptions.deconstruct*  s0    II||
 ++R88r   c                 h    |j                  || j                  | j                  | j                         y r   )r   r&   r;   r   rZ   s      r   r\   z AlterModelOptions.state_forwards1  s*    !!OOLL""		
r   c                      y r   r?   r   s        r   rj   z#AlterModelOptions.database_forwards9      r   c                      y r   r?   r   s        r   ro   z$AlterModelOptions.database_backwards<  r<  r   c                      d| j                   z  S )NzChange Meta options on %sr   r%   s    r   ru   zAlterModelOptions.describe?  s    *TYY66r   c                      d| j                   z  S )Nzalter_%s_optionsrw   r%   s    r   rx   z)AlterModelOptions.migration_name_fragmentB  s    !DOO33r   )r3   r4   r5   r   r   r"   rT   r\   rj   ro   ru   r   rx   r6   r7   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<   r1   s      r   r"   zAlterModelManagers.__init__L  s     r   c                 `    | j                   j                  | j                  | j                  gi fS r   )r1   r5   r    r<   r%   s    r   rT   zAlterModelManagers.deconstructP  s&    ++dii-GLLr   c                 R    |j                  || j                  | j                         y r   )alter_model_managersr&   r<   rZ   s      r   r\   z!AlterModelManagers.state_forwardsS  s    ""9doot}}Mr   c                      y r   r?   r   s        r   rj   z$AlterModelManagers.database_forwardsV  r<  r   c                      y r   r?   r   s        r   ro   z%AlterModelManagers.database_backwardsY  r<  r   c                      d| j                   z  S )NzChange managers on %sr   r%   s    r   ru   zAlterModelManagers.describe\  s    &22r   c                      d| j                   z  S )Nzalter_%s_managersrw   r%   s    r   rx   z*AlterModelManagers.migration_name_fragment_  s    "T__44r   )r3   r4   r5   r   r   r"   rT   r\   rj   ro   ru   r   rx   r6   r7   s   @r   r   r   G  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_lowerg  s    $$&&r   N)r3   r4   r5   r   r	   r   r?   r   r   r   r   d  s    K' 'r   r   c                   D    e Zd ZdZd Zd Zd Zd Zd Zd Z	e
d        Zy	)
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__o  s3    $zz1389  
r   c                 R    |j                  || j                  | j                         y r   )	add_indexr   r   rZ   s      r   r\   zAddIndex.state_forwardsx  s    	4#8#8$**Er   c                     |j                   j                  || j                        }| j                  |j                  j
                  |      r|j                  || j                         y y r   )r_   r`   r   ra   rb   rc   rN  r   re   s         r   rj   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   )r_   r`   r   ra   rb   rc   remove_indexr   re   s         r   ro   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   r1   r5   rR   s     r   rT   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    joinrK   r   r:   )r!   
expressions     r   ru   zAddIndex.describe  s    ::!!

		TZZ=S=STz3z?TU  " JJOOIIdjj''(OO
 	
 Us   Cc                 h    | j                   d| j                  j                  j                         S NrB   )r   r   r    r$   r%   s    r   rx   z AddIndex.migration_name_fragment  s$    //1F1F1HIIr   Nr3   r4   r5   r   r"   r\   rj   ro   rT   ru   r   rx   r?   r   r   r   r   l  s:    "F7
:
	

 J Jr   r   c                   D    e Zd Zd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   )rQ  r   r    rZ   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   )r_   r`   r   ra   rb   rc   r   r   get_index_by_namer    rQ  )r!   r)   rf   rg   rh   ri   from_model_stater   s           r   rj   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   )r_   r`   r   ra   rb   rc   r   r   rd  r    rN  )r!   r)   rf   rg   rh   ri   to_model_stater   s           r   ro   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 Nr_  )r   r    r1   r5   rR   s     r   rT   zRemoveIndex.deconstruct  s6    //II

 NN''
 	
r   c                 :    d| j                   d| j                  S )NzRemove index z from r    r   r%   s    r   ru   zRemoveIndex.describe  s    ,0IItGGr   c                 V    d| j                   d| j                  j                         S Nremove_rB   r   r    r$   r%   s    r   rx   z#RemoveIndex.migration_name_fragment      !%!6!6		8IJJr   Nr\  r?   r   r   r   r     s;    'H52	
H K Kr   r   c                   x     e Zd Zd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 )r   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   r   )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   r1   r5   rR   s     r   rT   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 )Nr   )r   rN  r   r   r   r   remove_model_optionsr  r   rename_indexr   rZ   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      }	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 )NT)column_namesr   r
   zFound wrong number (z) of indexes for (rU  z).r   r   )r_   r`   r   ra   rb   rc   r   rG   r   column_constraint_namesr  r   r   rX  r   r   r   rd  r   r    r   rx  )r!   r)   rf   rg   rh   ri   r'  r}   columnsmatching_index_name	old_indexre  rg  	new_indexs                 r   rj   zRenameIndex.database_forwards  s   ''	4??C''(@(@(F(FN??#229dooNJFJoo=B
  **5188G  #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?9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   rj   r   s        r   ro   zRenameIndex.database_backwards)  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 rT  r   zRename unnamed index for )r   r   r   r   r%   s    r   ru   zRenameIndex.describe<  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   rX  r   r%   s    r   rx   z#RenameIndex.migration_name_fragmentF  sS    ==%)%8%8$:M:MNN  !!HHT__%
 	
r   c                 0   t        |t              rv| j                  |j                  k(  r]|j                  rQ| j                  |j
                  k(  r8t        | j                  |j                  | j                  | j                        gS t        | )  ||      S )N)r   r   r   )rJ   r   r   r   r   r   r   r   r   r,   r-   r/   s      r   r-   zRenameIndex.reduceP  s    y+.%%)C)CC""##y'?'?? OO&//!]]#	  w~i33r   )NN)r3   r4   r5   r   r"   r	   r   r   rT   r\   rj   ro   ru   r   rx   r-   r6   r7   s   @r   r   r     sm    % % % % %	9$#@JD&
 
 
4 4r   r   c                   D    e Zd ZdZd Zd Zd Zd Zd Zd Z	e
d        Zy	)
AddConstraintconstraintsc                      || _         || _        y r   r   
constraint)r!   r   r  s      r   r"   zAddConstraint.__init__e  s    $$r   c                 R    |j                  || j                  | j                         y r   )add_constraintr   r  rZ   s      r   r\   zAddConstraint.state_forwardsi  s    Y(=(=tOr   c                     |j                   j                  || j                        }| j                  |j                  j
                  |      r|j                  || j                         y y r   )r_   r`   r   ra   rb   rc   r  r  re   s         r   rj   zAddConstraint.database_forwardsl  sR    ''	4??C##M$<$<$B$BEJ((@ Kr   c                     |j                   j                  || j                        }| j                  |j                  j
                  |      r|j                  || j                         y y r   )r_   r`   r   ra   rb   rc   remove_constraintr  re   s         r   ro   z AddConstraint.database_backwardsq  sR    ''	4??C##M$<$<$B$BEJ++E4??C Kr   c                 b    | j                   j                  g | j                  | j                  dfS )Nr  )r1   r3   r   r  r%   s    r   rT   zAddConstraint.deconstructv  s/    NN##"oo"oo
 	
r   c                 N    d| j                   j                  d| j                  S )NzCreate constraint rV  )r  r    r   r%   s    r   ru   zAddConstraint.describe  s     OO  OO
 	
r   c                 h    | j                   d| j                  j                  j                         S r[  )r   r  r    r$   r%   s    r   rx   z%AddConstraint.migration_name_fragment  s&    //1E1E1K1K1MNNr   Nr3   r4   r5   r   r"   r\   rj   ro   rT   ru   r   rx   r?   r   r   r  r  b  s>    K%PA
D


 O Or   r  c                   D    e Zd ZdZd Zd Zd Zd Zd Zd Z	e
d        Zy	)
RemoveConstraintr  c                      || _         || _        y r   r_  r`  s      r   r"   zRemoveConstraint.__init__  ra  r   c                 R    |j                  || j                  | j                         y r   )r  r   r    rZ   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   )r_   r`   r   ra   rb   rc   r   r   get_constraint_by_namer    r  )r!   r)   rf   rg   rh   ri   re  r  s           r   rj   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   )r_   r`   r   ra   rb   rc   r   r   r  r    r  )r!   r)   rf   rg   rh   ri   rg  r  s           r   ro   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 ri  )r1   r3   r   r    r%   s    r   rT   zRemoveConstraint.deconstruct  s/    NN##"oo		
 	
r   c                 :    d| j                   d| j                  S )NzRemove constraint z from model rk  r%   s    r   ru   zRemoveConstraint.describe  s    7;yy$//RRr   c                 V    d| j                   d| j                  j                         S rm  ro  r%   s    r   rx   z(RemoveConstraint.migration_name_fragment  rp  r   Nr  r?   r   r   r  r    s=    KM?<
S K Kr   r  N)'	django.dbr   $django.db.migrations.operations.baser   django.db.migrations.stater   django.db.migrations.utilsr   r   django.db.models.optionsr   django.utils.functionalr	   r:   r   r   r   r   r   r   r   r9   r   r   r   r   r   r   r  r  r   r   r   r   r   r   r   r  r  r?   r   r   <module>r     s0    : 1 I 7 3 R RDY D(J4. J4Z
 -.  -FtF. tFn4> 402* 02f#81 #8L>
#7 >
B	06 	0	/5 	/AB2 ABH44, 44n5- 5:'Y '3J~ 3Jl(K. (KVR4. R4j&ON &OR'K~ 'Kr   