
    hY                     h   S SK r S SKJr  S SKJr  S SKJr  S SKJr  S SK	J
r
  S SK	Jr  S SKJr  S S	KJr  S S
KJr  S SKJrJr  S SKJr  S SKJr  S SKJrJr  S SKJr  S SKJ r   S SK!J"r"  S SK#J$r$  SSK%J&r&  SSK'J(r(  S"S jr)S r*S r+S r, " S S5      r- " S S\5      r. " S S\
5      r/ " S  S!5      r0g)#    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_relationc                     [        U [        5      (       a2  U R                  SS5      n[        U5      S:X  a  [	        U5      $ XS   4$ U R
                  R                  U R
                  R                  4$ )N.r      r   )
isinstancestrsplitlentuple_meta	app_label
model_name)modelr"   r   s      L/var/www/html/env/lib/python3.13/site-packages/django/db/migrations/state.py_get_app_label_and_model_namer&      s^    %C#"5zQuU|IYa4II{{$$ekk&<&<<<    c                 T   U R                  5        Vs/ s H&  n[        U[        R                  5      (       d  M$  UPM(     nn[	        5       nU R
                  R                  SSS9 H|  nUR                  (       d  M  UR                  c  M%  [        UR                  [        5      (       a  MF  UR                  UR                  5        UR                  UR                  5        M~     U R
                  nUR                  (       a   X;   a  UR                  UR                  5        U$ s  snf )zEReturn all models that have a direct relationship to the given model.T)include_parentsinclude_hidden)__subclasses__
issubclassr   Modelsetr!   
get_fieldsis_relationrelated_modelr   r   addr$   appendproxyconcrete_model)msubclassrelated_modelsrelated_fields_modelsfoptss         r%   _get_related_modelsr<   !   s     ((**Hh- 	*  
  EWWTJMMM+q44!%%agg.!!!//2 K 77Dzza0d112's
   #D%D%c                     [        U 5       Vs1 s H/  nUR                  R                  UR                  R                  4iM1     sn$ s  snf )ze
Return a list of typical (app_label, model_name) tuples for all related
models for the given model.
)r<   r!   r"   r#   )r$   rel_mods     r%   get_related_models_tuplesr?   9   sG     +511G 
	 	 '--":":;1  s   6Ac                 \   [        5       n[        U 5      nU Hc  nUR                  R                  UR                  R                  pTXE4U;   a  M7  UR                  XE45        UR                  [        U5      5        Me     XR                  R                  U R                  R                  41-
  $ )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.
)r.   r<   r!   r"   r#   r2   extend)r$   seenqueuer>   rel_app_labelrel_model_names         r%   get_related_models_recursiverF   D   s     5D&EMM##MM$$ & *d2-01(12  KK))5;;+A+ABCCCr'   c                   &   \ rS rSrSrS(S jr\S 5       rS rS r	S r
S)S	 jrS
 rS rS rS rS rS rS rS rS rS rS rS rS rS*S jrS*S jrS+S jrS rS r S)S jrS)S jrS r S r!S  r"S! r#S" r$S# r%\&S$ 5       r'\(S% 5       r)S& r*S'r+g),ProjectState]   z
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                     U=(       d    0 U l         Uc  [        5       nO[        U[        5      (       d   eX l        SU l        S U l        g NF)r   r.   r   	real_apps
is_delayed
_relations)selfr   rL   s      r%   __init__ProjectState.__init__d   s@    lIi----"r'   c                 T    U R                   c  U R                  5         U R                   $ N)rN   resolve_fields_and_relationsrO   s    r%   	relationsProjectState.relationsp   s"    ??"--/r'   c                     UR                   UR                  4nXR                  U'   U R                  b  U R	                  U5        SU R
                  ;   a  U R                  " U6   g g Nr   )r"   
name_lowerr   rN   resolve_model_relations__dict__reload_model)rO   model_state	model_keys      r%   	add_modelProjectState.add_modelv   s[    ));+A+AA	!,I??&((3T]]"y) #r'   c                    X4nU R                   U	 U R                  bp  U R                  R                  US 5        [        U R                  R	                  5       5       H-  u  pEUR                  US 5        U(       a  M   U R                  U	 M/     SU R
                  ;   a4  U R                  R                  " U6   U R                  R                  5         g g rY   )	r   rN   poplistitemsr\   r   unregister_modelclear_cache)rO   r"   r#   r_   related_model_keymodel_relationss         r%   remove_modelProjectState.remove_model~   s    )	KK	"??&OO	406:4??;P;P;R6S2!##It4&(9: 7T T]]"II&&	2 II!!#	 #r'   c                    UR                  5       nUR                  5       nU R                  X4   R                  5       nX6l        X`R                  X4'   X4nU SU 3n[	        5       n	[        X5       H  u  ppS nUR                  (       a   UR                  5       nXR                  l        UR                  (       a#  Uc  UR                  5       nXR                  l	        U(       d  Mv  XR                  U'   U	R                  U
R                  U
R                  45        M     U R                  bz  X4nX4nXR                  ;   a(  U R                  R                  U5      U R                  U'   U R                  R!                  5        H  nUU;   d  M  UR                  U5      UU'   M!     U R#                  U	SS9  U R%                  X5        U R'                  XSS9  g )Nr   Tdelay)lowerr   clonenamer.   r   toremote_fieldr$   throughfieldsr2   r"   rZ   rN   rc   valuesreload_modelsrj   r]   )rO   r"   old_namenew_nameold_name_lowernew_name_lowerrenamed_modelold_model_tuplenew_remote_model	to_reloadr^   rq   field	referencechanged_fieldold_name_keynew_name_keyri   s                     r%   rename_modelProjectState.rename_model   s   !)!)I$=>DDF%1>I-.$5'[(4E	3A4
/Ku !M|| %3C**0   ($)KKMM5E**2}+8""4({44k6L6LMN4
 ??&$4L$4L.040C0CL0Q-#'??#9#9#;?24C4G4G4UOL1 $< 	9D1)4)4@r'   c                     U R                   X4   n0 UR                  EUEUl        U(       a,  U H&  nXc;  d  M
  UR                  R                  US5        M(     U R                  XSS9  g )NFTrm   )r   optionsrc   r]   )rO   r"   r#   r   option_keysr^   keys          r%   alter_model_options ProjectState.alter_model_options   si    kk)"78@!4!4@@"%''++C7 # 	)t<r'   c                    U R                   X4   nUR                  R                  U5      =n(       a:  U Vs/ s H  n[        U5      [        U5      :w  d  M  UPM!     snUR                  U'   U R	                  XSS9  g s  snf NTrm   )r   r   getr    r]   )rO   r"   r#   option_namevalue_to_remover^   objsobjs           r%   remove_model_options!ProjectState.remove_model_options   s}    kk)"78&&**;7747#0#uSzU?5K'Kt0K, 	)t<0s   A>A>c                 d    U R                   X4   n[        U5      Ul        U R                  XSS9  g r   )r   rd   managersr]   )rO   r"   r#   r   r^   s        r%   alter_model_managers!ProjectState.alter_model_managers   s2    kk)"78#H~)t<r'   c                     U R                   X4   n/ UR                  U   QUPUR                  U'   U R                  XSS9  g r   )r   r   r]   )rO   r"   r#   r   r   r^   s         r%   _append_optionProjectState._append_option   sK    kk)"78+S[-@-@-M+Ss+SK()t<r'   c                     U R                   X4   nUR                  U   nU Vs/ s H  owR                  U:w  d  M  UPM     snUR                  U'   U R                  XSS9  g s  snf r   )r   r   rq   r]   )rO   r"   r#   r   obj_namer^   r   r   s           r%   _remove_optionProjectState._remove_option   sd    kk)"78"";/;?+X4C88xCWC4+XK()t< ,Ys
   A"A"c                 *    U R                  XSU5        g Nindexesr   )rO   r"   r#   indexs       r%   	add_indexProjectState.add_index   s    I9eDr'   c                 *    U R                  XSU5        g r   r   )rO   r"   r#   
index_names       r%   remove_indexProjectState.remove_index   s    I9jIr'   c                    U R                   X4   nUR                  S   n/ nU H:  nUR                  U:X  a  UR                  5       nXHl        UR	                  U5        M<     XuR                  S'   U R                  XSS9  g )Nr   Trm   )r   r   rq   rp   r3   r]   )	rO   r"   r#   old_index_namenew_index_namer^   r   new_indexesr   s	            r%   rename_indexProjectState.rename_index   s    kk)"78""9-Cxx>)iik)s#	  *5I&)t<r'   c                 *    U R                  XSU5        g Nconstraintsr   )rO   r"   r#   
constraints       r%   add_constraintProjectState.add_constraint   s    I=*Mr'   c                 *    U R                  XSU5        g r   r   )rO   r"   r#   constraint_names       r%   remove_constraintProjectState.remove_constraint   s    I=/Rr'   c                    U(       d  UR                  5       n[        Ul        OUnX4nX@R                  U   R                  U'   U R
                  b  U R                  XcU5        UR                  (       + nU R                  " USU06  g Nrn   )	rp   r   defaultr   ru   rN   resolve_model_field_relationsr0   r]   )rO   r"   r#   rq   r   preserve_defaultr_   rn   s           r%   	add_fieldProjectState.add_field   sv    KKME(EME)	.3I%%d+??&..yF%%%92E2r'   c                     X4nU R                   U   nUR                  R                  U5      nU R                  b  U R	                  XCU5        UR
                  (       + nU R                  " USU06  g r   )r   ru   rc   rN   r   r0   r]   )rO   r"   r#   rq   r_   r^   	old_fieldrn   s           r%   remove_fieldProjectState.remove_field   si    )	kk),&&**40	??&..y	J)))92E2r'   c                    U(       d  UR                  5       n[        Ul        OUnX4nU R                  U   R                  nU R
                  b\  UR                  U5      nUR                  (       a  U R                  XcU5        XGU'   UR                  (       a  U R                  XcU5        OXGU'   UR                  (       + =(       a    [        XX445      (       + n	U R                  " USU	06  g r   )rp   r   r   r   ru   rN   rc   r0   r   r   r]   )
rO   r"   r#   rq   r   r   r_   ru   r   rn   s
             r%   alter_fieldProjectState.alter_field	  s    KKME(EME)	Y'..??&

4(I$$229IN 4L  229EJ 4L
 %%% 
.Ad]/
 +
 	92E2r'   c           
      N   X4nU R                   U   nUR                  n UR                  U5      nXU'   UR                  5        HA  n	[        U	SS 5      n
U
(       d  M  [        U
 Vs/ s H  nX:X  a  UOUPM     sn5      U	l        MC     UR                  nS H;  nX;   d  M
  X    VVs/ s H  nU Vs/ s H  oU:X  a  UOUPM     snPM     snnX'   M=     Sn[        XX845      nU Hu  Gt nn	nSnUR                  (       d  M  UR                  u  nn[        USS 5      U:X  a  UUl        U(       d  ML  [        U Vs/ s H  nUU:X  a  UOUPM     sn5      U	l        Mw     U R                  bo  UR                  5       nUR                  5       nU R                  R                  5        H1  nUUU   ;   d  M  UU   R                  U5      n	UU	l        U	UU   U'   M3     U R"                  " US	U06  g ! [         a    [	        U SU SU S35      ef = fs  snf s  snf s  snnf s  snf )
Nr   z has no field named ''from_fields)index_togetherunique_togetherTF
field_namern   )r   ru   rc   KeyErrorr
   rv   getattrr    r   r   r   rr   r   	to_fieldsrN   ro   rq   r]   )rO   r"   r#   rx   ry   r_   r^   ru   foundr   r   from_field_namer   optiontogethernrn   
references_r   rs   r   to_field_namerz   r{   to_models                             r%   rename_fieldProjectState.rename_field#  sY   )	kk),##	JJx(E
 !x]]_E!%=K{$) 0;/:O %4$?_T/:%!	 % %%;F  %,O#$3 @HHx!hXA5xH$3# < #Dh5FG
$. QyE|||*3,,'i<t<H.6L+9&+ 2;1: )6(AH}T1:'EO %/ ??&%^^-N%^^-N OO224!Xi%88$Y/33NCE!/EJ:?HY'7	 5
 	92E2_  	#+Qzl*?zK 	 I#s/   G0 'H
)
H3HH=H"
0HHc                 J   U(       a  SU l         [        5       n U R                  R                  X5      nU(       a  [	        U5      nO[        U5      n U R                  X4   n[        5       nUR                  R                  5        Hn  nUR                  (       d  M  UR                  R                  [        :X  a  M6  [        UR                  U5      u  pUR!                  XR#                  5       45        Mp     UR%                  U5        U H^  u  p U R                  R                  X5      nU(       a  UR%                  [	        U5      5        MD  UR%                  [        U5      5        M`     UR!                  X45        U$ ! [         a     GN<f = f! [         a     M  f = f)NT)rM   r.   r   	get_modelr?   rF   LookupErrorr   ru   rv   r0   rs   r$   r   r&   r1   r2   ro   update)rO   r"   r#   rn   r8   	old_modelr^   direct_related_modelsr   rD   rE   	rel_models               r%   _find_reload_modelProjectState._find_reload_model[  s{   "DO
	I		++IBI !:9!E!=i!H kk9"9: !$ ''..0E   %%++/NN0M''1- &))=:N:N:P*QR 1 	34-B)MS II//N	 "))*CI*NO"))*Fy*QR .C 	I23Q  		:  s#   F F
FF
F"!F"c                 l    SU R                   ;   a$  U R                  XU5      nU R                  U5        g g rY   )r\   r   _reload)rO   r"   r#   rn   r8   s        r%   r]   ProjectState.reload_model  s1    T]]"!44YERNLL( #r'   c                     SU R                   ;   aH  [        5       nU H&  u  pEUR                  U R                  XEU5      5        M(     U R	                  U5        g g rY   )r\   r.   r   r   r   )rO   r   rn   r8   r"   r#   s         r%   rw   ProjectState.reload_models  sS    T]]" UN)/%	%%++I5I *0 LL( #r'   c                    U R                   R                  5          U H   u  p#U R                   R                  X#5        M"     S S S 5        / nU R                   R                   H2  nUR                  UR
                  4U;   d  M!  UR                  U5        M4     U H'  u  p# U R                  X#4   nUR                  U5        M)     U R                   R                  U5        g ! , (       d  f       N= f! [         a     Me  f = frS   )
r   bulk_updaterf   real_modelsr"   rZ   r3   r   r   render_multiple)rO   r8   rD   rE   states_to_be_renderedr^   s         r%   r   ProjectState._reload  s    YY""$1?-		**=I 2@ % !#  9900K%%{'='=>.P%,,[9 1
 .<)M:"kk-*GH &,,[9 .< 			!!"78- %$   s   'C! C2!
C/2
D ?D c                     [        U/UQ76 nUS   U R                  ;  a	  Xe;   a  XV   nU R                  U   nX0R                  U   R                  ;   a  X7U   ;  d   eXGU   U'   g Xr   U	 Xr   (       d  Xr	 g g )Nr   )r   rL   rN   r   ru   )rO   r$   r_   r   r   	concretesremote_model_keyrelations_to_remote_models           r%   update_model_field_relation(ProjectState.update_model_field_relation  s     ,E>I>Adnn49I9V(:$(OO4D$E!Y/666 y%IIII?Di0<)4Z@,7-8 8r'   c                     UR                   nU(       d  g Uc  U R                  5       u  pFU R                  UR                  UUUU5        [	        USS 5      nU(       d  g U R                  XqX#U5        g )Nrt   )rs   -_get_concrete_models_mapping_and_proxy_modelsr   r$   r   )rO   r_   r   r   r   rs   r   rt   s           r%   r   *ProjectState.resolve_model_field_relations  sy     ))MMOLI((	
 ,	48((
9	
r'   c                     Uc  U R                  5       u  p#U R                  U   nUR                  R                  5        H  u  pVU R	                  XXb5        M     g rS   )r   r   ru   re   r   )rO   r_   r   r   r^   r   r   s          r%   r[   $ProjectState.resolve_model_relations  sR    MMOLIkk),!,!3!3!9!9!;J..yeW "<r'   c                    U R                   R                  5        H,  nUR                  R                  5        H  u  p#X#l        M     M.     [        [        [
        [        5      5      U l        U R                  5       u  pEU H  nU R                  Xd5        M     U H!  nU R                  XF      U R                  U'   M#     g rS   )r   rv   ru   re   rq   r   r   dictrN   r   r[   )rO   r^   r   r   r   proxiesr_   s          r%   rT   )ProjectState.resolve_fields_and_relations  s    ;;--/K%0%7%7%=%=%?!
'
 &@ 0
 &gk4&@A!OOQ	"I((> # !I)-9M)NDOOI& !r'   c                 F    U R                  5       u  nn[        U5      nX$   $ rS   )r   r   )rO   r$   concrete_models_mappingr   r_   s        r%   get_concrete_model_key#ProjectState.get_concrete_model_key   s.     >>@	
#$U+	&11r'   c                     0 n0 nU R                   R                  5        HC  u  p4UR                  R                  S5      (       a  XBU'   U R	                  UU5      X'   M?  X1U'   ME     X4$ )Nr4   )r   re   r   r   _find_concrete_model_from_proxy)rO   r  proxy_modelsr_   r^   s        r%   r   :ProjectState._get_concrete_models_mapping_and_proxy_models  sy    "$&*kk&7&7&9"I""&&w//*5Y' 88$# (2 6?	2 ': '44r'   c                    UR                    Hq  n[        U[        5      (       d!  [        U[        R
                  5      (       d  M9  [        U5      nUR                  U5      nU(       d  Us  $ U R                  X5      s  $    g rS   )	basesr   r   r,   r   r-   r   r   r  )rO   r  r^   basebase_key
base_states         r%   r  ,ProjectState._find_concrete_model_from_proxy  se    %%DtS))Zfll-K-K'-H%))(3J77QQ &r'   c           	      0   [        U R                  R                  5        VVs0 s H  u  pXR                  5       _M     snnU R                  S9nSU R
                  ;   a  U R                  R                  5       Ul        U R                  Ul        U$ s  snnf )z*Return an exact copy of this ProjectState.r   rL   r   )rH   r   re   rp   rL   r\   r   rM   )rO   kv	new_states       r%   rp   ProjectState.clone%  sv     -1[[->->-@A-@TQAwwyL-@Ann
	 T]]"!YY__.IN#	 Bs   B
c                 d    U R                   (       a  SU R                  ;   a  U R                  S	 g g g rY   )rM   r\   rU   s    r%   clear_delayed_apps_cache%ProjectState.clear_delayed_apps_cache0  s'    ??v6f%  7?r'   c                 B    [        U R                  U R                  5      $ rS   )	StateAppsrL   r   rU   s    r%   r   ProjectState.apps4  s    55r'   c                     0 nUR                  SS9 H2  n[        R                  U5      nXBUR                  UR                  4'   M4     U " U5      $ )z3Take an Apps and return a ProjectState matching it.T)include_swapped)
get_models
ModelState
from_modelr"   rZ   )clsr   
app_modelsr$   r^   s        r%   	from_appsProjectState.from_apps8  sS     
__T_:E$//6KJU--{/E/EFG ; :r'   c                 t    U R                   UR                   :H  =(       a    U R                  UR                  :H  $ rS   r  rO   others     r%   __eq__ProjectState.__eq__A  s'    {{ell*Pt~~/PPr'   )rN   rM   r   rL   )NNrS   F)T),__name__
__module____qualname____firstlineno____doc__rP   propertyrV   r`   rj   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r]   rw   r   r   r   r[   rT   r  r   r  rp   r  r   r   classmethodr#  r(  __static_attributes__ r'   r%   rH   rH   ]   s    
  
*$ %AN===
=
=EJ=NS333463p0d)
)9498 
8XO 25$	R	& 6 6  Qr'   rH   c                   $    \ rS rSrSrS rS rSrg)AppConfigStubiE  zAStub of an AppConfig. Only provides a label and a dict of models.c                 8    S U l         0 U l        Xl        Xl        g rS   )r   r   labelrq   )rO   r7  s     r%   rP   AppConfigStub.__init__H  s    	 
	r'   c                 T    U R                   R                  U R                     U l        g rS   )r   
all_modelsr7  r   rU   s    r%   import_modelsAppConfigStub.import_modelsQ  s    ii**4::6r'   )r   r7  r   rq   N)r+  r,  r-  r.  r/  rP   r;  r2  r3  r'   r%   r5  r5  E  s    K7r'   r5  c                   X   ^  \ rS rSrSrS
U 4S jjr\S 5       rS rS r	S r
S rS	rU =r$ )r  iU  zc
Subclass of the global Apps registry class to better handle dynamic model
additions and removals.
c           	        > / U l         U H]  n[        R                  " U5      nUR                  5        H0  nU R                   R	                  [
        R                  USS95        M2     M_     UR                  " 5        Vs1 s H  owR                  iM     nn[        / UQUQ5       V	s/ s H  n	[        U	5      PM     n
n	[        TU ]1  U
5        S U l        S U l        U R                  / UR                  " 5       QU R                   Q5        SSKJn  U(       a  [%        [&        R(                  5      1O	[+        5       nU" XS9nU(       a!  [-        SR/                  S U 5       5      5      eg s  snf s  sn	f )NT)exclude_relsr   )_check_lazy_references)ignore
c              3   8   #    U  H  oR                   v   M     g 7frS   )msg).0errors     r%   	<genexpr>%StateApps.__init__.<locals>.<genexpr>}  s     &EfUyyfs   )r   global_appsget_app_configr  r3   r  r   rv   r"   sortedr5  superrP   _lockready_eventr   django.core.checks.model_checksr@  r   r	   AUTH_USER_MODELr.   
ValueErrorjoin)rO   rL   r   ignore_swappabler"   appr$   r^   
app_labelsr7  app_configsr@  rA  errors	__class__s                 r%   rP   StateApps.__init__[  sW    "I,,Y7C)  ''
(=(=eRV(=(WX * #
 @F}}O++
O.45Ny5N:5N.O
.OUM% .O 	 
 	%
 
Bv}}B1A1ABC 	K =Mh6678RURW 	 (<TYY&Ef&EEFF + P
s   ?E)'E.c              #      #    U R                   nSU l          S v   Xl         U R                  5         g ! Xl         U R                  5         f = f7frK   )readyrg   )rO   r[  s     r%   r   StateApps.bulk_update  sD      


	J Js   A2 AA

Ac                 v   U(       d  g U R                  5          UnU(       a\  / nU H  n UR                  U 5        M     [	        U5      [	        U5      :X  a  [        SU< S[        5       < S35      eUnU(       a  M\  S S S 5        g ! [         a    UR                  U5         M  f = f! , (       d  f       g = f)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   r3   r   r   )rO   model_statesunrendered_modelsnew_unrendered_modelsr$   s        r%   r   StateApps.render_multiple  s    
  ,#(*%.E<T* /
 ,-5F1GG+ 12B2DF  %:!! $#   - <-44U;<  s.   B*BAB*B'#B*&B''B**
B8c                    [        / 0 5      n[        R                  " U R                  5      Ul        U R                   H2  n[        U5      nXl        UR                  5         X1R                  U'   M4     U R                  Ul        U$ )z Return a clone of this registry.)	r  copydeepcopyr:  rV  r5  r   r;  r   )rO   rp   r"   
app_configs       r%   rp   StateApps.clone  sq    "b!==9))I&y1J#O$$&+5i(	 * !,,r'   c                 b   X R                   U   UR                  R                  '   XR                  ;  a+  [	        U5      U R                  U'   X R                  U   l        X R                  U   R                  UR                  R                  '   U R                  U5        U R                  5         g rS   )	r:  r!   r#   rV  r5  r   r   do_pending_operationsrg   )rO   r"   r$   s      r%   register_modelStateApps.register_model  s    =B	"5;;#9#9:,,,*7	*BDY'/3Y',EJ#**5;;+A+AB""5)r'   c                 z     U R                   U   U	 U R                  U   R                  U	 g ! [         a     g f = frS   )r:  rV  r   r   )rO   r"   r#   s      r%   rf   StateApps.unregister_model  sC    		*:6  +22:> 		s   *- 
::)rM  r[  rN  r   r*  )r+  r,  r-  r.  r/  rP   r   r   r   rp   rj  rf   r2  __classcell__)rX  s   @r%   r  r  U  s<    
"GH 	 	:8 r'   r  c                   x    \ rS rSrSr SS jr\S 5       rS r\	SS j5       r
S rS	 rS
 rS rS rS rS rSrg)r  i  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           
         Xl         X l        [        U5      U l        U=(       d    0 U l        U R                  R                  S/ 5        U R                  R                  S/ 5        U=(       d    [        R                  4U l        U=(       d    / U l	        U R                  R                  5        H  u  p'[        US5      (       a  [        SU-  5      eUR                  (       aD  [        UR                  S5      (       a)  [        SU R                    SU R                   SU S35      eUR                  (       d  M  [        UR                   R"                  S5      (       d  M  [        SU R                    SU R                   SU S	35      e   U R                  S    H"  nUR                  (       a  M  [        S
U-  5      e   g )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"   rq   r   ru   r   
setdefaultr   r-   r  r   re   hasattrrQ  r0   r1   many_to_manyrs   rt   )	rO   r"   rq   ru   r   r  r   r   r   s	            r%   rP   ModelState.__init__  s    #	6l}"	2.r2-v||o
 B;;,,.KDug&& MPTT    WU-@-@'%J%J ..)499+Qtf =)) 
 !!!ge.@.@.H.H'&R&R ..)499+Qtf =00  /( \\),E::: +-23  -r'   c                 6    U R                   R                  5       $ rS   )rq   ro   rU   s    r%   rZ   ModelState.name_lower  s    yy  r'   c                 d    US:X  a  U R                   R                  SU5      nU R                  U   $ )N_orderorder_with_respect_to)r   r   ru   )rO   r   s     r%   	get_fieldModelState.get_field  s0    !))*A:NJ{{:&&r'   c           
      V	  ^^ / nTR                   R                   Hl  n[        USS5      (       a	  U(       a  M  [        U[        R
                  5      (       a  M?  UR                  n UR                  XTR                  5       45        Mn     U(       dJ  TR                   R                   H0  nUR                  n UR                  XTR                  5       45        M2     0 n[         GH&  nUS;   a  M  UTR                   R                  ;   d  M(  US:X  a1  TR                   R                  S   n[        [!        U5      5      Xu'   M_  US	:X  af  TR                   R"                   V	s/ s H  oR                  5       PM     n
n	U
 H'  nUR                  (       a  M  UR%                  T5        M)     XS	'   M  US
:X  a:  TR                   R&                   Vs/ s H  oR                  5       PM     snUS
'   GM  TR                   R                  U   Xu'   GM)     U(       a  S H  nX;   d  M
  X}	 M     OFUR)                  S5      TR                   R*                   Vs1 s H  oDR                  iM     sn;   a  US	 U4S jm[-        [        T" T5      5      U4S jS9n[/        S U 5       5      n[1        S U 5       5      (       d  [        R2                  4n/ n[        5       nSnTR                   R4                   H  nUR                  U;   a  M  UR6                  (       a'  [8        R8                  " U5      nUR;                  5         OiUTR<                  L d  UTR>                  L aI  [        R@                  " 5       nURB                  Ul!        UR                  Ul        UTR>                  L a  UnOM  URE                  UR                  5        UR                  UR                  U45        M     USU4/:X  a  / nU " TR                   RF                  TR                   R                  UUUU5      $ ! [         a0  n[        SU< STR                   R                  < SU< 35      eSnAff = f! [         a0  n[        SU< STR                   R                  < SU< 35      eSnAff = fs  sn	f s  snf s  snf )z3Given a model, return a ModelState representing it.rs   NzCouldn't reconstruct field z on z: zCouldn't reconstruct m2m field )r   r"   r   r   r   )r   ry  ry  c                    > / nU R                    HY  n[        US5      (       a4  UR                  R                  (       a  UR	                  T" U5      5        MH  UR                  U5        M[     U$ )Nr!   )	__bases__rr  r!   abstractrA   r3   )r$   r  r  flatten_basess      r%   r  ,ModelState.from_model.<locals>.flatten_basesG  sS    E4))djj.A.ALLt!45LL&	 (
 Lr'   c                 :   > TR                   R                  U 5      $ rS   )__mro__r   )xr$   s    r%   <lambda>'ModelState.from_model.<locals>.<lambda>V  s    U]]5H5H5Kr'   r   c              3   t   #    U  H.  n[        US 5      (       a  UR                  R                  OUv   M0     g7f)r!   N)rr  r!   label_lowerrE  r  s     r%   rG  (ModelState.from_model.<locals>.<genexpr>Z  s2      
' (/tW'='=TZZ##4G's   68c              3      #    U  H6  n[        U[        5      =(       d    [        U[        R                  5      v   M8     g 7frS   )r   r   r,   r   r-   r  s     r%   rG  r  _  s.      
RW$Zc"Djv||&DDRWs   >A objects)$r!   local_fieldsr   r   r   OrderWrtrq   r3   rp   	TypeErrorr7  local_many_to_manyobject_namer   original_attrsr.   r   r   set_name_with_modelr   r   private_fieldsrK  r    anyr-   r   use_in_migrationsrd  _set_creation_counter_base_manager_default_managerManagerr$   r2   r"   )r!  r$   r?  ru   r   rq   er   utidxr   r   conr   flattened_basesr  r   manager_namesdefault_manager_shimmanagernew_managerr  s    `                   @r%   r   ModelState.from_model  s    [[--Eund33%11::D
t[[]34 ." 77zz
MM4"78 8 !MD,,333,,334EFB$'(:2(>$?GMY&6;kk6I6IJ6Isyy{6IGJ!($zzz!55e< ") *1I&]*/4{{/F/F./F		/F.GM* %*KK$>$>t$DGM' ", C> D [[01$)KK$>$>6
$>5JJ$>6
 
 /0	 !e$%+K

  
'
 

  
RW
 
 
 \\OE#{{++G||},**"ii0113E///7e>T>T3T$nn.$+MM!#*<< e444+6(gll+OOW\\;78% ,* $89::H KK!!KK##
 	
e   ))	  ! # !!KK33	 ( K.6
sB   ' P"8 Q!RR!R&"
Q,+QQ
R)+RRc              #      #    [        U R                  S S9nU HV  u  p#UR                  5       u  pEpgnU(       a   [        U5      n	X)R	                  5       4v   M@  [        U5      n
X*" U0 UD64v   MX     g7f)z-Deep-clone the managers using deconstruction.c                      U S   R                   $ )Nr   )creation_counter)r  s    r%   r  /ModelState.construct_managers.<locals>.<lambda>  s    ad>S>Sr'   r  N)rK  r   deconstructr   
as_manager)rO   sorted_managersmgr_namer  r  manager_pathqs_pathargskwargsqs_classmanager_classs              r%   construct_managersModelState.construct_managers  sx      !4ST!0H>E>Q>Q>S;JgV(1 3 3 555 -l ;t >v >>> "1s   A3A5c           
          U R                  U R                  U R                  [        U R                  5      [        U R
                  5      U R                  [        U R                  5      S9$ )z(Return an exact copy of this ModelState.)r"   rq   ru   r   r  r   )	rX  r"   rq   r   ru   r   r  rd   r   rU   s    r%   rp   ModelState.clone  sS    ~~nn$ &**$--(  

 
	
r'   c                   ^ 0 U R                   EnUR                  SS5        U R                  TS.UEn[        SSU5      n [	        U4S jU R
                   5       5      nU R                  R                  5        VVs0 s H  u  pgXgR                  5       _M     nnnXHS'   SUS	'   UR                  U R                  5       5        [        U R                  XX5      $ ! [         a    [        SU R
                  < 35      ef = fs  snnf )
zACreate a Model object from our current state into the given apps.r   N)r"   r   Metar3  c              3   t   >#    U  H-  n[        U[        5      (       a  TR                  U5      OUv   M/     g 7frS   )r   r   r   )rE  r  r   s     r%   rG  $ModelState.render.<locals>.<genexpr>  s2      &D *4D#)>)>%DH&s   58z&Cannot resolve one or more bases from __fake__r,  )r   rc   r"   typer    r  r   r   ru   re   rp   r   r  rq   )	rO   r   meta_optionsmeta_contentsmetar  rq   r   bodys	    `       r%   r^  ModelState.render  s     ($,,' 	)40&*nndSlSFB.	  JJ E 8<{{7H7H7JK7Jkkm#7JKV'\ 	D++-.DIIu++  	#>BjjJ 	
 Ls   C =D$C>c                     U R                   S    H  nUR                  U:X  d  M  Us  $    [        SU< SU R                  < 35      e)Nr   zNo index named 
 on model r   rq   rQ  )rO   rq   r   s      r%   get_index_by_nameModelState.get_index_by_name  s<    \\),EzzT! - D$))LMMr'   c                     U R                   S    H  nUR                  U:X  d  M  Us  $    [        SU< SU R                  < 35      e)Nr   zNo constraint named r  r  )rO   rq   r   s      r%   get_constraint_by_name!ModelState.get_constraint_by_name  s=    ,,}5J$&!! 6 tyyQRRr'   c                 p    SU R                   R                  < SU R                  < SU R                  < S3$ )N<z: 'r   z'>)rX  r+  r"   rq   rU   s    r%   __repr__ModelState.__repr__  s!    "&.."9"94>>499UUr'   c           
      d   U R                   UR                   :H  =(       Ga    U R                  UR                  :H  =(       a    [        U R                  5      [        UR                  5      :H  =(       a    [	        S [        [        U R                  R                  5       5      [        UR                  R                  5       5      5       5       5      =(       aY    U R                  UR                  :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ )Nc              3      #    U  H>  u  u  pu  p4X:H  =(       a'    UR                  5       S S UR                  5       S S :H  v   M@     g7f)r   N)r  )rE  k1f1k2f2s        r%   rG  $ModelState.__eq__.<locals>.<genexpr>  sO      +&HRhr IR^^-ab1R^^5Eab5III+s   AA)r"   rq   r   ru   allziprK  re   r   r  r   r&  s     r%   r(  ModelState.__eq__  s    ^^u. 2 2ejj(2T[[!S%662  *-4;;,,./5<<--/0+ 2 .2 u{{*2 %..0	
r'   )r"   r  ru   r   rq   r   )NNNr*  )r+  r,  r-  r.  r/  rP   r   rZ   rz  r1  r   r  rp   r^  r  r  r  r(  r2  r3  r'   r%   r  r    sj     KO$L ! !'
 E
 E
N?
,:NSV
r'   r  ) )1rd  collectionsr   
contextlibr   	functoolsr   django.appsr   django.apps.registryr   r   rI  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&   r<   r?   rF   rH   r5  r  r  r3  r'   r%   <module>r     s     # %  ! % 4   4  J ) K F 3 3 5 1 ) #=0D2eQ eQP7I 7 o odX
 X
r'   