
    Evg.                        d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dl	mZ 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 d dlmZ d dlm Z  d dl!m"Z" d dl#m$Z$ ddl%m&Z& ddl'm(Z( d#dZ)d Z*d Z+d Z, G d d          Z- G d de          Z. G d d e
          Z/ G d! d"          Z0dS )$    N)defaultdict)contextmanager)partial)	AppConfig)Apps)apps)settings)FieldDoesNotExist)models)field_is_referencedget_references)NOT_PROVIDED)RECURSIVE_RELATIONSHIP_CONSTANT)DEFAULT_NAMESnormalize_together)make_model_tuple)cached_property)import_string)get_docs_version   )InvalidBasesError)resolve_relation c                     t          | t                    rB|                     dd          }t          |          dk    rt	          |          n	||d         fS | j        j        | j        j        fS )N.r      r   )
isinstancestrsplitlentuple_meta	app_label
model_name)modelr#   r   s      W/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/django/db/migrations/state.py_get_app_label_and_model_namer'      sc    % =C##"5zzQuU|||Ya4II{$ek&<<<    c                    d |                                  D             }t                      }| j                            dd          D ]^}|j        rU|j        Nt          |j        t                    s4|                    |j	                   |
                    |j                   _| j        }|j        r| |v r|
                    |j                   |S )zEReturn all models that have a direct relationship to the given model.c                 F    g | ]}t          |t          j                  |S  )
issubclassr   Model).0subclasss     r&   
<listcomp>z'_get_related_models.<locals>.<listcomp>#   s:       h--  r(   T)include_parentsinclude_hidden)__subclasses__setr"   
get_fieldsis_relationrelated_modelr   r   addr%   appendproxyconcrete_model)mrelated_modelsrelated_fields_modelsfoptss        r&   _get_related_modelsrA   !   s     ((**  N
  EEWTJJ 3 3M	3+q44 , "%%ag...!!!/222 7Dz 3a000d1222r(   c                 4    d t          |           D             S )zq
    Return a list of typical (app_label, model_name) tuples for all related
    models for the given model.
    c                 >    h | ]}|j         j        |j         j        fS r+   )r"   r#   r$   )r.   rel_mods     r&   	<setcomp>z,get_related_models_tuples.<locals>.<setcomp>>   s7        
	 '-":;  r(   )rA   )r%   s    r&   get_related_models_tuplesrF   9   s+    
 *511   r(   c                 .   t                      }t          |           }|D ]Z}|j        j        |j        j        }}||f|v r!|                    ||f           |                    t          |                     [|| j        j        | j        j        fhz
  S )a  
    Return all models that have a direct or indirect relationship
    to the given model.

    Relationships are either defined by explicit relational fields, like
    ForeignKey, ManyToManyField or OneToOneField, or by inheriting from another
    model (a superclass is related to its subclasses, but not vice versa). Note,
    however, that a model inheriting from a concrete model is also related to
    its superclass through the implicit *_ptr OneToOneField on the subclass.
    )r4   rA   r"   r#   r$   r8   extend)r%   seenqueuerD   rel_app_labelrel_model_names         r&   get_related_models_recursiverM   D   s     55D&&E 3 3M#M$ & >*d22-0111(112222EK)5;+ABCCCr(   c                   $   e Zd ZdZd(dZed             Zd Zd Zd Z	d)dZ
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd*dZd*dZd+dZd Zd Z	 d)dZd)dZd Zd  Z d! Z!d" Z"d# Z#d$ Z$e%d%             Z&e'd&             Z(d' Z)dS ),ProjectStatez
    Represent the entire project's overall state. This is the item that is
    passed around - do it here rather than at the app level so that cross-app
    FKs/etc. resolve properly.
    Nc                     |pi | _         |t                      }nt          |t                    sJ || _        d| _        d | _        d S NF)r   r4   r   	real_apps
is_delayed
_relations)selfr   rR   s      r&   __init__zProjectState.__init__d   sM    lIIi-----"r(   c                 F    | j         |                                  | j         S N)rT   resolve_fields_and_relationsrU   s    r&   	relationszProjectState.relationsp   s$    ?"--///r(   c                     |j         |j        f}|| j        |<   | j        |                     |           d| j        v r | j        |  d S d S Nr   )r#   
name_lowerr   rT   resolve_model_relations__dict__reload_model)rU   model_state	model_keys      r&   	add_modelzProjectState.add_modelv   se    );+AA	!,I?&((333T]""Dy)))) #"r(   c                 `   ||f}| j         |= | j        g| j                            |d            t          | j                                                  D ]%\  }}|                    |d            |s| j        |= &d| j        v r* | j        j        |  | j                                         d S d S r]   )	r   rT   poplistitemsr`   r   unregister_modelclear_cache)rU   r#   r$   rc   related_model_keymodel_relationss         r&   remove_modelzProjectState.remove_model~   s    z)	K	"?&O	40006:4?;P;P;R;R6S6S ; ;2!?##It444& ;(9:T]""&DI&	22 I!!#####	 #"r(   c                    |                                 }|                                 }| j        ||f                                         }||_        || j        ||f<   ||f}| d| }t	                      }	t          | |          D ]\  }
}}}d }|j        r |                                }||j        _        |j	        r"||                                }||j        _	        |r+||
j
        |<   |	                    |
j        |
j        f           | j        k||f}||f}|| j        v r"| j                            |          | j        |<   | j                                        D ]}||v r|                    |          ||<   |                     |	d           |                     ||           |                     ||d           d S )Nr   Tdelay)lowerr   clonenamer4   r   toremote_fieldr%   throughfieldsr8   r#   r^   rT   rf   valuesreload_modelsrm   ra   )rU   r#   old_namenew_nameold_name_lowernew_name_lowerrenamed_modelold_model_tuplenew_remote_model	to_reloadrb   rs   field	referencechanged_fieldold_name_keynew_name_keyrl   s                     r&   rename_modelzProjectState.rename_model   s   !))!))I~$=>DDFF%1>I~-.$n5'44(44EE	3A/4
 4
 	O 	O/Kui !M| D %3C*0  F ($)KKMMM5E*2 O+8"4({4k6LMNNN?&$n4L$n4Lt..040C0CL0Q0Q-#'?#9#9#;#; V V?224C4G4G4U4UOL19D111)^444)^4@@@@@r(   c                     | j         ||f         }i |j        ||_        |r$|D ]!}||vr|j                            |d           "|                     ||d           d S )NFTro   )r   optionsrf   ra   )rU   r#   r$   r   option_keysrb   keys          r&   alter_model_optionsz ProjectState.alter_model_options   s    k)Z"78@!4@@ 	8" 8 8g%%'++C777)Zt<<<<<r(   c                     | j         ||f         }|j                            |          x}rfd|D             |j        |<   |                     ||d           d S )Nc                 T    g | ]$}t          |          t                    k    "|%S r+   )r!   )r.   objvalue_to_removes     r&   r0   z5ProjectState.remove_model_options.<locals>.<listcomp>   s8     0 0 0uSzzU?5K5K'K'K'K'K'Kr(   Tro   )r   r   getra   )rU   r#   r$   option_namer   rb   objss       `  r&   remove_model_optionsz!ProjectState.remove_model_options   s    k)Z"78&**;7774 	0 0 0 0#0 0 0K, 	)Zt<<<<<r(   c                 |    | j         ||f         }t          |          |_        |                     ||d           d S NTro   )r   rg   managersra   )rU   r#   r$   r   rb   s        r&   alter_model_managersz!ProjectState.alter_model_managers   sB    k)Z"78#H~~)Zt<<<<<r(   c                     | j         ||f         }g |j        |         ||j        |<   |                     ||d           d S r   r   r   ra   )rU   r#   r$   r   r   rb   s         r&   _append_optionzProjectState._append_option   sS    k)Z"78+S[-@-M+Ss+SK()Zt<<<<<r(   c                     | j         ||f         }|j        |         }fd|D             |j        |<   |                     ||d           d S )Nc                 *    g | ]}|j         k    |S r+   rs   )r.   r   obj_names     r&   r0   z/ProjectState._remove_option.<locals>.<listcomp>   s%    +X+X+XC38xCWCWCCWCWCWr(   Tro   r   )rU   r#   r$   r   r   rb   r   s       `  r&   _remove_optionzProjectState._remove_option   sc    k)Z"78";/+X+X+X+X4+X+X+XK()Zt<<<<<r(   c                 6    |                      ||d|           d S Nindexesr   )rU   r#   r$   indexs       r&   	add_indexzProjectState.add_index   s"    Iz9eDDDDDr(   c                 6    |                      ||d|           d S r   r   )rU   r#   r$   
index_names       r&   remove_indexzProjectState.remove_index   s"    Iz9jIIIIIr(   c                    | j         ||f         }|j        d         }g }|D ]=}|j        |k    r|                                }||_        |                    |           >||j        d<   |                     ||d           d S )Nr   Tro   )r   r   rs   rr   r9   ra   )	rU   r#   r$   old_index_namenew_index_namerb   r   new_indexesr   s	            r&   rename_indexzProjectState.rename_index   s    k)Z"78"9- 	$ 	$Cx>))iikk)s####)4I&)Zt<<<<<r(   c                 6    |                      ||d|           d S Nconstraintsr   )rU   r#   r$   
constraints       r&   add_constraintzProjectState.add_constraint   s"    Iz=*MMMMMr(   c                 6    |                      ||d|           d S r   r   )rU   r#   r$   constraint_names       r&   remove_constraintzProjectState.remove_constraint   s"    Iz=/RRRRRr(   c                     |s!|                                 }t          |_        n|}||f}|| j        |         j        |<   | j        |                     |||           |j         } | j        |d|i d S Nrp   )	rr   r   defaultr   rw   rT   resolve_model_field_relationsr6   ra   )rU   r#   r$   rs   r   preserve_defaultrc   rp   s           r&   	add_fieldzProjectState.add_field   s     	KKMME(EMMEz)	.3I%d+?&..y$FFF%%92E22222r(   c                     ||f}| j         |         }|j                            |          }| j        |                     |||           |j         } | j        |d|i d S r   )r   rw   rf   rT   r   r6   ra   )rU   r#   r$   rs   rc   rb   	old_fieldrp   s           r&   remove_fieldzProjectState.remove_field   sw    z)	k),&**400	?&..y$	JJJ))92E22222r(   c                    |s!|                                 }t          |_        n|}||f}| j        |         j        }| j        W|                    |          }|j        r|                     |||           |||<   |j        r|                     |||           n|||<   |j         ot          | |||f           }	 | j
        |d|	i d S r   )rr   r   r   r   rw   rT   rf   r6   r   r   ra   )
rU   r#   r$   rs   r   r   rc   rw   r   rp   s
             r&   alter_fieldzProjectState.alter_field	  s    	KKMME(EMMEz)	Y'.?&

4((I$ O229dINNN F4L  K229dEJJJ F4L
 %% 
.A)dE]/
 /
 +
 	92E22222r(   c           	         ||f}| j         |         }|j        }	 |                              }n&# t          $ r t	          | d| d d          w xY w||<   |                                D ]6}	t          |	dd           }
|
r!t          fd|
D                       |	_        7|j	        }d|v rfd|d         D             |d<   d}t          | ||f          }|D ]X^ }}	}d	}|j        rI|j        \  }}t          |d
d           k    r|_        |r!t          fd|D                       |	_        Y| j        {                                }                                }| j                                        D ]9}|||         v r-||                             |          }	||	_        |	||         |<   : | j        |d|i d S )Nr   z has no field named ''from_fieldsc                 $    g | ]}|k    rn|S r+   r+   )r.   from_field_namer{   rz   s     r&   r0   z-ProjectState.rename_field.<locals>.<listcomp>4  s7       + %4x$?$?_  r(   unique_togetherc                 .    g | ]}fd |D             S )c                 $    g | ]}|k    rn|S r+   r+   )r.   nr{   rz   s     r&   r0   z8ProjectState.rename_field.<locals>.<listcomp>.<listcomp>=  s%    DDDaQ(]]DDDr(   r+   )r.   togetherr{   rz   s     r&   r0   z-ProjectState.rename_field.<locals>.<listcomp><  sA     * * * EDDDD8DDD* * *r(   TF
field_namec                 $    g | ]}|k    rn|S r+   r+   )r.   to_field_namer{   rz   s     r&   r0   z-ProjectState.rename_field.<locals>.<listcomp>K  s7        - )6(A(AHH}  r(   rp   )r   rw   rf   KeyErrorr
   rx   getattrr!   r   r   r   rt   r   	to_fieldsrT   rq   rs   ra   )rU   r#   r$   rz   r{   rc   rb   rw   foundr   r   r   rp   
references_r   ru   r   r|   r}   to_models      ``                r&   rename_fieldzProjectState.rename_field#  s   z)	k),#	JJx((EE 	 	 	#KKzKKKKK  	 !x]]__ 		 		E!%==K $)    /:  % %! %''* * * * * '(9 :* * *G%&
 #D)h5FGG
$. 	 	 QyE| 
*3,'i<t<<HH.6L+ &+    1:  ' 'EO ?&%^^--N%^^--N O2244 @ @!Xi%888$Y/33NCCE!/EJ:?HY'792E22222s	   2 #AFc                 L   |rd| _         t                      }	 | j                            ||          }|rt	          |          }n t          |          }n# t          $ r Y nw xY w| j        ||f         }t                      }|j        	                                D ]`}|j
        rW|j        j        t          k    rt          |j        |          \  }	}
|                    |	|
                                f           a|                    |           |D ]x\  }	}
	 | j                            |	|
          }|r#|                    t	          |                     F|                    t          |                     i# t          $ r Y uw xY w|                    ||f           |S )NT)rS   r4   r   	get_modelrF   rM   LookupErrorr   rw   rx   r6   ru   r%   r   r'   r7   r8   rq   update)rU   r#   r$   rp   r=   	old_modelrb   direct_related_modelsr   rK   rL   	rel_models               r&   _find_reload_modelzProjectState._find_reload_modelZ  s    	#"DO
	I	++IzBBI  I!:9!E!E!=i!H!H  	 	 	D	 k9j"9: !$ '..00 	S 	SE  S%+/NNN0M'1 1-~ &))=.:N:N:P:P*QRRR 	3444-B 		S 		S)M>S I//~NN	  S"))*CI*N*NOOOO"))*Fy*Q*QRRRR     	Iz2333s#   A 
A#"A#E==
F
	F
c                 t    d| j         v r.|                     |||          }|                     |           d S d S r]   )r`   r   _reload)rU   r#   r$   rp   r=   s        r&   ra   zProjectState.reload_model  sF    T]""!44Y
ERRNLL((((( #"r(   Tc                     d| j         v rWt                      }|D ]/\  }}|                    |                     |||                     0|                     |           d S d S r]   )r`   r4   r   r   r   )rU   r   rp   r=   r#   r$   s         r&   ry   zProjectState.reload_models  s    T]"" UUN)/  %	:%%++Iz5II    LL((((( #"r(   c                    | j                                         5  |D ] \  }}| j                             ||           !	 d d d            n# 1 swxY w Y   g }| j         j        D ]'}|j        |j        f|v r|                    |           (|D ]:\  }}	 | j        ||f         }|                    |           +# t          $ r Y 7w xY w| j         	                    |           d S rX   )
r   bulk_updateri   real_modelsr#   r^   r9   r   r   render_multiple)rU   r=   rK   rL   states_to_be_renderedrb   s         r&   r   zProjectState._reload  s   Y""$$ 	J 	J1? J J-~	**=.IIIIJ	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J !#  90 	: 	:K%{'=>.PP%,,[999 .< 	: 	:)M>:"k-*GH &,,[9999     		!!"788888s#   $AAAB99
CCc                     t          |g|R  }|d         | j        vr||v r||         }| j        |         }|| j        |         j        v r|||         vsJ |||         |<   d S ||         |= ||         s||= d S d S )Nr   )r   rR   rT   r   rw   )rU   r%   rc   r   r   	concretesremote_model_keyrelations_to_remote_models           r&   update_model_field_relationz(ProjectState.update_model_field_relation  s     ,E>I>>>Adn449IY9V9V()9:$(O4D$E!Y/666 %>y%IIIII?D%i0<<<))4Z@,Y7 9-i8889 9r(   c                     |j         }|sd S ||                                 \  }}|                     |j        ||||           t	          |dd           }|sd S |                     |||||           d S )Nrv   )ru   -_get_concrete_models_mapping_and_proxy_modelsr   r%   r   )rU   rc   r   r   r   ru   r   rv   s           r&   r   z*ProjectState.resolve_model_field_relations  s     ) 	FMMOOLIq((	
 	
 	
 ,	488 	F((Y
E9	
 	
 	
 	
 	
r(   c                     ||                                  \  }}| j        |         }|j                                        D ]\  }}|                     ||||           d S rX   )r   r   rw   rh   r   )rU   rc   r   r   rb   r   r   s          r&   r_   z$ProjectState.resolve_model_relations  sw    MMOOLIqk),!,!3!9!9!;!; 	X 	XJ..y*eYWWWW	X 	Xr(   c                    | j                                         D ](}|j                                        D ]\  }}||_        )t          t          t
          t                              | _        | 	                                \  }}|D ]}| 
                    ||           |D ]}| j        ||                  | j        |<   d S rX   )r   rx   rw   rh   rs   r   r   dictrT   r   r_   )rU   rb   r   r   r   proxiesrc   s          r&   rY   z)ProjectState.resolve_fields_and_relations  s    ;--// 	( 	(K%0%7%=%=%?%? ( (!
E'

( &gk4&@&@AA!OOQQ	7" 	? 	?I((I>>>>  	O 	OI)-99M)NDOI&&	O 	Or(   c                 ^    |                                  \  }}t          |          }||         S rX   )r   r   )rU   r%   concrete_models_mappingr   rc   s        r&   get_concrete_model_keyz#ProjectState.get_concrete_model_key  s6     >>@@	
#$U++	&y11r(   c                     i }i }| j                                         D ]C\  }}|j                            d          r|||<   |                     ||          ||<   >|||<   D||fS )Nr:   )r   rh   r   r   _find_concrete_model_from_proxy)rU   r   proxy_modelsrc   rb   s        r&   r   z:ProjectState._get_concrete_models_mapping_and_proxy_models  s    "$&*k&7&7&9&9 	? 	?"I{"&&w// 
?*5Y' 88$#  (	22 6?'	22&44r(   c                     |j         D ]s}t          |t                    st          |t          j                  s2t          |          }|                    |          }|s|c S |                     ||          c S d S rX   )	basesr   r   r,   r   r-   r   r   r   )rU   r   rb   basebase_key
base_states         r&   r   z,ProjectState._find_concrete_model_from_proxy  s    % 	R 	RDtS)) Zfl-K-K '--H%))(33J  77jQQQQQ	R 	Rr(   c                     t          d | j                                        D             | j                  }d| j        v r| j                                        |_        | j        |_        |S )z*Return an exact copy of this ProjectState.c                 >    i | ]\  }}||                                 S r+   rr   )r.   kvs      r&   
<dictcomp>z&ProjectState.clone.<locals>.<dictcomp>'  s&    AAATQAqwwyyAAAr(   r   rR   r   )rO   r   rh   rR   r`   r   rr   rS   )rU   	new_states     r&   rr   zProjectState.clone$  sl     AAT[->->-@-@AAAn
 
 
	 T]""!Y__..IN#	r(   c                 >    | j         rd| j        v r| j        d= d S d S d S r]   )rS   r`   rZ   s    r&   clear_delayed_apps_cachez%ProjectState.clear_delayed_apps_cache/  s8    ? 	&v66f%%%	& 	&66r(   c                 6    t          | j        | j                  S rX   )	StateAppsrR   r   rZ   s    r&   r   zProjectState.apps3  s    555r(   c                     i }|                     d          D ]-}t                              |          }|||j        |j        f<   . | |          S )z3Take an Apps and return a ProjectState matching it.T)include_swapped)
get_models
ModelState
from_modelr#   r^   )clsr   
app_modelsr%   rb   s        r&   	from_appszProjectState.from_apps7  sa     
__T_:: 	V 	VE$//66KJUJ-{/EFGGs:r(   c                 B    | j         |j         k    o| j        |j        k    S rX   r  rU   others     r&   __eq__zProjectState.__eq__@  s    {el*Pt~/PPr(   )NNrX   F)T)*__name__
__module____qualname____doc__rV   propertyr[   rd   rm   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ra   ry   r   r   r   r_   rY   r   r   r   rr   r  r   r   classmethodr  r  r+   r(   r&   rO   rO   ]   s        
 
 
 
   X
* * *$ $ $ %A %A %AN= = = == = == = =
= = =
= = =E E EJ J J= = =N N NS S S3 3 33 3 33 3 3453 53 53n0 0 0 0d) ) ) )
) ) ) )9 9 949 9 98 
 
 
 
8X X X XO O O 2 2 25 5 5$	R 	R 	R	 	 	& & & 6 6 _6   [Q Q Q Q Qr(   rO   c                       e Zd ZdZd Zd ZdS )AppConfigStubzAStub of an AppConfig. Only provides a label and a dict of models.c                 >    d | _         i | _        || _        || _        d S rX   )r   r   labelrs   )rU   r   s     r&   rV   zAppConfigStub.__init__G  s$    	 
			r(   c                 >    | j         j        | j                 | _        d S rX   )r   
all_modelsr   r   rZ   s    r&   import_modelszAppConfigStub.import_modelsP  s    i*4:6r(   N)r  r  r  r  rV   r#  r+   r(   r&   r  r  D  s8        KK  7 7 7 7 7r(   r  c                   R     e Zd ZdZd	 fd	Zed             Zd Zd Zd Z	d Z
 xZS )
r	  zo
    Subclass of the global Apps registry class to better handle dynamic model
    additions and removals.
    Fc                    g | _         |D ]a}t          j        |          }|                                D ]6}| j                             t
                              |d                     7bd  |j                    D             }d t          g ||          D             }t                      
                    |           d | _        d | _        |                     g  |j                    | j                    ddlm}	 |rt!          t"          j                  hnt'                      }
 |	| |
          }|r,t)          d                    d	 |D                                 d S )
NT)exclude_relsc                     h | ]	}|j         
S r+   )r#   )r.   rb   s     r&   rE   z%StateApps.__init__.<locals>.<setcomp>f  s    OOOk+OOOr(   c                 ,    g | ]}t          |          S r+   )r  )r.   r   s     r&   r0   z&StateApps.__init__.<locals>.<listcomp>g  s-     
 
 
%*M%  
 
 
r(   r   )_check_lazy_references)ignore
c              3   $   K   | ]}|j         V  d S rX   )msg)r.   errors     r&   	<genexpr>z%StateApps.__init__.<locals>.<genexpr>|  s$      &E&EUuy&E&E&E&E&E&Er(   )r   global_appsget_app_configr  r9   r  r  rx   sortedsuperrV   _lockready_eventr   django.core.checks.model_checksr)  r   r	   AUTH_USER_MODELr4   
ValueErrorjoin)rU   rR   r   ignore_swappabler#   appr%   
app_labelsapp_configsr)  r*  errors	__class__s               r&   rV   zStateApps.__init__Z  s    " 	Y 	YI,Y77C)) Y Y ''
(=(=eRV(=(W(WXXXXY PO}v}OOO

 
.45Ny5N:5N.O.O
 
 
 	%%%
 
B}v}B1ABCCC 	KJJJJJ =MWh67788RURWRW 	 ('V<<< 	GTYY&E&Ef&E&E&EEEFFF	G 	Gr(   c              #      K   | j         }d| _         	 d V  || _         |                                  d S # || _         |                                  w xY wrQ   )readyrj   )rU   rA  s     r&   r   zStateApps.bulk_update~  se       

	EEEDJ DJs	   3 Ac                    |sd S |                                  5  |}|rg }|D ]=}	 |                    |            # t          $ r |                    |           Y :w xY wt	          |          t	          |          k    r"t          d|dt                      d          |}|d d d            d S # 1 swxY w Y   d S )NzCannot resolve bases for z
This can happen if you are inheriting models from an app with migrations (e.g. contrib.auth)
 in an app with no migrations; see https://docs.djangoproject.com/en/z)/topics/migrations/#dependencies for more)r   renderr   r9   r    r   )rU   model_statesunrendered_modelsnew_unrendered_modelsr%   s        r&   r   zStateApps.render_multiple  s]   
  	F 	: 	: ,# :(*%. < <E<T****, < < <-44U;;;;;<,--5F1G1GGG++ 1002B2D2D2D2DF   %:!! $ :	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	:s2   B3;B3AB3AA	B33B7:B7c                     t          g i           }t          j        | j                  |_        | j        D ]6}t          |          }||_        |                                 ||j        |<   7| j        |_        |S )z Return a clone of this registry.)	r	  copydeepcopyr"  r=  r  r   r#  r   )rU   rr   r#   
app_configs       r&   rr   zStateApps.clone  s    "b!!=99) 	6 	6I&y11J#JO$$&&&+5Ei(( !,r(   c                 .   || j         |         |j        j        <   || j        vr)t	          |          | j        |<   | | j        |         _        || j        |         j        |j        j        <   |                     |           |                                  d S rX   )	r"  r"   r$   r=  r  r   r   do_pending_operationsrj   )rU   r#   r%   s      r&   register_modelzStateApps.register_model  s    =B	"5;#9:D,,,*7	*B*BDY'/3DY',EJ#*5;+AB""5)))r(   c                 l    	 | j         |         |= | j        |         j        |= d S # t          $ r Y d S w xY wrX   )r"  r=  r   r   )rU   r#   r$   s      r&   ri   zStateApps.unregister_model  sQ    		*:6 +2:>>> 	 	 	DD	s   !% 
33r  )r  r  r  r  rV   r   r   r   rr   rM  ri   __classcell__)r?  s   @r&   r	  r	  T  s         
"G "G "G "G "G "GH 	 	 ^	: : :8          r(   r	  c                   z    e Zd ZdZ	 ddZed             Zd Zedd            Z	d Z
d	 Zd
 Zd Zd Zd Zd ZdS )r  a  
    Represent a Django Model. Don't use the actual Model class as it's not
    designed to have its options changed - instead, mutate this one and then
    render it into a Model as required.

    Note that while you are allowed to mutate .fields, you are not allowed
    to mutate the Field instances inside there themselves - you must instead
    assign new ones, as these are not detached during a clone.
    Nc           
         || _         || _        t          |          | _        |pi | _        | j                            dg            | j                            dg            |pt          j        f| _        |pg | _	        | j        
                                D ]\  }}t          |d          rt          d|z            |j        r8t          |j        d          r#t          d| j          d| j         d| d          |j        r=t          |j        j        d          r#t          d| j          d| j         d| d	          | j        d         D ]}|j        st          d
|z            d S )Nr   r   r%   z7ModelState.fields cannot be bound to a model - "%s" is.r"   zEModel fields in "ModelState.fields" cannot refer to a model class - "r   z*.to" does. Use a string reference instead.z/.through" does. Use a string reference instead.zKIndexes passed to ModelState require a name attribute. %r doesn't have one.)r#   rs   r   rw   r   
setdefaultr   r-   r   r   rh   hasattrr8  r6   r7   many_to_manyru   rv   )	rU   r#   rs   rw   r   r   r   r   r   s	            r&   rV   zModelState.__init__  s    #	6ll}"	2...r222-v|o
 B;,,.. 	 	KD%ug&&  MPTT     WU-@'%J%J  ).) )+/9) )7;) ) )  
 ! ge.@.H'&R&R  0.0 0+/90 07;0 0 0   \), 	 	E:  +-23  	 	r(   c                 4    | j                                         S rX   )rs   rq   rZ   s    r&   r^   zModelState.name_lower  s    y   r(   c                 ^    |dk    r| j                             d|          }| j        |         S )N_orderorder_with_respect_to)r   r   rw   )rU   r   s     r&   	get_fieldzModelState.get_field  s2    !!))*A:NNJ{:&&r(   Fc           
         g }j         j        D ]}t          |dd          r|rt          |t          j                  r1|j        }	 |                    ||                                f           c# t          $ r'}t          d|dj         j
        d|          d}~ww xY w|stj         j        D ]g}|j        }	 |                    ||                                f           4# t          $ r'}t          d|dj         j        d|          d}~ww xY wi }t          D ]}|dv r|j         j        v r|dk    r2j         j        d         }t          t!          |                    ||<   M|d	k    r2j         j        d	         }	t          t!          |	                    ||<   |d
k    r=d j         j        D             }
|
D ]}|j        s|                               |
|d
<   |dk    rd j         j        D             |d<   j         j        |         ||<   |rdD ]	}||v r||= 
n.|                    d          d j         j        D             v r|d= fdt-          t                               fd          }t/          d |D                       }t1          d |D                       st          j        f}g }t                      }d}j         j        D ]}|j        |v r|j        r)t9          j        |          }|                                 nJ|j        u s	|j        u r7t	          j                     }|j!        |_!        |j        |_        |j        u r|}n|"                    |j                   |                    |j        |f           |d|fgk    rg } | j         j#        j         j        ||||          S )z3Given a model, return a ModelState representing it.ru   NzCouldn't reconstruct field z on z: zCouldn't reconstruct m2m field )r   r#   r   index_togetherr   c                 6    g | ]}|                                 S r+   r   )r.   idxs     r&   r0   z)ModelState.from_model.<locals>.<listcomp>2  s     JJJssyy{{JJJr(   r   c                 6    g | ]}|                                 S r+   r   )r.   cons     r&   r0   z)ModelState.from_model.<locals>.<listcomp>8  s-     . . .(+		. . .r(   )r   r[  rX  rX  c                     h | ]	}|j         
S r+   r   )r.   r   s     r&   rE   z(ModelState.from_model.<locals>.<setcomp>D  s'     6
 6
 6
 EJ6
 6
 6
r(   c                     g }| j         D ]R}t          |d          r+|j        j        r|                     |                     =|                    |           S|S )Nr"   )	__bases__rS  r"   abstractrH   r9   )r%   r   r   flatten_basess      r&   rd  z,ModelState.from_model.<locals>.flatten_basesI  sp    E ' '4)) 'dj.A 'LLt!4!45555LL&&&&Lr(   c                 8    j                             |           S rX   )__mro__r   )xr%   s    r&   <lambda>z'ModelState.from_model.<locals>.<lambda>X  s    U]5H5H5K5K r(   r   c              3   R   K   | ]"}t          |d           r|j        j        n|V  #dS )r"   N)rS  r"   label_lowerr.   r   s     r&   r/  z(ModelState.from_model.<locals>.<genexpr>\  sO       
 
 (/tW'='=GTZ##4
 
 
 
 
 
r(   c              3   t   K   | ]3}t          |t                    pt          |t          j                  V  4d S rX   )r   r   r,   r   r-   rl  s     r&   r/  z(ModelState.from_model.<locals>.<genexpr>a  sN       
 
JNZc""Djv|&D&D
 
 
 
 
 
r(   objects)$r"   local_fieldsr   r   r   OrderWrtrs   r9   rr   	TypeErrorr   local_many_to_manyobject_namer   original_attrsr4   r   r   set_name_with_modelr   r   private_fieldsr2  r!   anyr-   r   use_in_migrationsrH  _set_creation_counter_base_manager_default_managerManagerr%   r8   r#   )r  r%   r&  rw   r   rs   er   utitr   r   r   flattened_basesr   r   manager_namesdefault_manager_shimmanagernew_managerrd  s    `                  @r&   r  zModelState.from_model   s0    [- 	 	Eund33  %11 :D
tU[[]]34444   i )))	    	7  z
MM4"78888    #) !DD!K333A	   ! 	E 	ED,,,333,,,34EFB$'(:2(>(>$?$?GDMM---34DEB$'(:2(>(>$?$?GDMMY&&JJek6IJJJG!( = =$z =!55e<<<)0GI&&]**. ./4{/F. . .GM** %*K$>t$DGDM  	1U % %'>>% [[011 6
 6
$)K$>6
 6
 6
 
 
 /0	 	 	 	 	 !e$$%%+K+K+K+K
 
 

  
 
'
 
 
 
 

  
 
RW
 
 
 
 
 	$ \OE#{+ 	9 	9G|},,* "i00113333E///7e>T3T3T$n..$+M!#*< e444+6(gl+++OOW\;78888 $89:::H sK!K#
 
 	
s0   
)A44
B%>"B  B% )C**
D4"DDc              #     K   t          | j        d           }|D ]d\  }}|                                \  }}}}}|r(t          |          }	||	                                fV  It          |          }
| |
|i |fV  edS )z-Deep-clone the managers using deconstruction.c                     | d         j         S )Nr   )creation_counter)r  s    r&   rh  z/ModelState.construct_managers.<locals>.<lambda>  s    ad>S r(   ri  N)r2  r   deconstructr   
as_manager)rU   sorted_managersmgr_namer  r  manager_pathqs_pathargskwargsqs_classmanager_classs              r&   construct_managerszModelState.construct_managers  s       !4S4STTT!0 	? 	?Hg>E>Q>Q>S>S;JgtV ?(11 3 3 5 555555 -l ; ;t >v > >>>>>>	? 	?r(   c           
          |                      | j        | j        t          | j                  t          | j                  | j        t          | j                            S )z(Return an exact copy of this ModelState.)r#   rs   rw   r   r   r   )	r?  r#   rs   r   rw   r   r   rg   r   rZ   s    r&   rr   zModelState.clone  sU    ~~n$$ &&*$-((  

 

 
	
r(   c                    | j         d| j        }t          dd|          }	 t          fd| j        D                       }n%# t
          $ r t          d| j                  w xY wd | j                                        D             }||d<   d|d<   |	                    | 
                                           t          | j        ||          S )	zACreate a Model object from our current state into the given apps.)r#   r   Metar+   c              3   p   K   | ]0}t          |t                    r                    |          n|V  1d S rX   )r   r   r   )r.   r   r   s     r&   r/  z$ModelState.render.<locals>.<genexpr>  sW         *4D#)>)>H%%%D     r(   z&Cannot resolve one or more bases from c                 >    i | ]\  }}||                                 S r+   r   )r.   rs   r   s      r&   r  z%ModelState.render.<locals>.<dictcomp>  s&    KKKeekkmmKKKr(   __fake__r  )r#   r   typer!   r   r   r   rw   rh   r   r  rs   )rU   r   meta_contentsmetar   bodys    `    r&   rC  zModelState.render  s    '+ndSSdlSFB..	     J    EE  	 	 	##>BjjJ  	
 LKt{7H7H7J7JKKKV'\ 	D++--...DIud+++s    A "A(c                 t    | j         d         D ]}|j        |k    r|c S t          d|d| j                  )Nr   zNo index named 
 on model r   rs   r8  )rU   rs   r   s      r&   get_index_by_namezModelState.get_index_by_name  sP    \), 	 	EzT!! "jDDD$))LMMMr(   c                 t    | j         d         D ]}|j        |k    r|c S t          d|d| j                  )Nr   zNo constraint named r  r  )rU   rs   r   s      r&   get_constraint_by_namez!ModelState.get_constraint_by_name  sS    ,}5 	" 	"J$&&!!!! 'jtyyQRRRr(   c                 B    d| j         j        d| j        d| j        dS )N<z: 'r   z'>)r?  r  r#   rs   rZ   s    r&   __repr__zModelState.__repr__  s(     "&."9"9"94>>>4999UUr(   c           
         | j         |j         k    o| j        |j        k    ot          | j                  t          |j                  k    ot	          d t          t          | j                                                  t          |j                                                            D                       o/| j        |j        k    o| j	        |j	        k    o| j
        |j
        k    S )Nc              3      K   | ]M\  \  }}\  }}||k    o9|                                 d d         |                                 d d         k    V  NdS )r   N)r  )r.   k1f1k2f2s        r&   r/  z$ModelState.__eq__.<locals>.<genexpr>  sv        &HRhr2 bIR^^--abb1R^^5E5Eabb5II     r(   )r#   rs   r    rw   allzipr2  rh   r   r   r   r  s     r&   r  zModelState.__eq__  s    ^u. 2ej(2T[!!S%6%662   *-4;,,..//5<--//00+ +    2 .2 u{*2 %.0	
r(   )NNNr  )r  r  r  r  rV   r   r^   rY  r  r  r  rr   rC  r  r  r  r  r+   r(   r&   r  r    s          KO$ $ $ $L ! ! _!' ' '
 H
 H
 H
 [H
T? ? ?
 
 
, , ,2N N NS S SV V V
 
 
 
 
r(   r  )r   )1rH  collectionsr   
contextlibr   	functoolsr   django.appsr   django.apps.registryr   r   r0  django.confr	   django.core.exceptionsr
   	django.dbr   django.db.migrations.utilsr   r   django.db.modelsr   django.db.models.fields.relatedr   django.db.models.optionsr   r   django.db.models.utilsr   django.utils.functionalr   django.utils.module_loadingr   django.utils.versionr   
exceptionsr   utilsr   r'   rA   rF   rM   rO   r  r	  r  r+   r(   r&   <module>r     s    # # # # # # % % % % % %       ! ! ! ! ! ! % % % % % % 4 4 4 4 4 4             4 4 4 4 4 4       J J J J J J J J ) ) ) ) ) ) K K K K K K F F F F F F F F 3 3 3 3 3 3 3 3 3 3 3 3 5 5 5 5 5 5 1 1 1 1 1 1 ) ) ) ) ) ) # # # # # #= = = =  0  D D D2dQ dQ dQ dQ dQ dQ dQ dQN7 7 7 7 7I 7 7 7 o o o o o o o odW
 W
 W
 W
 W
 W
 W
 W
 W
 W
r(   