
    hA&                        d dl Z d dl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mZmZmZ d dlmZ d d	lmZ d d
lmZmZm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e      Zd Zd Zy)    N)deepcopycopy)warn)apps)ObjectDoesNotExist)forms)ModelChoiceFieldModelMultipleChoiceFieldModelFormMetaclass	ModelForm)Field)Widget)	JSONFieldModelQuerySetc                   *    e Zd Zed        Zd ZddZy)InvisibleWidgetc                      y)NT )selfs    ?/home/dcms/DCMS/lib/python3.12/site-packages/entangled/forms.py	is_hiddenzInvisibleWidget.is_hidden   s        c                      y)NFr   )r   datafilesnames       r   value_omitted_from_dataz'InvisibleWidget.value_omitted_from_data   s    r   Nc                      y)N r   )r   r   valueattrsrenderers        r   renderzInvisibleWidget.render   s    r   )NN)__name__
__module____qualname__propertyr   r   r$   r   r   r   r   r      s     r   r   c                   (     e Zd ZdZeZd fd	Z xZS )EntangledFieldzs
    A pseudo field, which can be used to mimic a field value, which actually is not rendered inside the form.
    c                 (    t        |   |d|i| y )Nrequired)super__init__)r   r,   argskwargs	__class__s       r   r.   zEntangledField.__init__&   s    T<(<V<r   )F)r%   r&   r'   __doc__r   widgetr.   __classcell__r1   s   @r   r*   r*       s     F= =r   r*   c                   .     e Zd Z fdZed        Z xZS )EntangledFormMetaclassc                 z   |j                  dt        ddi              t        t        |d   dg             }t	        t        |d   di             }t	        t        |d   di             }|D ]  }t        |d      st        |j                  dg       |z   }t        |j                  di       j                         D ]2  \  }}	|j                  |g       }
|	D cg c]	  }||
vs| c}|
z   ||<   4  |j                         D ]  }|D ]  }||vs|||<     t        |d   dd       }	|rw|	t        j                  k(  s|	vt        t        |d   dg             }|j                         D ]*  }||   D cg c]	  }||vs| c}||<   t               ||<   , |	xs | j                  |||      |d   _        nt        |	      }t        t!        j"                  |j                                t        |      z
  }|j%                  t        |      t        |      z
         |j                         D ]1  }||   D cg c]	  }||v s| c}||<   ||   r
t               nd ||<   3 |j                         D ]  \  }}|s	|j'                  |        ||d   _        |D ]  }d ||<   	 t(        | U  | |||      }|j                         D ]2  }||   D ](  }||j,                  v rJ d	j/                  |||              4 ||j                  _        ||j                  _        ||j                  _        |S c c}w c c}w c c}w )
NMetar   untangled_fieldsentangled_fieldsretangled_fields_metafieldsexcludezRField {} listed in `{}.Meta.entangled_fields['{}']` is missing in Form declaration)
setdefaulttypelistgetattrr   hasattrr=   itemsvaluesr   
ALL_FIELDSsetkeysr*   _create_fields_optionr>   	itertoolschainupdateappendr-   __new__base_fieldsformatr;   r:   r<   )cls
class_namebasesr"   r:   r;   r<   basekeyr>   existing_fieldsfieldentangled_listeffields_to_delete
field_namefieldset
field_list	new_classmodelfield_namer1   s                       r   rO   zEntangledFormMetaclass.__new__,   s   fb"!56f7I2 NO#GE&M;Mr$RS#GE&M;Mr$RS  	@DtW%#*4::7I2#NQa#a #*4::7I2#N#T#T#V @KC&6&A&A#r&JOCI-.:?UZiMi-.0?-@$S)@	@ /557 	.N$ .--+-$R(.	. v$7)))V^ $'wuV}i'L#M "2"7"7"9 9J+;J+G4"'5XhKh4$Z0 )7(8E*%	9  d--.>@PRbc f$
  <#&y8H8O8O8Q'R#SVYZbVc#c  '',<(=H(MN"2"7"7"9 cJ+;J+G4"'5T\K\4$Z0 =MZ<X(8^bE*%c *:)?)?)A /%E:! ./ (0f$ / )
$(j!) GOCUEB	  0446 	O.? 
)"7"77gnn
O7	 ,<	(+;	(+;	(}-.$44s$   	L.!L.3	L3=L36	L8 L8c                     t        |      }|j                         D ]  }||z  }	 |t        |j                               z  }|D ]  }||v s|j                  |        |S )N)rB   rF   rI   remove)rR   r:   r;   r[   r>   	entangledrX   s          r   rJ   z,EntangledFormMetaclass._create_fields_optionx   sq    &')002 	 IiF	 $',,.//% 	%Ee$	% r   )r%   r&   r'   rO   classmethodrJ   r4   r5   s   @r   r7   r7   +   s    JX  r   r7   c                   (     e Zd Z fdZ fdZ xZS )EntangledModelFormMixinc                 Z   | j                   }d|v rC|d   r=|j                  di       }|j                  j                         D ]  \  }}|D ]  }t	        |d   |      }	 |j
                  |   j                  d      D ]  }	||	   }	 	 t        | j                  |   t              r<	 t        j                  |d         }
|
j                  j                  |d         ||<   t        | j                  |   t               r<	 t        j                  |d         }
|
j                  j                  |d         ||<   |||<     |j%                  d|       t'        | P  |i | y # t        t        f$ r Y +w xY w# t        t        f$ r Y Aw xY w# t        t"        t        f$ r Y \w xY w)	Ninstanceinitial.modelp_keys)pk__inpk)rn   )r=   getr;   rE   rC   r<   splitKeyError	TypeError
isinstancerP   r
   r   	get_modelobjectsfilterr	   r   r@   r-   r.   )r   r/   r0   optsri   r\   assigned_fieldsaf	referencepartr   r1   s              r   r.   z EntangledModelFormMixin.__init__   s   zzF:$6jjB/G/3/D/D/J/J/L 0+
O) 0B 'z(:J GI!$($9$9"$=$C$CC$H 8D(1$I8 "$"2"22"68PQ!$(NN9W3E$FE*/--*>*>'0': +? +GBK
 $D$4$4R$8:JK!$(NN9W3E$FE*/--*;*;y*;*OGBK '0-000 i1$)&)' %i0 ! ! !))4 ! ! !)*<iH ! !s6    (E&':E< :F&E98E9<FFF*)F*c           	         | j                   }t        | 	          |j                  D ci c]   }|| j                  v r|| j                  |   " }}|j
                  j                         D ]  \  }}| j                  r4t        | j                  |      rt        | j                  |      xs i ||<   ni ||<   |D ]  }|| j                  vr||   }|j                  |   j                  d      }|d d D ]  }	|j                  |	i       } |d   }	t        | j                  |   t              rt        | j                  |   t               rt| j                  |   j"                  j                   }
dj%                  |
j&                  |
j(                        t+        | j                  |   j-                  dd            d}nt        | j                  |   t.              rwt        | j                  |   t0              rZ| j                  |   j                   }
dj%                  |
j&                  |
j(                        | j                  |   j2                  d}n| j                  |   }|||	<      || _        y c c}w )	Nrj   z{}.{}rn   T)flat)rk   rl   )rk   rn   )r=   r-   _clean_formr:   cleaned_datar;   rE   rh   rD   rC   r<   rp   r@   rs   rP   r
   r   rk   rQ   	app_label
model_namerB   values_listr	   r   rn   )r   rw   fr   r\   rx   ry   bucketaf_partsr{   metar!   r1   s               r   r   z#EntangledModelFormMixin._clean_form   s_   zz **
D%%% t  ##
 

 ,0+@+@+F+F+H "	%'J}}
!C+24==*+M+SQSZ(+-Z(% %T...%j1004::3?$SbM 9D#..tR8F9|$$R(*B !2!22!6A,,R066<<D!(!P"& --b1==d=N#E   0 0 46FGJ%%b)5M  ,,R066D!(!P"//366E
 !--b1E$t9%"	%F )Q
s   %I4)r%   r&   r'   r.   r   r4   r5   s   @r   rf   rf      s    *>+) +)r   rf   )	metaclassc                       e Zd ZdZy)EntangledModelFormz>
    A convenience class to create entangled model forms.
    N)r%   r&   r'   r2   r   r   r   r   r      s    r   r   c                 R    ddl m} t        dt               |j	                  | |      S )N   utilsz7Please import 'get_related_object' from entangled.utils)r    r   r   DeprecationWarningget_related_objectscoper\   r   s      r   r   r      s$    	BDVW##E:66r   c                 R    ddl m} t        dt               |j	                  | |      S )Nr   r   z9Please import 'get_related_queryset' from entangled.utils)r    r   r   r   get_related_querysetr   s      r   r   r      s(    CEW %%eZ88r   ) rK   	tracebackr   r   warningsr   django.appsr   django.core.exceptionsr   djangor   django.forms.modelsr	   r
   r   r   django.forms.fieldsr   django.forms.widgetsr   django.db.modelsr   r   r   r   r*   r7   rf   r   r   r   r   r   r   <module>r      s         5   & ' 7 7	f 	=U =V/ VrK)(> K)\0) 79r   