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

D D D D D D Dr   r   c                   p     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managersNc                 ^   || _         |pi | _        |pt          j        f| _        |pg | _        t                                          |           t          dd | j         D                        t          dd | j        D                        t          dd | j        D                        d S )Nr;   c              3       K   | ]	\  }}|V  
d S r    .0r    _s      r   	<genexpr>z'CreateModel.__init__.<locals>.<genexpr>6   s&      (I(I'$(I(I(I(I(I(Ir   basesc              3      K   | ]K}t          |d           r|j        j        n*t          |t                    r|                                n|V  LdS )_metaN)hasattrrG   label_lower
isinstancestrr$   )rB   bases     r   rD   z'CreateModel.__init__.<locals>.<genexpr>9   st         	 4))
&& dC((TZZ\\\     r   r=   c              3       K   | ]	\  }}|V  
d S r   r@   rA   s      r   rD   z'CreateModel.__init__.<locals>.<genexpr>B   s&      *M*MGD!4*M*M*M*M*M*Mr   )	r;   r<   r   ModelrE   r=   r-   r"   r   )r!   r    r;   r<   rE   r=   r2   s         r   r"   zCreateModel.__init__.   s    }"-v|o
 B 	h(I(IT[(I(I(IJJJ  !J  
	
 
	
 
	
 	j*M*Mt}*M*M*MNNNNNr   c                    | j         | j        d}| j        r
| j        |d<   | j        r | j        t          j        fk    r
| j        |d<   | j        r)| j        dt	          j                    fgk    r
| j        |d<   | j        j	        g |fS )N)r    r;   r<   rE   objectsr=   )
r    r;   r<   rE   r   rN   r=   Managerr2   r6   r!   kwargss     r   deconstructzCreateModel.deconstructD   s    Ik
 
 < 	- $F9: 	)$*77"jF7O= 	/T]	6>;K;K/L.MMM!%F:+R88r   c                     |                     t          || j        t          | j                  t          | j                  t          | j                  t          | j	                                       d S r   )
	add_modelr   r    listr;   dictr<   tuplerE   r=   r!   r*   states      r   state_forwardszCreateModel.state_forwardsQ   sk    	T[!!T\""dj!!T]## 		
 		
 		
 		
 		
r   c                     |j                             || j                  }|                     |j        j        |          r|                    |           d S d S r   apps	get_modelr    allow_migrate_model
connectionaliascreate_modelr!   r*   schema_editor
from_stateto_statemodels         r   database_forwardszCreateModel.database_forwards]   ]    ''	49==##M$<$BEJJ 	.&&u-----	. 	.r   c                     |j                             || j                  }|                     |j        j        |          r|                    |           d S d S r   r_   r`   r    ra   rb   rc   delete_modelre   s         r   database_backwardszCreateModel.database_backwardsb   ]    )))TY??##M$<$BEJJ 	.&&u-----	. 	.r   c                 V    d| j                             dd          rdndd| j        S )NzCreate proxyFzproxy  zmodel )r<   getr    r%   s    r   describezCreateModel.describeg   s9     ((%88@HHb@@II
 	
r   c                     | j         S r   r&   r%   s    r   migration_name_fragmentz#CreateModel.migration_name_fragmentm   s
    r   c                 J   |                                 }|| j        k    rdS ||f}| j        D ]M}|t          j        ur=t          |t          j        j        t          f          rt          ||          |k    r dS N| j
        D ] \  }}t          || j        f||          r dS !dS )NTF)r$   r&   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\\
((4 "+J 7J 	 	DFL((tfk&;S%ABB )$T9559NNNtt !K 	 	LE5DO,e5J   tt ur   c                 `	   t          t                    r-| j        j        k    r| j                            dd          sg S t          t
                    r>| j        j        k    r.t          j        | j	        | j        | j
        | j                  gS t          t                    rr| j        j        k    rbi | j        j        }j        D ]!}|j        vr|                    |d            "t          | j        | j	        || j
        | j                  gS t          t                     r>| j        j        k    r.t          | j        | j	        | j        | j
        j                  gS t          t"                    rN| j        j        k    r>t          | j        | j	        i | j        j        j        i| j
        | j                  gS t          t(                    rI| j        j        k    r9t          | j        | j	        i | j        dj        i| j
        | j                  gS t          t,                    rE| j        j        k    r4t          t0                    r>t          | j        | j	        j        j        fgz   | j        | j
        | j                  gS t          t4                    r:t          | j        fd| j	        D             | j        | j
        | j                  gS t          t6                    r| j                                        }dD ]O}|                    |d           }|r5t;          t=          t>          fd|D                                 }|r|||<   P|                    d          }|j        k    r|d= t          | j        fd| j	        D             || j
        | j                  gS t          t@                    r| j                                        }dD ]*}|                    |          }|rfd	|D             ||<   +|                    d          }|j!        k    r
j        |d<   t          | j        fd
| j	        D             || j
        | j                  gS tE                      #                    |          S )Nrr   F)r;   r<   rE   r=   order_with_respect_toc                 B    g | ]\  }}||j         k    rj        n|fS r@   )r    r}   rB   nvr1   s      r   
<listcomp>z&CreateModel.reduce.<locals>.<listcomp>   sD           $1 1	3F3F	AN     r   )unique_togetherindex_togetherc              3   N   K   | ]}t          fd |D                       V   dS )c              3   2   K   | ]}|j         k    |V  d S r   rw   rB   fr1   s     r   rD   z/CreateModel.reduce.<locals>.<genexpr>.<genexpr>   s9       *& *&./Q)BV=V=V=V=V=V=V*& *&r   NrY   rB   r;   r1   s     r   rD   z%CreateModel.reduce.<locals>.<genexpr>   si       !" !" )/ %* *& *& *& *&39*& *& *& %& %&!" !" !" !" !" !"r   c                 X    g | ]&\  }}|                                 j        k    "||f'S r@   r(   r   s      r   r   z&CreateModel.reduce.<locals>.<listcomp>  sA           $1 wwyyI,@@@ F@@@r   c                 F    h | ]}t          fd |D                       S )c              3   @   K   | ]}|j         k    rj        n|V  d S r   old_namenew_namer   s     r   rD   z/CreateModel.reduce.<locals>.<setcomp>.<genexpr>  sM       " "$% 789;M6M6M	 2 2ST" " " " " "r   r   r   s     r   	<setcomp>z%CreateModel.reduce.<locals>.<setcomp>  s[     0 0 0
 !'	 " " " " ")/" " "  0 0 0r   c                 B    g | ]\  }}|j         k    rj        n||fS r@   r   r   s      r   r   z&CreateModel.reduce.<locals>.<listcomp>)  sI           $1 45	8J3J3JY//PQSTU     r   )$rJ   DeleteModelr&   r<   rt   RenameModelold_name_lowerr:   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   r-   r.   )	r!   r1   r*   r<   keyr   optionr   r2   s	    `      r   r.   zCreateModel.reduce   s   y+..h	9#777L$$We44 8 Iy+..b	9#;;; &; L*!]    y"344U	9#777;;):;G 2 + +i///KKT***I;#*!]    y"455D	9#777 I; L*&/    y">??w	9#777 I;,$0)2HI *!]	 	 	  y"9::g	9#777 I;,/1P  *!]	 	 	  y.11W	9#===)X.. S	#{y~y.O-PP $"j!%    Iz22 I	       (,      !%"j!%	 	 	  I{33 <,++--#H : :K$[[d;;F :!$" $!" !" !" !" 39	!" !" !" 
" 
" " :39GK0(/4K(L(L%(I,@@@ 78	       (,     
 !("j!%
 
 
  I{33 ,++--#H 	 	K$[[55F 0 0 0 0
 +10 0 0, )04K(L(L%(I,>>>7@7IG34	       (,      !("j!%	 	 	  ww~~i333r   )NNN)r4   r5   r6   __doc__serialization_expand_argsr"   rT   r\   rj   ro   ru   propertyrx   r+   r.   r7   r8   s   @r   r:   r:   )   s        !! A A AO O O O O O,9 9 9

 

 

. . .
. . .

 
 
   X  .j4 j4 j4 j4 j4 j4 j4 j4 j4r   r:   c                   L    e Zd ZdZd Zd Zd Zd Zd Zd Z	e
d             Zd	S )
r   zDrop a model's table.c                 2    d| j         i}| j        j        g |fS Nr    )r    r2   r6   rR   s     r   rT   zDeleteModel.deconstruct8  s$    DI
 +R88r   c                 <    |                     || j                   d S r   )remove_modelr&   rZ   s      r   r\   zDeleteModel.state_forwards>  s     9do66666r   c                     |j                             || j                  }|                     |j        j        |          r|                    |           d S d S r   rm   re   s         r   rj   zDeleteModel.database_forwardsA  rp   r   c                     |j                             || j                  }|                     |j        j        |          r|                    |           d S d S r   r^   re   s         r   ro   zDeleteModel.database_backwardsF  rk   r   c                     dS )NTr@   r)   s      r   r+   zDeleteModel.references_modelK  s	     tr   c                     d| j         z  S )NzDelete model %sr   r%   s    r   ru   zDeleteModel.describeP  s     49,,r   c                     d| j         z  S )Nz	delete_%srw   r%   s    r   rx   z#DeleteModel.migration_name_fragmentS  s    T_,,r   N)r4   r5   r6   r   rT   r\   rj   ro   r+   ru   r   rx   r@   r   r   r   r   5  s        9 9 97 7 7. . .
. . .
  
- - - - - X- - -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                 f    || _         || _        t                                          |           d S r   )r   r   r-   r"   )r!   r   r   r2   s      r   r"   zRenameModel.__init__[  s/      """""r   c                 4    | j                                         S r   r   r$   r%   s    r   r   zRenameModel.old_name_lower`      }""$$$r   c                 4    | j                                         S r   r   r$   r%   s    r   new_name_lowerzRenameModel.new_name_lowerd  r   r   c                 >    | j         | j        d}| j        j        g |fS )Nr   )r   r   r2   r6   rR   s     r   rT   zRenameModel.deconstructh  s,    
 
 +R88r   c                 H    |                     || j        | j                   d S r   )rename_modelr   r   rZ   s      r   r\   zRenameModel.state_forwardso  s$    9dmT]CCCCCr   c                 <   |j                             || j                  }|                     |j        j        |          r|j                             || j                  }|                    ||j        j	        |j        j	                   |j        j
        D ]}|j        |k    r|}|| j        f}	n)|j        }|j        j        j        |j        j        j        f}	 |j         j        |	 j                            |j        j                  }
|                    ||j        |
           t'          |j        j        |j        j                  }|D ]\  }}|j        |j        k    s|j        j        j        j        s,|j        j        }|j        j        }|                    ||j        j	        |j        j	                   |                    ||j                            |j        j                  |j                            |j        j                             d S d S r   )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)r!   r*   rf   rg   rh   	new_model	old_modelrelated_objectri   related_keyto_fieldr;   	old_field	new_fieldold_m2m_modelnew_m2m_models                   r   rj   zRenameModel.database_forwardsr  sC   M++It}EE	##M$<$BINN 4	"11)T]KKI((((   #,/"A  !/9<<%E#,d.A"BKK*8E&4:D&4:E#K 38=2K@FPP"(-  ))"(    2IO4V F +1  &I Oy'>>>$19?L ?  ) 6 > ) 6 >,,!!'0!'0   ))!!'11)/2LMM!'11)/2LMM   a4	 4	> r   c                     | j         | j        c| _        | _         | j        | j        c| _        | _        |                     ||||           | j         | j        c| _        | _         | j        | j        c| _        | _        d S r   )r   r   r   r   rj   r!   r*   rf   rg   rh   s        r   ro   zRenameModel.database_backwards  s     	1T0 (,}dm$t}y-XNNN  	1T0 (,}dm$t}}}r   c                 v    |                                 | j        k    p|                                 | j        k    S r   )r$   r   r   r)   s      r   r+   zRenameModel.references_model  s/    JJLLD//V4::<<4CV3V	
r   c                 &    d| j         d| j        S )NzRename model  to r   r%   s    r   ru   zRenameModel.describe  s     *.---GGr   c                 &    d| j         d| j        S Nrename_rC   )r   r   r%   s    r   rx   z#RenameModel.migration_name_fragment  s     !%!4!4!4d6I6IJJr   c                    t          |t                    r+| j        |j        k    rt          | j        |j                  gS t          t          |                               ||          p|	                    | j        |           S r   )
rJ   r   r   r   r   r   r-   r   r.   r+   r0   s      r   r.   zRenameModel.reduce  s    y+..		#y'??? M&   ^T**11y
 
 F++DM9EEE	Fr   )r4   r5   r6   r   r"   r	   r   r   rT   r\   rj   ro   r+   ru   r   rx   r.   r7   r8   s   @r   r   r   X  s       # # # # #
 % % _% % % _%9 9 9D D D6 6 6pD D D
 
 

H H H K K XKF F F F F F F F Fr   r   c                        e Zd Z fdZ xZS )ModelOptionOperationc                     t          || j        t          f          r| j        |j        k    r|gS t	                                          ||          S r   )rJ   r2   r   r&   r-   r.   r0   s      r   r.   zModelOptionOperation.reduce  sL    y4>;"?@@	9#777;ww~~i333r   )r4   r5   r6   r.   r7   r8   s   @r   r   r     s8        4 4 4 4 4 4 4 4 4r   r   c                   V     e Zd ZdZ fdZd Zd Zd Zd Zd Z	e
d             Z xZS )	AlterModelTablezRename a model's table.c                 X    || _         t                                          |           d S r   )tabler-   r"   )r!   r    r   r2   s      r   r"   zAlterModelTable.__init__  s(    
r   c                 >    | j         | j        d}| j        j        g |fS )Nr    r   )r    r   r2   r6   rR   s     r   rT   zAlterModelTable.deconstruct  s,    IZ
 
 +R88r   c                 L    |                     || j        d| j        i           d S )Nr   )alter_model_optionsr&   r   rZ   s      r   r\   zAlterModelTable.state_forwards  s)    !!)T_z4:>VWWWWWr   c                 2   |j                             || j                  }|                     |j        j        |          r|j                             || j                  }|                    ||j        j        |j        j                   t          |j        j
        |j        j
                  D ]f\  }}|j        j        j        j        rI|                    |j        j        |j        j        j        j        |j        j        j        j                   ed S d S r   )r_   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   M++ItyAA	##M$<$BINN 	"11)TYGGI((((   +.2IO4V+ +  &I )17D !00!.6!.6<E!.6<E  	 	 r   c                 2    |                      ||||          S r   rj   r   s        r   ro   z"AlterModelTable.database_backwards      %%i
HUUUr   c                 8    d| j         d| j        | j        ndS )NzRename table for r   z	(default)r   r%   s    r   ru   zAlterModelTable.describe	  s*     III*0DJJkA
 	
r   c                     d| j         z  S )Nzalter_%s_tablerw   r%   s    r   rx   z'AlterModelTable.migration_name_fragment  s    $/11r   )r4   r5   r6   r   r"   rT   r\   rj   ro   ru   r   rx   r7   r8   s   @r   r   r     s        !!    9 9 9X X X  (V V V
 
 
 2 2 X2 2 2 2 2r   r   c                   |     e Zd ZdZ fdZed             Zd Zd Zd Z	d Z
d Zd	 Zed
             Z fdZ xZS )r   Nc                     |rt          t          |                    }t          | | j        |           t	                                          |           d S r   )r   r   setattrr   r-   r"   )r!   r    r   r2   s      r   r"   z%AlterTogetherOptionOperation.__init__  sU     	A1,??@@Ld&555r   c                 ,    t          | | j                  S r   )getattrr   r%   s    r   r   z)AlterTogetherOptionOperation.option_value  s    tT-...r   c                 J    d| j         | j        | j        i}| j        j        g |fS r   )r    r   r   r2   r6   rR   s     r   rT   z(AlterTogetherOptionOperation.deconstruct!  s/    DId/
 +R88r   c                 V    |                     || j        | j        | j        i           d S r   )r   r&   r   r   rZ   s      r   r\   z+AlterTogetherOptionOperation.state_forwards(  s:    !!Ot01	
 	
 	
 	
 	
r   c           
         |j                             || j                  }|                     |j        j        |          r|j                             || j                  }t          |d| j        z            } ||t          |j        | j        t                                t          |j        | j        t                                           d S d S )Nzalter_%s)
r_   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    M++ItyAA	##M$<$BINN 	"11)TYGGI$]JAQ4QRRNN	)9355AA	)9355AA    	 	r   c                 2    |                      ||||          S r   r   r   s        r   ro   z/AlterTogetherOptionOperation.database_backwards:  r   r   c                     |                      ||          o'| j         pt          fd| j        D                       S )Nc              3       K   | ]}|v V  	d S r   r@   )rB   r;   r    s     r   rD   z@AlterTogetherOptionOperation.references_field.<locals>.<genexpr>@  s'      DDDFNDDDDDDr   )r+   r   anyr!   r   r    r*   s     ` r   references_fieldz-AlterTogetherOptionOperation.references_field=  sR    $$Z;; 
!! EDDDD$2CDDDDD	
r   c                 V    d| j         d| j        dt          | j        pd          dS )NzAlter z for z (rs   z constraint(s)))r   r    lenr   r%   s    r   ru   z%AlterTogetherOptionOperation.describeC  s<     III!'R((((
 	
r   c                 &    d| j         d| j        S )Nalter_rC   )r&   r   r%   s    r   rx   z4AlterTogetherOptionOperation.migration_name_fragmentJ  s      $1A1ABBr   c                     t                                          ||          p2t          |t                    ot	          |          t	          |           uS r   )r-   r/   rJ   r   typer0   s      r   r/   z/AlterTogetherOptionOperation.can_reduce_throughN  sK    ww)))Y?? 
y">?? 2YtDzz1	
r   )r4   r5   r6   r   r"   r	   r   rT   r\   rj   ro   r   ru   r   rx   r/   r7   r8   s   @r   r   r     s        K     / / _/9 9 9
 
 
	 	 	V V V
 
 

 
 
 C C XC
 
 
 
 
 
 
 
 
r   r   c                   &     e Zd ZdZdZ fdZ xZS )AlterUniqueTogetherz|
    Change the value of unique_together to the target one.
    Input value of unique_together must be a set of tuples.
    r   c                 L    t                                          ||           d S r   r-   r"   )r!   r    r   r2   s      r   r"   zAlterUniqueTogether.__init__]  s#    /////r   r4   r5   r6   r   r   r"   r7   r8   s   @r   r  r  U  sI         
 $K0 0 0 0 0 0 0 0 0r   r  c                   &     e Zd ZdZdZ fdZ xZS )AlterIndexTogetherzz
    Change the value of index_together to the target one.
    Input value of index_together must be a set of tuples.
    r   c                 L    t                                          ||           d S r   r  )r!   r    r   r2   s      r   r"   zAlterIndexTogether.__init__i  s#    ~.....r   r  r8   s   @r   r	  r	  a  sI         
 #K/ / / / / / / / /r   r	  c                   `     e Zd ZdZdZ fdZd Zd Zd Zd Z	d Z
d	 Zed
             Z xZS )r   z9Represent a change with the order_with_respect_to option.r   c                 X    || _         t                                          |           d S r   )r   r-   r"   )r!   r    r   r2   s      r   r"   z AlterOrderWithRespectTo.__init__r  s)    %:"r   c                 >    | j         | j        d}| j        j        g |fS )Nr    r   )r    r   r2   r6   rR   s     r   rT   z#AlterOrderWithRespectTo.deconstructv  s-    I%)%?
 
 +R88r   c                 V    |                     || j        | j        | j        i           d S r   )r   r&   r   r   rZ   s      r   r\   z&AlterOrderWithRespectTo.state_forwards}  s:    !!Ot9:	
 	
 	
 	
 	
r   c                 (   |j                             || j                  }|                     |j        j        |          r|j                             || j                  }|j        j        r<|j        j        s0|                    ||j        	                    d                     d S |j        j        r[|j        j        sQ|j        	                    d          }|
                                sd|_        |                    ||           d S d S d S d S )N_orderr   )r_   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>   =**9di@@##M$<$BHMM 	#229diHHJ  6 < **
 0 : :8 D D     4
"(>
 !00::((** &$%EM''    '	 	
 
 
 
r   c                 6    |                      ||||           d S r   r   r   s        r   ro   z*AlterOrderWithRespectTo.database_backwards  s"    y-XNNNNNr   c                 V    |                      ||          o| j        d u p
|| j        k    S r   )r+   r   r   s       r   r   z(AlterOrderWithRespectTo.references_field  s7    $$Z;; 
&$.T$$:T2T	
r   c                 &    d| j         d| j        S )NzSet order_with_respect_to on r   r  r%   s    r   ru   z AlterOrderWithRespectTo.describe  s      III&&
 	
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   )r4   r5   r6   r   r   r"   rT   r\   rj   ro   r   ru   r   rx   r7   r8   s   @r   r   r   m  s        CC)K    9 9 9
 
 
  4O O O
 
 


 
 
 B B XB B B B Br   r   c                   ^     e Zd ZdZg dZ fdZd Zd Zd Zd Z	d Z
ed	             Z xZS )
r   z
    Set new model options that don't directly affect the database schema
    (like verbose_name, permissions, ordering). Python code in migrations
    may still need them.
    )base_manager_namedefault_manager_namedefault_related_nameget_latest_bymanagedorderingpermissionsdefault_permissionsselect_on_saveverbose_nameverbose_name_pluralc                 X    || _         t                                          |           d S r   )r<   r-   r"   )r!   r    r<   r2   s      r   r"   zAlterModelOptions.__init__  s(    r   c                 >    | j         | j        d}| j        j        g |fS )N)r    r<   )r    r<   r2   r6   rR   s     r   rT   zAlterModelOptions.deconstruct  s,    I|
 
 +R88r   c                 T    |                     || j        | j        | j                   d S r   )r   r&   r<   r   rZ   s      r   r\   z AlterModelOptions.state_forwards  s7    !!OL"		
 	
 	
 	
 	
r   c                     d S r   r@   r   s        r   rj   z#AlterModelOptions.database_forwards      r   c                     d S 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    *TY66r   c                     d| j         z  S )Nzalter_%s_optionsrw   r%   s    r   rx   z)AlterModelOptions.migration_name_fragment  s    !DO33r   )r4   r5   r6   r   r   r"   rT   r\   rj   ro   ru   r   rx   r7   r8   s   @r   r   r     s               9 9 9
 
 
    7 7 7 4 4 X4 4 4 4 4r   r   c                   \     e Zd ZdZdgZ fdZd Zd Zd Zd Z	d Z
ed	             Z xZS )
r   zAlter the model's managers.r=   c                 X    || _         t                                          |           d S r   )r=   r-   r"   )r!   r    r=   r2   s      r   r"   zAlterModelManagers.__init__  s(     r   c                 8    | j         j        | j        | j        gi fS r   )r2   r6   r    r=   r%   s    r   rT   zAlterModelManagers.deconstruct  s    +di-GLLr   c                 H    |                     || j        | j                   d S r   )alter_model_managersr&   r=   rZ   s      r   r\   z!AlterModelManagers.state_forwards  s$    ""9dot}MMMMMr   c                     d S r   r@   r   s        r   rj   z$AlterModelManagers.database_forwards  r,  r   c                     d S r   r@   r   s        r   ro   z%AlterModelManagers.database_backwards  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   )r4   r5   r6   r   r   r"   rT   r\   rj   ro   ru   r   rx   r7   r8   s   @r   r   r     s        %%!+    M M MN N N    3 3 3 5 5 X5 5 5 5 5r   r   c                   (    e Zd ZdZed             ZdS )IndexOperationindexesc                 4    | j                                         S r   )r   r$   r%   s    r   r   zIndexOperation.model_name_lower  s    $$&&&r   N)r4   r5   r6   r   r	   r   r@   r   r   r:  r:    s2        K' ' _' ' 'r   r:  c                   L    e Zd ZdZd Zd Zd Zd Zd Zd Z	e
d             Zd	S )
AddIndexzAdd an index on a model.c                 T    || _         |j        st          d|z            || _        d S )NzSIndexes passed to AddIndex operations require a name argument. %r doesn't have one.)r   r    r   index)r!   r   r@  s      r   r"   zAddIndex.__init__  s?    $z 	1389   


r   c                 H    |                     || j        | j                   d S r   )	add_indexr   r@  rZ   s      r   r\   zAddIndex.state_forwards  s#    	4#8$*EEEEEr   c                     |j                             || j                  }|                     |j        j        |          r|                    || j                   d S d S r   )r_   r`   r   ra   rb   rc   rB  r@  re   s         r   rj   zAddIndex.database_forwards  sa    ''	4?CC##M$<$BEJJ 	7##E4:66666	7 	7r   c                     |j                             || j                  }|                     |j        j        |          r|                    || j                   d S d S r   )r_   r`   r   ra   rb   rc   remove_indexr@  re   s         r   ro   zAddIndex.database_backwards!  sa    )))T_EE##M$<$BEJJ 	:&&udj99999	: 	:r   c                 >    | j         | j        d}| j        j        g |fS )N)r   r@  )r   r@  r2   r6   rR   s     r   rT   zAddIndex.deconstruct&  s2    /Z
 

 N'
 	
r   c                 
   | j         j        rAd| j         j        dd                    d | j         j        D                       d| j        S d| j         j        dd                    | j         j                  d| j        S )NzCreate index  on , c                 ,    g | ]}t          |          S r@   )rK   )rB   
expressions     r   r   z%AddIndex.describe.<locals>.<listcomp>5  s    TTTz3z??TTTr   
 on model z on field(s) z
 of model )r@  expressionsr    joinr   r;   r%   s    r   ru   zAddIndex.describe1  s    :! 	 	
		TTTZ=STTTUUUU 	 JOOOIIdj'((((OO
 	
r   c                 R    | j         d| j        j                                        S NrC   )r   r@  r    r$   r%   s    r   rx   z AddIndex.migration_name_fragment>  s)    ///1F1F1H1H1HIIr   Nr4   r5   r6   r   r"   r\   rj   ro   rT   ru   r   rx   r@   r   r   r>  r>    s        ""  F F F7 7 7
: : :
	
 	
 	

 
 
 J J XJ J Jr   r>  c                   L    e Zd ZdZd Zd Zd Zd Zd Zd Z	e
d             Zd	S )
RemoveIndexzRemove an index from a model.c                 "    || _         || _        d S r   r   r    r!   r   r    s      r   r"   zRemoveIndex.__init__F      $			r   c                 H    |                     || j        | j                   d S r   )rE  r   r    rZ   s      r   r\   zRemoveIndex.state_forwardsJ  s%    9d&;TYGGGGGr   c                    |j                             || j                  }|                     |j        j        |          rF|j        || j        f         }|                    | j	                  }|
                    ||           d S d S r   )r_   r`   r   ra   rb   rc   r   r   get_index_by_namer    rE  )r!   r*   rf   rg   rh   ri   from_model_stater@  s           r   rj   zRemoveIndex.database_forwardsM  s    )))T_EE##M$<$BEJJ 	5)0D<Q1QR$66tyAAE&&ue44444	5 	5r   c                    |j                             || j                  }|                     |j        j        |          rF|j        || j        f         }|                    | j	                  }|
                    ||           d S d S r   )r_   r`   r   ra   rb   rc   r   r   rZ  r    rB  )r!   r*   rf   rg   rh   ri   to_model_stater@  s           r   ro   zRemoveIndex.database_backwardsT  s    ''	4?CC##M$<$BEJJ 	2%_Y8M-MNN"44TY??E##E511111	2 	2r   c                 >    | j         | j        d}| j        j        g |fS NrU  )r   r    r2   r6   rR   s     r   rT   zRemoveIndex.deconstruct[  s2    /I
 

 N'
 	
r   c                 &    d| j         d| j        S )NzRemove index z from r    r   r%   s    r   ru   zRemoveIndex.describef  s     ,0IIItGGr   c                 J    d| j         d| j                                        S Nremove_rC   r   r    r$   r%   s    r   rx   z#RemoveIndex.migration_name_fragmenti  '     !%!6!6!6	8I8I8IJJr   NrQ  r@   r   r   rS  rS  C  s        ''  H H H5 5 52 2 2	
 	
 	
H H H K K XK K Kr   rS  c                        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 )RenameIndexzRename an index.Nc                     |s|st          d          |r|rt          d          || _        || _        || _        || _        d S )NzHRenameIndex requires one of old_name and old_fields arguments to be set.z;RenameIndex.old_name and old_fields are mutually exclusive.)r   r   r   r   
old_fields)r!   r   r   r   rj  s        r   r"   zRenameIndex.__init__q  sp     	
 	    	
 	M   %  $r   c                 4    | j                                         S r   r   r%   s    r   r   zRenameIndex.old_name_lower  r   r   c                 4    | j                                         S r   r   r%   s    r   r   zRenameIndex.new_name_lower  r   r   c                     | j         | j        d}| j        r
| j        |d<   | j        r
| j        |d<   | j        j        g |fS )N)r   r   r   rj  )r   r   r   rj  r2   r6   rR   s     r   rT   zRenameIndex.deconstruct  sX    /
 
 = 	/!%F:? 	3#'?F< +R88r   c                 2   | j         rh|                    || j        t          j        | j         | j                             |                    || j        t          j        | j                    d S |	                    || j        | j
        | j                   d S )Nr;   r    )rj  rB  r   r   Indexr   remove_model_optionsr	  r   rename_indexr   rZ   s      r   r\   zRenameIndex.state_forwards  s    ? 	OO%DO$-HHH  
 &&%".	     40$-    r   c           
      *   |j                             || j                  }|                     |j        j        |          sd S | j        r|j                             || j                  fd| j        D             }|                    |d          }t          |          dk    rCt          dt          |          dj
        j        dd                    |          d	          t          j        | j        |d
                   }n.|j        || j        f         }	|	                    | j                  }|j        | j        k    rd S |j        || j        f         }
|
                    | j                  }|                    |||           d S )Nc                 N    g | ]!}j                             |          j        "S r@   )rG   r   column)rB   r}   r  s     r   r   z1RenameIndex.database_forwards.<locals>.<listcomp>  s:       =B
 **5118  r   T)column_namesr@  r
   zFound wrong number (z) of indexes for (rI  z).r   ro  )r_   r`   r   ra   rb   rc   rj  _constraint_namesr   r   rG   r   rN  r   rp  r   rZ  r   r    r   rr  )r!   r*   rf   rg   rh   ri   columnsmatching_index_name	old_indexr[  r]  	new_indexr  s               @r   rj   zRenameIndex.database_forwards  s   ''	4?CC''(@(FNN 	F? 	J#229doNNJ   FJo  G #0"A"A #B # # &''1,, j /0000"(111		'****	   (+  II
  *0D<Q1QR(::4=III>T]**F!D4I)IJ"44T]CC	""5)Y?????r   c                    | j         rd S | j        | j        c| _        | _        | j        | j        c| _        | _        |                     ||||           | j        | j        c| _        | _        | j        | j        c| _        | _        d S r   )rj  r   r   r   r   rj   r   s        r   ro   zRenameIndex.database_backwards  s    ? 	F  	1T0 (,}dm$t}y-XNNN  	1T0 (,}dm$t}}}r   c                 x    | j         rd| j          d| j         d| j         S d| j         d| j         d| j         S )NzRename index rH  r   zRename unnamed index for )r   r   r   rj  r%   s    r   ru   zRenameIndex.describe  sg    = 	WWW4?WWWW  T_  } 	
r   c                     | j         rd| j        d| j        S d| j        dd                    | j                  d| j        S r   )r   r   r   r   rN  rj  r%   s    r   rx   z#RenameIndex.migration_name_fragment  sk    = 	O 	O%)%8%8%8$:M:MNN	O !!!HHT_%%%%
 	
r   c                    t          |t                    rO| j        |j        k    r?|j        r8| j        |j        k    r(t          | j        |j        | j        | j                  gS t                      
                    ||          S )N)r   r   rj  )rJ   rh  r   r   r   r   r   r   rj  r-   r.   r0   s      r   r.   zRenameIndex.reduce  s    y+..	%)CCC" D#y'??? O&/!]#	    ww~~i333r   )NN)r4   r5   r6   r   r"   r	   r   r   rT   r\   rj   ro   ru   r   rx   r.   r7   r8   s   @r   rh  rh  n  s        % % % % % % _% % % _%	9 	9 	9  $#@ #@ #@JD D D&
 
 
 
 
 X
4 4 4 4 4 4 4 4 4r   rh  c                   L    e Zd ZdZd Zd Zd Zd Zd Zd Z	e
d             Zd	S )
AddConstraintconstraintsc                 "    || _         || _        d S r   r   
constraint)r!   r   r  s      r   r"   zAddConstraint.__init__  s    $$r   c                 H    |                     || j        | j                   d S r   )add_constraintr   r  rZ   s      r   r\   zAddConstraint.state_forwards
  s%    Y(=tOOOOOr   c                     |j                             || j                  }|                     |j        j        |          r|                    || j                   d S d S r   )r_   r`   r   ra   rb   rc   r  r  re   s         r   rj   zAddConstraint.database_forwards  sd    ''	4?CC##M$<$BEJJ 	A((@@@@@	A 	Ar   c                     |j                             || j                  }|                     |j        j        |          r|                    || j                   d S d S r   )r_   r`   r   ra   rb   rc   remove_constraintr  re   s         r   ro   z AddConstraint.database_backwards  sd    ''	4?CC##M$<$BEJJ 	D++E4?CCCCC	D 	Dr   c                 :    | j         j        g | j        | j        dfS )Nr  )r2   r4   r   r  r%   s    r   rT   zAddConstraint.deconstruct  s+    N#"o"o 
 	
r   c                 0    d| j         j        d| j        S )NzCreate constraint rL  )r  r    r   r%   s    r   ru   zAddConstraint.describe!  s#     O   OO
 	
r   c                 R    | j         d| j        j                                        S rP  )r   r  r    r$   r%   s    r   rx   z%AddConstraint.migration_name_fragment'  s*    ///1E1K1K1M1M1MNNr   Nr4   r5   r6   r   r"   r\   rj   ro   rT   ru   r   rx   r@   r   r   r  r    s        K% % %P P PA A A
D D D

 
 

 
 
 O O XO O Or   r  c                   L    e Zd ZdZd Zd Zd Zd Zd Zd Z	e
d             Zd	S )
RemoveConstraintr  c                 "    || _         || _        d S r   rU  rV  s      r   r"   zRemoveConstraint.__init__/  rW  r   c                 H    |                     || j        | j                   d S r   )r  r   r    rZ   s      r   r\   zRemoveConstraint.state_forwards3  s%    	4+@$)LLLLLr   c                    |j                             || j                  }|                     |j        j        |          rF|j        || j        f         }|                    | j	                  }|
                    ||           d S d S r   )r_   r`   r   ra   rb   rc   r   r   get_constraint_by_namer    r  )r!   r*   rf   rg   rh   ri   r[  r  s           r   rj   z"RemoveConstraint.database_forwards6  s    ''	4?CC##M$<$BEJJ 	?)0D<Q1QR)@@KKJ++E:>>>>>	? 	?r   c                    |j                             || j                  }|                     |j        j        |          rF|j        || j        f         }|                    | j	                  }|
                    ||           d S d S r   )r_   r`   r   ra   rb   rc   r   r   r  r    r  )r!   r*   rf   rg   rh   ri   r]  r  s           r   ro   z#RemoveConstraint.database_backwards=  s    ''	4?CC##M$<$BEJJ 	<%_Y8M-MNN'>>tyIIJ((
;;;;;	< 	<r   c                 :    | j         j        g | j        | j        dfS r_  )r2   r4   r   r    r%   s    r   rT   zRemoveConstraint.deconstructD  s+    N#"o	 
 	
r   c                 &    d| j         d| j        S )NzRemove constraint z from model ra  r%   s    r   ru   zRemoveConstraint.describeN  s     7;yyy$//RRr   c                 J    d| j         d| j                                        S rc  re  r%   s    r   rx   z(RemoveConstraint.migration_name_fragmentQ  rf  r   Nr  r@   r   r   r  r  ,  s        K  M M M? ? ?< < <
 
 
S S S K K XK 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   r:   r   r   r   r   r   r  r	  r   r   r   r:  r>  rS  rh  r  r  r@   r   r   <module>r     s         : : : : : : 1 1 1 1 1 1 I I I I I I I I 7 7 7 7 7 7 3 3 3 3 3 3 R R R R R R R R R R R R R R  D D D D DY D D D(I4 I4 I4 I4 I4. I4 I4 I4X -  -  -  -  -.  -  -  -F|F |F |F |F |F. |F |F |F~4 4 4 4 4> 4 4 402 02 02 02 02* 02 02 02f>
 >
 >
 >
 >
#7 >
 >
 >
B	0 	0 	0 	0 	06 	0 	0 	0	/ 	/ 	/ 	/ 	/5 	/ 	/ 	/AB AB AB AB AB2 AB AB ABH44 44 44 44 44, 44 44 44n5 5 5 5 5- 5 5 5:' ' ' ' 'Y ' ' '3J 3J 3J 3J 3J~ 3J 3J 3Jl(K (K (K (K (K. (K (K (KVR4 R4 R4 R4 R4. R4 R4 R4j&O &O &O &O &ON &O &O &OR'K 'K 'K 'K 'K~ 'K 'K 'K 'K 'Kr   