
    .+hg                         d Z ddlZ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ZddlmZ ddlmZ ddlZddlT dd	lmZ  ee          d
z  Zedz  Zedz  Zd Zd Zd Zd ZdS )zP
    SPEC: https://bcrm.carbonsoft.ru/project/Document/DOC-011091#spec-011090-b
    N)defaultdictOrderedDict)sha1)chain)DictPath)*)isclasstmpz__autogen_models.pyz__autogen_models_tmp.pyc               #   l  K   dt           fd} dt           fd}t          d          g | t          d                    t          d           | t          d                     | t          d                     | t          d	                    }|D ]} ||          D ]}|d
v r|V  d S )Ndir_pathc              3      K   |                                  sd S t          |                                           D ]}|                                 r|V  d S N)is_dirsortediterdir)r   sub_paths     ./cmf/make_models.pyget_sub_dirsz)iter_models_modules.<locals>.get_sub_dirs5   sf         	Fx//1122 	 	H   	 	    c              3   r  K   | dz  | dz  fD ]}|                                 st          |                                          D ]p}|                                r	|j        dv s |j                            d          r;t          |j                  	                    dd          dz   |j
        z   V  qd S )Nfieldsmodels)z.pyz.pyc_/.)r   r   r   is_filesuffixname
startswithstrparentreplacestem)r   modules_dir_pathmodule_paths      r   get_modulesz(iter_models_modules.<locals>.get_modules<   s      !)(!2HX4E F 
	Y 
	Y#**,, %&6&>&>&@&@AA Y Y#++-- +2D2W2W#..s33 +,--55c3??#EHXXXXXXY
	Y 
	Yr   cmfzcmf/modulescommonmoduleszcustom/pluginszcustom/modules)zcmf.fields.base_fieldszcmf.models.base_modelr   )r   r(   base_dir_pathsbase_dir_pathmodule_names        r   iter_models_modulesr/   ,   s(     t    Yd Y Y Y Y 	U	d=))	*	* 	X 
d9oo	&	&	
 
d+,,	-	- 
d+,,	-	-N (  &;}55 	 	KQQQ	 r   c                  b  -. t                               d           t                              d           d } i }t                      D ]}t	          |           t
                              |d           }|j                                        D ]L\  }}t          
                    |          r-t          |t          j        j                  r | ||||           Mt          j         G d d                      -t          j         G -fdd                      }t#          |          }t#          t$                    }i }	t'                      }
|D ] }||         }||         }t	          d	|            d|_        d
D ]}||         D ]..j                            dd          r7d|_        t	          d.j         d.j         d.j         d.j         d	           .fd|j        D             |_        |j                            .           |j        D ]`}|                                D ]I}|j        |j        k    r7d|_        t	          d|j         d|j         d|j         d|j         d	            a|j        s*t	          d| d           |
                    |           Yd }|j        D ]}||j        r|j        }|j                                        D ]\  }}||j        vr -|||j                  |j        |<   t          |t          j        j                  r*| d}|t?          |          vr||j         vr
||j         |<   rt          |t          j        j!                  rn|j"        s|j#        sJ d| d|j         d            |$                                }||	vr1|j"        r|j        |j%        g|	|<   |j#        r|j%        |j        g|	|<   t          |t          j        j&                  r|j"        s|j#        sJ d| d|j         d            d }|j"        r#|j         |j'        (                                 }nC|j#        r<|j%        stS          d| d          |j%         |j*        (                                 }|r||                             ||g           Ґ |rt'                      }|+                                D ]q}|D ]l}tY          |tZ                    r|                    |           -dD ]<}|                    |t]                                D ]}|                    |           =mr|j                                        D ]\  }}||v |_/        "t           0                    t           j1         dtd          3                                           }|4                    d          5 }|5                    d           |5                    d           |5                    d           tm          |          D ]}t	          d	|            ||         }|j        s%|5                    d           |j        D ]/} |5                    d7                    | j                             0|5                    d 7                    |d!8                    d" |j        D                                            |5                    d#           tm          |j                  D ]u}|j        |         }|5                    d$| d%|j9         d|j:         d|j;         d&|j:         d|j;         d'           |j/        |5                    d(|j/         d)           v|j         D ]:}!|j         |!         }t          |t          j        j<                  rx|5                    d$|! d*|j=         d+t          j        j>        ?                    |j%                   d,|j@         d-|jA         d.           |jB        r|5                    d/           t          |t          j        jC                  rt|5                    d$|! d*|j=         d0|j@         d-|jA         d1d!8                    d2 |j        pg D                        d3           |jB        r|5                    d/           <tm          |          D ]}"||"         }#d4 |#D             }$t[          t%          tm          t'          d5 |$D                                                     }%t[          t%          tm          t'          d6 |#D                                                     }&|5                    d           d}'|#D ]}(|(d7         jD        rd}' n|5                    d8|" d9           |5                    d#           |5                    d:|' d)           |5                    d;|& d<           |5                    d=           |5                    d>           |5                    d?|% d<           |5                    d@           |5                    dA           |5                    dB           tm          |	          D ]>}"|	|"         }#|#\  })}*t          j        j>        ?                    |)          }+t          j        j>        ?                    |*          },|5                    d           |5                    d8|" dC           |5                    d#           |5                    dD|) dE           |5                    dF|+ dG           |5                    d>           |5                    dH|* dE           |5                    dI|, dG           |5                    dJ           |5                    dK           @|5                    d)           |E                                 |E                                 d d d            n# 1 swxY w Y   |F                    t                      d S )LNT)
missing_okc                    || vrg g g g g d| |<   |                     d          r#| |         d                             |           d S |                     d          r#| |         d                             |           d S |                     d          r#| |         d                             |           d S |                     d          r#| |         d	                             |           d S |                     d
          r#| |         d                             |           d S t          d                    |                    )N)r)   r*   r+   pluginscustomzcmf.r)   zcommon.r*   zmodules.r+   zcustom.plugins.r3   zcustom.modules.r4   ub   Неизвестный источник для импорта полей для моделей: {})r!   append	Exceptionformat)models_listpathr    objs       r   add_to_models_listz3make__autogen_models_py.<locals>.add_to_models_list]   s   {"" ! !K ??6"" 	Oe$++C00000__Y'' 		Oh'..s33333__Z(( 	Oi(//44444__.// 	Oi(//44444__.// 	Oh'..s33333  A  H  H  IM  N  N  O  O  Or   )packagec                   @    e Zd ZU dZeed<   eed<   eed<   dZeed<   dS )*make__autogen_models_py.<locals>.FieldDatau$   Данные поля для autogen
field_name
model_namemodel_moduleNui_form_visible)__name__
__module____qualname____doc__r"   __annotations__rB   bool r   r   	FieldDatar>      sF         22 $$$$$$r   rJ   c                       e Zd ZU dZdZeed<    ej        e	          Z
e	ed<    ej        e          Zeed<    ej        e          Zee f         ed<   dS )*make__autogen_models_py.<locals>.ModelDatau(   Данные модели для autogenNautogen)default_factory	hierarchy	id_fieldsr   )rC   rD   rE   rF   rM   rH   rG   dataclassesfieldlistrO   r   rP   dictr   r   r"   )rJ   s   r   	ModelDatarL      s         66+++DAAA	4AAA!2!2;!O!O!O	;OOO'8{'8'N'N'NS)^$NNNNNr   rU   zmodel_name )r4   r3   r+   r*   r)   abstractFzSkip model r   z due z is abstract!c                 4    g | ]}t          |          |S rI   )
issubclass).0mmodels     r   
<listcomp>z+make__autogen_models_py.<locals>.<listcomp>   s*    'd'd'dazZ_abOcOc'd'd'd'dr   !_idzfield z of z$ should have left=True or right=Trueu   У поля u-    не указана модель field.model)r   col1col2zw+z+# Autogenerated by manage.py make_models. 
zfrom cmf import fields
zfrom cmf import modelsz


z
import {}
zclass {}({}):
,c                 N    g | ]"}d                      |j        |j                  #S )z{}.{})r7   rD   rC   rY   rZ   s     r   r\   z+make__autogen_models_py.<locals>.<listcomp>   s*    eee1gnnQ\1:FFeeer   z    abstract = False
z
    class (z):
        """z
 field"""
z        ui_form_visible = 
z&(fields.CmfTUUID):
        caption = "z ID"
        foreign_key = "z.id"
        nullable = z
        unique = z.
        visible = False
        index = True
z        no_acl = True
z ID"
        nullable = z
        foreign_keys = [c              3   f   K   | ],}d t           j        j                            |           dV  -dS )'z.id'N)r)   r   
base_modelcamel2snakerc   s     r   	<genexpr>z*make__autogen_models_py.<locals>.<genexpr>  sB      !m!mUV"Pcj&;&G&G&J&J"P"P"P!m!m!m!m!m!mr   z+]
        visible=False
        index=True
c                 B    g | ]}|d          j         |d          j        S )   )leftr   rY   vvs     r   r\   z+make__autogen_models_py.<locals>.<listcomp>%  s)    #K#K#KR1
#KBqEL#K#K#Kr   c              3   $   K   | ]}|D ]}|V  d S r   rI   )rY   sis      r   rj   z*make__autogen_models_py.<locals>.<genexpr>&  s1      /[/[aYZ/[/[TU/[/[/[/[/[/[/[r   c              3   J   K   | ]}|d          j         |d          j        V  dS )rl   N)rightr[   rn   s     r   rj   z*make__autogen_models_py.<locals>.<genexpr>'  s3      .V.Vr"Q%+.Vr!u{.V.V.V.V.V.Vr   rl   zclass z(models.CmfGM2MModel):
z    custom = uR       left = fields.Field(fields.CmfGenericRelation, caption="Объект", models=z)
ud       left_id = fields.Field(fields.CmfTUUID, caption="ID Объекта", nullable=True, index=True)
uQ       # TODO: TODO1 сделать update *_cache при обновлении name
uU       right = fields.Field(fields.CmfGenericRelation, caption="Элемент", models=ug       right_id = fields.Field(fields.CmfTUUID, caption="ID Элемента", nullable=True, index=True)
ue       left_name_cache = fields.Field(fields.CmfStr256, caption="Имя объекта", nullable=True)
uh       right_name_cache = fields.Field(fields.CmfStr256, caption="Имя элемента", nullable=True)
z(models.CmfM2MModel):
uV       left = fields.Field(fields.CmfRelation, caption="Левый Объект", model="z")
uc       left_id = fields.Field(fields.CmfTUUID, caption="ID Левого Объекта", foreign_key="z!.id", nullable=True, index=True)
uY       right = fields.Field(fields.CmfRelation, caption="Правый Объект", model="uf       right_id = fields.Field(fields.CmfTUUID, caption="ID Правого Объекта", foreign_key="ur       left_name_cache = fields.Field(fields.CmfStr256, caption="Имя левого объекта", nullable=True)
uu       right_name_cache = fields.Field(fields.CmfStr256, caption="Имя правого объекта", nullable=True)
)Gmodels_orig_pathunlinkmodels_tmp_pathr/   print	importlibimport_module__dict__itemsinspectr   rX   r)   r   	BaseModelrQ   	dataclassr   rS   setrM   getrD   rC   rO   r5   __subclasses__addui_formr   CmfRelationBasedirrP   CmfM2Mrm   rt   m2m_model_cls_namer[   CmfGenericM2M
class_name
capitalize
ValueErrorbackrefvalues
isinstancer"   tuplerB   	with_namer    osgetpidopenwriter   r7   joinrA   r@   r?   CmfRelationcaptionrh   ri   nullableuniqueno_aclCmfGenericRelationr4   flushrename)/r;   models_dictr.   rA   obj_namer:   rU   models_datagm2mm2mabstract_modelsr@   
model_data
model_list
model_typerZ   subr   	fieldnamerR   id_fieldnamer   gm2m_keyui_form_fieldsui_form_groupui_fieldlist_keyui_field_namer?   
field_datamodels_orig_tmp_path
model_file	imp_modelid_field_namekvright_choices_nestedright_choicesleft_choicesr4   valleft_model_nameright_model_nameleft_name_snakeright_name_snakerJ   r[   s/                                                @@r   make__autogen_models_pyr   Y   s   t,,,d+++O O O2 K*,, L Lk ..{D.II)288:: 	L 	LMHc s## L
3
8L(M(M L"";XsKKK		L % % % % % % % % O O O O O O O O O O i((KtD
CeeO! MJ MJ
 ,
 ,
(J(()))!
K 	3 	3J#J/ 3 3>%%j%88 B).J&  A(8  A  A5>  A  APUP`  A  Achcq  A  A  A  B  B  B'd'd'd'd:3G'd'd'd
$$++E22223 % 	 	A''))  :--).J&hhhqzhhhhY\Yehhhiii! 	-
---...
+++% !	: !	:A19)$%HNN$4$4 : : 	5 J$5553<9Y
TUT`3a3aJ%i0eSZ%?@@ :&/#4#4#4L#3q6611l*J^6^6^=B
,\:sz'899 :!J a%+ a a```
```a a a).)A)A)C)C&)44 : P78z5;6OC 233"[ P7<{AJ6OC 23sz'?@@ :!J a%+ a a```
```a a a#Hz P&'j#Q%2B2M2M2O2O#Q#Q P${ r",-pE-p-p-p"q"qq&+k#O5=3K3K3M3M#O#O :X--q%j999=:>  	J UUN!(!1!1 B B - B BH!(C00 B&**84444 )A B BH19h1P1P B B . 2 2= A A A ABBB +5*;*A*A*C*C J J&
J-7>-I
**+559I9N6^6^QSQZQZQ\Q\6^6^__		"	"4	(	( GJGHHH34441222 -- 2	I 2	IJ,
,,---$Z0J% X&&&'1 M M	  !5!5i6J!K!KLLLL!((HHeePZPdeeeffh hi i i 5666$Z%677 f f
'.z:
   "" ""/" "2<2G" "JTJ_" "!" "$.$9" " "    -9$$%dJD^%d%d%deee!+!5 I I",];eSZ%;<< I$$ && &M& & 
-99%+FF& & N	& &
 ,& & &    | I"(()GHHHsz'DEE I$$ && &M& & N& & ,	& &
 !m!mZ_ZfZljl!m!m!mmm& & &    | I"(()GHHH3I<  $	 $	AQA#K#K1#K#K#K VC/[/[;O/[/[/[,[,[%\%\ ] ]^^MtF3.V.VQ.V.V.V+V+V$W$WXXYYLX&&&F  q6= !FE AaAAABBB67777V777888veqvvv   x   e   zhuzzz   {   y   |   
  	 	AAA01-O-!j3??PPO"z4@@AQRRX&&&@a@@@AAA6777~ix~~~    j  wF  j  j  j   e    Cl|  C  C  C    n  zJ  n  n  n    G    J   
 	OG G G G G G G G G G G G G G GR  011111s   X2p

ppc                  	   dd l } t                              t                                                     dd lm} |                     t                     i }t                      g }t          t          |                    D ]}t          t          |          }t          |t                    rt          |t           j        j                  rt          |t           j        j                  rk|                    |                               |j                   |j        D ]+}t          |t           j        j                  r
|||j        <   ,i }i }|D ]1}t          |dd           r|j        ||j        <   |j        ||j        <   2t1          |          }	fd|                                D             |z   }h dddhh ddhd	 fd
d fd	d}
t                      }|D ]O}|
t1          |j                  z  }
|j                                        D ]}|                    |j                   Pfd|D             }t;          dt1          |           d|	 d|
 dt1          |                      t<                              t<                               tB          j"        #                    tH          j%        d          g          d          }ddd|j&        d<   |D ]^}|j        '                                D ]B\  }}|dvr9	 tQ          j)        |           #  t;          d|j         d| d|             xY wC_|*                    d          +                    |t           j        |||t          t          tX                    }|*                    d          +                    |t           j        |||t          t          tX                    }tZ          dz  }|.                    |j/         dtB          0                                           }|                    |           tZ          dz  }|.                    |j/         dtB          0                                           }|                    |           |1                    |           |1                    |           d S )!Nr   ui_namec                 &    g | ]}|j         v|S rI   )r   )rY   r[   concrete_models_namess     r   r\   z+make__autogen_models_ts.<locals>.<listcomp>  s.       %2BJ_2_2_2_2_2_r   >   autostepscaler   commentrh   r   
max_lengthnested_fieldsclass_full_namefield_options_list_limitr   visible>   maxminrm   r   rt   r   r4   r   choicesvirtuallinkablereadonlyplaceholderoptions_list_paramsoptions_list_query_allrB   c                 *   d}t          | t          j        j                  rd}nt          | t          j        j                  rd}nft          | t          j        j                  rd}nCt          | t          j        j                  rd}n t          | t          j        j                  rd}nt          | t          j        j                  rd}nt          | t          j        j	        t          j        j
        f          rd}nt          | t          j        j                  rd	}nt          | t          j        j        t          j        j        f          rd
}nTt          | t          j        j                  rd}n2t          | t          j        j        t          j        j        f          rd}t#          | dd           p t%          | d          ot#          | d          g}|r|d         |S t          | t          j        j        t          j        j        f          r| dd                    |           dS t          | t          j        j        t          j        j        t          j        j        f          r| dd                    |           dS |S )NCmfFieldCmfTextFieldCmfPhoneFieldCmfStrFieldCmfBigIntFieldCmfIntFieldCmfBoolFieldCmfDateTimeFieldCmfDateTimeRangeFieldCmfRelationFieldCmfM2MFieldCmfBackrefFieldr   r[   r   <z | >z<(z)[]>)rX   r)   r   CmfTextCmfPhoneCmfStr	CmfBigIntCmfIntCmfBoolCmfDateCmfDateTimeCmfDateRanger   	CmfObject
CmfM2MBaseCmfBackrefBaseCmfObjectListgetattrhasattrr   )	field_clsts_classrel_models_lists      r   ts_field_classz/make__autogen_models_ts.<locals>.ts_field_class  sU   i!344 	)%HH	3:#677 	)&HH	3:#455 	)$HH	3:#788 	)'HH	3:#455 	)$HH	3:#566 	)%HH	CJ$6
8N#OPP 		))HH	3:#:;; 	).HH	CJ$>
@T#UVV 	))HH	3:#899 	)$HH	CJ$=sz?W#XYY 	)(H!)Xt<< My'**L	70K0K/L 	 	/!"4"<Oi#*"<cj>R!STT 	@??O!<!<????i#*";SZ=UWZWaWl!mnn 	DCC%**_"="=CCCCr   c                     i }| j                                         D ]$\  }}|v r
|v r|r|v r|s|v r||||<   %|S )ub   Вернём мету без имён и неважных для фронта параметров)ui_metar|   )r   r   
meta_param
meta_valueparams_def_falseparams_def_noneparams_def_trueparams_to_strips       r   
strip_metaz+make__autogen_models_ts.<locals>.strip_meta  s    &/&7&=&=&?&? 		- 		-"J
_,,..:.///
/..:3E",GJr   c                    | |           } |                                d          \  }}}t          |          }|dz   t          |                    d                                                    d d         z   S )Nr   :zutf-8   )	partitionr"   r   encode	hexdigest)r   r   
field_typer   _field_type_paramshash_keyr  r   s         r   
field_hashz+make__autogen_models_ts.<locals>.field_hash  s    ? j++G,:N9,E,E,O,OPS,T,T)
A)w<<C$xw'?'?"@"@"J"J"L"LRaR"PPPr   c                     i | ]D}|j                                         D ](}|j                            d            |          |)ES )cf_)r   r   r   r!   )rY   r[   r   r  s      r   
<dictcomp>z+make__autogen_models_ts.<locals>.<dictcomp>  sq     7 7 7,,..7 7 #..u55	7
9y7 7 7 7r   zmodels_count: z, concrete_models_count: z
, fields: z, uniq_fields zcmf/templatesT)loaderkeep_trailing_newlineF)ensure_ascii	sort_keyszjson.dumps_kwargs)r   ui_form_customuD   Ошибка в метаданых, неправильный тип r   r  zautogen_models_ts.jinja2)r8   
cmf_fieldsmodels_by_ui_nameui_name_by_modelsfields_indexr   r  r  rX   r   r   zautogen_fields_ts.jinja2z__autogen_models.tsz__autogen_fields.tsr   )2ry   rw   
write_textru   	read_texttmp.__autogen_models_tmp__autogen_models_tmpreloadr   r   r   varsr   r   typerX   r)   r~   BaseM2MModelr5   r   r   __mro__r   lenr   r   updater   rx   jinja2EnvironmentFileSystemLoaderr   r9   r   configPROJECT_DIRpoliciesr|   jsondumpsget_templaterenderr   autogen_pathr   r    r   r   )ry   r  
all_modelsautogen_modelsr    r[   baser  r  concrete_models_countfields_countfield_ui_meta_setr   r  	jinja_env	meta_namer   autogen_models_textautogen_fields_textprev_models_filetemp_models_fileprev_fields_filetemp_fields_filer   r  r   r   r   r   r  r   s                          @@@@@@@@r   make__autogen_models_tsr<  s  s   /99;;<<<;;;;;;V JEENt01122 	7 	7%%eT"" 	7z%9M'N'N 	7%!899 !!%(((!%%e&6777 7 7dCJ$899 726Jt/  @ @5)T** 	@/4/?em,27-e.///   %,,..  ND< < <O "9-Og g g ))O     D        Q Q Q Q Q Q Q L 8 8EL))),,.. 	8 	8I$$Y%67777	87 7 7 7#7 7 7L 
 F3~.. F FI^ F F"F F25l2C2CF F G G G ""&&V5G(Y(Y'Z[[" # $ $I @ESW.X.XI*+  %*]%8%8%:%: 	 	!Iz <<<Jz****  Mafaq  M  Mt}  M  M  AK  M  M  N  N  N =	 $001KLLSS":++!% T   $001KLLSS":++!% T   $$99'115E5J2Z2ZRYY[[2Z2Z[[ 3444#$99'115E5J2Z2ZRYY[[2Z2Z[[ 3444,---,-----s   L00 Mc                  >    t                       t                       d S r   )r   r<  rI   r   r   make__autogen_modelsr>  E  s     r   )rF   filecmpr)  shutilcollectionsr   r   hashlibr   	itertoolsr   rQ   typingr   pathlibr	   
cmf.fieldsr)   cmf.includer}   r   r'  r-  ru   rw   r/   r   r<  r>  rI   r   r   <module>rH     s@       0 0 0 0 0 0 0 0                                          $ tK  & 55 88* * *ZW2 W2 W2tO. O. O.d    r   