
    ih                         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 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y)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               #   $  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|   y w)Ndir_pathc              3      K   | j                         sy t        | j                               D ]  }|j                         s|  y wN)is_dirsortediterdir)r   sub_paths     ./cmf/make_models.pyget_sub_dirsz)iter_models_modules.<locals>.get_sub_dirs5   s?      x//12 	H 	s   >AAc              3   l  K   | dz  | dz  fD ]  }|j                         st        |j                               D ]t  }|j                         r|j                  dv s"|j
                  j                  d      r>t        |j                        j                  dd      dz   |j                  z    v  y w)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#**,%&6&>&>&@A Y#++-+2D2D2W##..s3+,,-55c3?#EHXHXXXY
	Ys   B2B4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 	U	d=)	* 	X 
d9o	&	
 
d+,	- 
d+,	-N ( &}5 	KQQ	s   BBc                  t  / t         j                  d       t        j                  d       d } i }t               D ]  }t	        |       t
        j                  |d       }|j                  j                         D ]K  \  }}t        j                  |      st        |t        j                  j                        sA | ||||       M  t        j                    G d d             /t        j                    G /fdd             }t#        |      }t#        t$              }i }	t'               }
|D ]  }||   }||   }t	        d	|        d|_        d
D ]  }||   D ]  }|j                  j+                  dd      rGd|_        t	        d|j,                   d|j.                   d|j,                   d|j.                   d	       |j0                  D cg c]  }t        ||      r| c}|_        |j0                  j3                  |         |j0                  D ]x  }|j5                         D ]c  }|j.                  |j.                  k7  rGd|_        t	        d|j,                   d|j.                   d|j,                   d|j.                   d	        x z |j(                  s"t	        d| d       |
j7                  |       d }|j0                  D ]y  }||j8                  r|j8                  }|j:                  j                         D ]>  \  }}||j:                  vr! /|||j,                        |j:                  |<   t        |t        j:                  j<                        r2| d}|t?        |      vsm||j@                  vs|||j@                  |<   t        |t        j:                  jB                        r|jD                  s$|jF                  sJ d| d|j.                   d       |jI                         }||	vs|jD                  r|j.                  |jJ                  g|	|<   |jF                  s,|jJ                  |j.                  g|	|<   It        |t        j:                  jL                        so|jD                  s$|jF                  sJ d| d|j.                   d       d }|jD                  r)|j.                   |jN                  jQ                          }nO|jF                  rC|jJ                  stS        d| d      |jJ                   |jT                  jQ                          }|s)||   j3                  ||g       A | |s"t'               }|jW                         D ]b  }|D ][  }tY        |tZ              r|j7                  |       %dD ]2  }|j+                  |t]                     D ]  }|j7                  |        4 ] d |j:                  j                         D ]  \  }}||v |_/          t         ja                  t         jb                   dtd        jg                                }|ji                  d      5 } | jk                  d       | jk                  d       | jk                  d       tm        |      D ]  }t	        d	|        ||   }|j(                  s$| jk                  d       |j0                  D ],  }!| jk                  djo                  |!j,                               . | jk                  djo                  |d jq                  |j0                  D cg c](  }d!jo                  |j,                  |j.                        * c}                   | jk                  d"       tm        |j:                        D ]  }|j:                  |   }| jk                  d#| d$|jr                   d|jt                   d|jv                   d%|jt                   d|jv                   d&       |j^                  u| jk                  d'|j^                   d(        |j@                  D ]l  }"|j@                  |"   }t        |t        j:                  jx                        r| jk                  d#|" d)|jz                   d*t        j                  j|                  j                  |jJ                         d+|j                   d,|j                   d-       |j                  s| jk                  d.       t        |t        j:                  j                        s| jk                  d#|" d)|jz                   d/|j                   d,|j                   d0d jq                  d1 |j                  xs g D               d2       |j                  s\| jk                  d.       o  tm        |      D ]u  }#||#   }$|$D %cg c]!  }%|%d3   jD                  s|%d3   j                  # }&}%t[        t%        tm        t'        d4 |&D                                }'t[        t%        tm        t'        d5 |$D                                }(| jk                  d       d})|$D ]  }*|*d3   j                  sd}) n | jk                  d6|# d7       | jk                  d"       | jk                  d8|) d(       | jk                  d9|( d:       | jk                  d;       | jk                  d<       | jk                  d=|' d:       | jk                  d>       | jk                  d?       | jk                  d@       x tm        |	      D ]  }#|	|#   }$|$\  }+},t        j                  j|                  j                  |+      }-t        j                  j|                  j                  |,      }.| jk                  d       | jk                  d6|# dA       | jk                  d"       | jk                  dB|+ dC       | jk                  dD|- dE       | jk                  d<       | jk                  dF|, dC       | jk                  dG|. dE       | jk                  dH       | jk                  dI         | jk                  d(       | j                          | j                          d d d        |j                  t                y c c}w c c}w c c}%w # 1 sw Y   .xY w)JNT)
missing_okc                    || vrg g g g g d| |<   |j                  d      r| |   d   j                  |       y |j                  d      r| |   d   j                  |       y |j                  d      r| |   d   j                  |       y |j                  d      r| |   d	   j                  |       y |j                  d
      r| |   d   j                  |       y t        dj                  |            )N)r(   r)   r*   pluginscustomzcmf.r(   zcommon.r)   zmodules.r*   zcustom.plugins.r2   zcustom.modules.r3   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"e$++C0__Y'h'..s3__Z(i(//4__./i(//4__./h'..s3  A  H  H  IM  N  O  O    )packagec                   >    e Zd ZU dZeed<   eed<   eed<   dZeed<   y)*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>      s    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W  f   ed<   y)*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++++DA	4A!2!2!2;!O	;O'8{'8'8'NS)^$Nr;   rU   zmodel_name )r3   r2   r*   r)   r(   abstractFzSkip model r   z due z is abstract!!_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 {}({}):
,z{}.{}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   v   K   | ]1  }d t         j                  j                  j                  |       d 3 yw)'z.id'N)r(   r   
base_modelcamel2snake).0ms     r   	<genexpr>z*make__autogen_models_py.<locals>.<genexpr>  s0     !mUVAcjj&;&;&G&G&J%K4"P!ms   79z+]
        visible=False
        index=True
   c              3   .   K   | ]  }|D ]  }|   y wr   rI   )rb   sis      r   rd   z*make__autogen_models_py.<locals>.<genexpr>&  s     /[aYZ/[TU/[/[s   c              3   Z   K   | ]#  }|d    j                   s|d    j                   % yw)re   N)rightmodel)rb   vvs     r   rd   z*make__autogen_models_py.<locals>.<genexpr>'  s"     .Vr"Q%++r!u{{.Vs   ++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   
issubclassr(   r   	BaseModelrQ   	dataclassr   rS   setrM   getrD   rC   rO   r4   __subclasses__addui_formr   CmfRelationBasedirrP   CmfM2Mleftrj   m2m_model_cls_namerk   CmfGenericM2M
class_name
capitalize
ValueErrorbackrefvalues
isinstancer!   tuplerB   	with_namer   osgetpidopenwriter   r6   joinrA   r@   r?   CmfRelationcaptionr`   ra   nullableuniqueno_aclCmfGenericRelationr3   flushrename)0r:   models_dictr-   rA   obj_namer9   rU   models_datagm2mm2mabstract_modelsr@   
model_data
model_list
model_typerk   rc   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vrl   right_choices_nestedright_choicesleft_choicesr3   valleft_model_nameright_model_nameleft_name_snakeright_name_snakerJ   s0                                                  @r   make__autogen_models_pyr   Y   s   t,d+O2 K*, Lk ..{D.I)2288: 	LMHc s#
3

8L8L(M";XsK		LL % % % O O O i(KtD
CeO! MJ
 ,
 ,
J<()!
K 	3J#J/ 3>>%%j%8).J&K(8(8'95>>:J%PUP`P`Oaabchcqcqbrr  A  B3=3G3G'dazZ_abOc'd
$$$++E23	3 %% 	A'') ::-).J&K~Qqzzl%GWWXY\YeYeXffghi		 !!K
|1-.
+%% !	:A199))$%HHNN$4 : 	5 J$5$553<Y
TUT`T`3aJ%%i0eSZZ%?%?@&/[#4L#3q61l*J^J^6^=B
,,\:szz'8'89!JJ%++ a 4

|;_`a5).)A)A)C&)4 ::78zz5;;6OC 23"[[7<{{AJJ6OC 23szz'?'?@!JJ%++ a 4

|;_`a5#Hzz&'jj\%2B2B2M2M2O1P#Q${{",|E7Bo-p"qq&+kk]5==3K3K3M2N#OX--q%j9=:!	:D  UN!(!1 B - BH!(C0&**84 )A BH19h1P B . 2 2= ABBBB +5*;*;*A*A*C J&
J-7>-I
*JYMJ^ ,559I9N9N8OqQSQZQZQ\P]6^_		"	"4	( GJGH3412 - 2	IJK
|,-$Z0J%%X&'11 M	  !5!5i6J6J!KLM !((HHPZPdPde1gnnQ\\1::Fefhi 56$Z%6%67 f
'..z:
   &,a
//0*2G2G1H*J_J_I` a!!"!J$9$9#: ;"  --9$$)CJD^D^C__a%def ",!5!5 I",,];eSZZ%;%;<$$ */ MM? #

--99%++FG HNN# $,,  &  ||"((-DHszz'D'DE$$ */ MM? #NN# $,,  !mZ_ZfZfZljl!mmn o&  ||"((-DH3I32	In  $	AQA;<#KR1

BqELL#K #KVC/[;O/[,[%\ ]^MtF3.VQ.V+V$WXYLX&F q6==!F
 vaS(@AB57}VHB78deqdrruv w d ghugvvyz z x {E$	N  	AAA01-O-!jj33??PO"zz44@@AQRX&vaS(?@A57hixhyy}~ u  wF  vG  Gi  j d kl|k}  ~B  C x  zJ  yK  Km  n  F  I9	B 	OGR  01[ (el fX $L}G Gs`   r
#r

Cr.)-r$B)r. C r.!6r.A/r.	/r.8r)r)Br."Hr.$
r..r7c                  	   dd l } t        j                  t        j	                                dd lm} | j                  t               i }t               }g }t        t        |            D ]  }t        t        |      }t        |t              s$t        |t         j                  j"                        sIt        |t         j                  j$                        rn|j'                  |       |j)                  |j*                         |j,                  D ]6  }t        |t         j                  j"                        s(|||j*                  <   8  i }i }	|D ]B  }t        |dd       s|j*                  ||j.                  <   |j.                  |	|j*                  <   D t1        |      }
|j3                         D cg c]  }|j*                  |vs| c}|z   }h dddhh ddhd fd	dfd
	}d}t               }|D ]T  }|t1        |j4                        z  }|j4                  j3                         D ]  }|j7                  |j8                          V |D ci c]E  }|j4                  j3                         D ]&  }|j*                  j;                  d      s	 ||      |( G }}}t=        dt1        |       d|
 d| dt1        |              t>        jA                  t>        jC                  tD        jF                  jI                  tJ        jL                  d      g      d      }ddd|jN                  d<   |D ]?  }|j8                  jQ                         D ]   \  }}|dvs	 tS        jT                  |       " A |jW                  d      jY                  |t         j4                  ||	||t        t        tZ              }|jW                  d      jY                  |t         j4                  ||	||t        t        tZ              }t\        dz  }|j_                  |j`                   dtD        jc                                }|j                  |       t\        dz  }|j_                  |j`                   dtD        jc                                }|j                  |       |je                  |       |je                  |       y c c}w c c}}w #  t=        d|j*                   d| d|         xY w) Nr   ui_name>   autostepscaler   commentr`   r   
max_lengthnested_fieldsclass_full_namefield_options_list_limitnested_fields_is_edge_parentr   visible>   maxminr   r   rj   r   r3   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}nt        | t        j                  j
                        rd}nt        | t        j                  j                        rd}n`t        | t        j                  j                        rd}n8t        | t        j                  j                        rd}nt        | 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
}ngt        | t        j                  j                        rd}n@t        | t        j                  j                  t        j                  j                   f      rd}t#        | dd       xs t%        | d      xr t#        | d      g}|r|d   |S t        | t        j                  j                  t        j                  j                  f      r| ddj'                  |       dS t        | t        j                  j                  t        j                  j                   t        j                  j                  f      r| ddj'                  |       dS |S )NCmfFieldCmfTextFieldCmfPhoneFieldCmfStrFieldCmfBigIntFieldCmfIntFieldCmfBoolFieldCmfDateTimeFieldCmfDateTimeRangeFieldCmfRelationFieldCmfM2MFieldCmfBackrefFieldr   rk   r   <z | >z<(z)[]>)rv   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  s   i!3!34%H	3::#6#67&H	3::#4#45$H	3::#7#78'H	3::#4#45$H	3::#5#56%H	CJJ$6$6

8N8N#OP)H	3::#:#:;.H	CJJ$>$>

@T@T#UV)H	3::#8#89$H	CJJ$=$=szz?W?W#XY(H!)Xt< My'*L	70K/L 	/!"4"<Oi#**"<"<cjj>R>R!STZqO!< =Q??i#**";";SZZ=U=UWZWaWaWlWl!mnZr%**_"=!>dCCr;   c                     i }| j                   j                         D ]$  \  }}|v r|v r|r|v r|s|v r| |||<   & |S )ub   Вернём мету без имён и неважных для фронта параметров)ui_metart   )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  sr    &/&7&7&=&=&? 		-"J
_,.://
.:3E",GJ		- r;   c                     | |       } |       j                  d      \  }}}t        |      }|dz   t        |j                  d            j	                         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  sg    ? +G,:9,E,O,OPS,T)
A)w<C$xw'?"@"J"J"LRa"PPPr;   cf_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)r7   
cmf_fieldsmodels_by_ui_nameui_name_by_modelsfields_indexr   r   r  rv   r   r   zautogen_fields_ts.jinja2z__autogen_models.tsz__autogen_fields.tsr   )3rq   ro   
write_textrm   	read_texttmp.__autogen_models_tmp__autogen_models_tmpreloadr   ry   r   varsr   r   typerv   r(   rw   BaseM2MModelr4   r|   r   __mro__r   lenr   r   updater   r    rp   jinja2EnvironmentFileSystemLoaderr   r8   r   configPROJECT_DIRpoliciesrt   jsondumpsget_templaterenderr   autogen_pathr   r   r   r   )rq   r  
all_modelsconcrete_models_namesautogen_modelsr   rk   baser  r  concrete_models_countr  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   s                            @@@@@@r   make__autogen_models_tsr4  s  s   /99;<;V JENt012 	7%eT"z%9M9M'N%!8!89!!%(!%%e&6&67 7dCJJ$8$8926Jt/7	7  @5)T*/4/?/?emm,27--e../@
  / &,,.%2B2BJ_2_ND\O "9-Og ))O D Q L 8ELL)),,. 	8I$$Y%6%67	88 $7,,.7 ##..u5 	9y(77L 7 
N3~.//HI^H_ `"^>#l2C1DF G ""&&V5G5G(Y'Z[" # $I @ESW.XI*+ %*]]%8%8%: 	!Iz <<JJz*	 $001KLSS"::++!% T  $001KLSS"::++!% T  $$99'115E5J5J4K1RYY[M2Z[ 34#$99'115E5J5J4K1RYY[M2Z[ 34,-,-YZ7,`afaqaq`rrst}s~~  AK  @L  M  Ns   8S	S	!A
S+S!S5c                  ,    t                t                y r   )r   r4  rI   r;   r   make__autogen_modelsr6  E  s    r;   )rF   filecmpr   shutilcollectionsr   r   hashlibr   	itertoolsr   rQ   typingr   pathlibr	   
cmf.fieldsr(   cmf.includeru   r   r  r$  rm   ro   r.   r   r4  r6  rI   r;   r   <module>r@     ss       0        $ K & 55 88*ZW2tO.dr;   