
    hw              	       (   d Z ddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlmZ ddlmZ ddlmZ ddlmZ ej                            ej                            e                    Z ededed	 ej                    e
j        
           d Z e              G d d          Z e            Ze                                 ddlT ddl Z de
j!        v re"                                 n*e#                    e$           ddl%m&Z&  e&j'                     ddl(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2m3Z3m4Z4 d.dZ5d Z6d Z7d Z8d Z9ddl(m:Z: d Z;d Z<d Z=d/dZ>d Z?d Z@d  ZAd.d!ZBd" ZCd# ZDd$ ZEd% ZFd& ZGd'eHfd(ZId0d)eHd*eHd+eHfd,ZJd- ZKdS )1u   Magage.py занимается построением аппликейшена и не переопределяет функции и не создает функции в апп    N)OrderedDict)Path)fields)init_system_datazrunning:inz	from cwd:filec                  6   t           j                            t          j                    d          } t           j                            t          j                    d          }t           j                            |           st          j        ||            d S d S )Nzcustom/config.pyzcustom/config.py.example)ospathjoingetcwdexistsshutilcopy)config_pathexample_paths     ./cmf/manage.pycheck_configr      sr    ',,ry{{,>??K7<<	-GHHL7>>+&& /L+...../ /    c                   *    e Zd ZdZd Zd Zd Zd ZdS )WorkModelFileu  
    Почему бы не создать целый класс для одного файла, гг?
    Захотел прибить гвоздями весь код, работающий с ним в одно место, а не размазывать по manage.py
    c                     t          t          j                    d          | _        | j        dz  | _        | j        dz  | _        d S )Ntmpz__autogen_models_tmp.pyz__autogen_models.py)r   r   r   app_tmpfilepath	orig_pathselfs    r   __init__zWorkModelFile.__init__*   s;    BIKK//%>>&;;r   c                 p    | j                             d           | j                            d           dS )    Зануляем файл чтобы иметь объект модуля-заглушки для Чёрной Магии (тм) T)exist_okz# clean
N)r   mkdirr   
write_textr   s    r   	clean_tmpzWorkModelFile.clean_tmp/   s7    D)))  -----r   c                 <    | j                             d           dS )r"   T)
missing_okN)r   unlinkr   s    r   clean_modelszWorkModelFile.clean_models4   s!    .....r   c                 :   | j                             | j         j         dt          j                               }|                    | j                                                   |                    | j                    t          
                    |           dS )uw  
        Закидываем в заглушку настоящую модель (тупо копируем всё из __autogen в __autogen_tmp) и реимпортим в память
        _models, а не models чтобы ясно было что его на момент объявления ещё нет и он передаётся аргументом
        .N)r   	with_namenamer   getpidr%   r   	read_textrename	importlibreload)r   _modelsmodels_tmp_tmp_paths      r   fillzWorkModelFile.fill8   s    
 #m559K6[6[bikk6[6[\\&&t~'?'?'A'ABBB""4=111!!!!!r   N)__name__
__module____qualname____doc__r    r&   r*   r6    r   r   r   r   %   sZ         < < <
. . .
/ / /" " " " "r   r   )*autogen)RelationCache)APPcmf_contextapp_init_aclapp_init_project_permissionspawn_messenger_socketio_clientspawn_whatsapp_socketio_clientinit_logging
cmf_commit)init_dsinit_dbrollback_all_dsc                 0   t                       t          j                            t          j                            t          j                            t                              dz              t          
                    t                     t                       t                       t                       t                      5  t                       t!                       d d d            n# 1 swxY w Y   ddlm} i }| r	d| v rd|d<    |di | d S )N/config_load.pyr   deferred_job_workerz--single_queueTsingle_queuer;   )install_traceback_email_notifyr?   configfrom_pyfiler   r   dirnameabspath__file__socketioinit_apprE   start_viewsrG   r@   rA   rB   cmf.cmf_deferred_jobrM   )cmd_args_kwargsrM   
job_kwargss       r   start_job_workerr\   k   sE   "$$$J
11225FF   cNNNMMMIII	 & &#%%%& & & & & & & & & & & & & & & 988888J *$00%)
>"%%*%%%%%s   C00C47C4c                     t                       t          j                            t          j                            t          j                            t                              dz              dt          _	        dt          _
        t                       i }d|d<   d| v rd|d<   d}d| v rd}d}d| v sd| v rd}d	}| D ].}d
|v r(t          |                    d          d                   }/t                                           t!                       t          j        rdt          j        d<   |rddlm} t+          j        |d           t          j        t          _        t3                       t5          j        t          fd||d| d S )NrK   Fuse_reloaderz--auto-reloadTz--no-debuggerz--with-celeryz--with-jobsi  z--port=   1SOCKETIOr   rL   )rN   z0.0.0.0)hostportdebug)rO   r?   rP   rQ   r   r   rR   rS   rT   disable_permissionsfirst_request_init_skiprW   intsplit	CMF_CACHEflushdbrG   WHATSAPP_MESSENGER_URLenvironrX   rM   geventspawnIS_BOX_VERSIONcache_optimizerE   rU   run)argskwargsoptionsre   	with_jobsrd   argrM   s           r   startrx      s   "$$$J27??27??8+D+DEEHYYZZZ#C #(CMMMG
 $GN$"&E$I$-4"7"7	D * *s??syy~~a())DIII$ %!$
: =<<<<<<(t<<<<.CNNNLH94uHHHHHHHr   c                      t          dd          5  t                       t                                           ddlm}   |              t                       d d d            d S # 1 swxY w Y   d S )NTF)preprocess_requestr   before_request)r@   rH   rj   rk   cmf.appr|   r   r{   s    r   cmf_init_dbr~      s     
Te	4	4	4   				******                 s   AA%%A),A)c                  :   t          t          dd           rt                              d           ddlm}  ddlm} ddlm	}  | t          t          j                  } ||j                  }|                    t          j                    ||           d S d S )N
SENTRY_DSNzInstall sentry hookr   )Sentry)SentryHandler)setup_logging)dsn)getattrrP   logginginforaven.contrib.flaskr   raven.handlers.loggingr   
raven.confr   r?   r   clientsetLevelERROR)r   r   r   sentry	l_handlers        r   install_sentry_hookr      s    v|T** 	!*+++......888888,,,,,,!2333!M&-00	7=)))i     	! 	!r   c                     d } t          t          dd           sd S t                              d           t          j        t          t          t          f          s
J d            t          t          dd           s
J d            t          j        t          t          dd           s
J d            t          j	        fd	}t          j        t          |           |t          _        d S )
Nc                     d S Nr;   )xs    r   <lambda>z0install_traceback_email_notify.<locals>.<lambda>   s    4 r   TRACEBACK_EMAIL_NOTIFYzInstall traceback email notifyuC   Параметр TRACEBACK_EMAIL_NOTIFY - это список emailTRACEBACK_EMAIL_NOTIFY_FROMu*   Укажите TRACEBACK_EMAIL_NOTIFY_FROM%TRACEBACK_EMAIL_NOTIFY_SUBJECT_PREFIXu4   Укажите TRACEBACK_EMAIL_NOTIFY_SUBJECT_PREFIXc                 >   dd l }ddlm} ddlm} ddlm} ddlm} d	                    |j
        |j                  }dt          |           dd	|                                g}|                    d
           |                    d           |                    d	           |j        }t!          |                                          }	|	D ]/}
|                    |
d|                    |
                     0d
                    |          d
z   } |d          }||d<   |d<   d                              |d<    |d          }|                    |            ||          }|                    |           	  |dd          }n:# t*          $ r-}t-          |                                |           Y d }~d S d }~ww xY w|                                 |                    |                                           |                                 d S )Nr   )request)SMTP)MIMEMultipart)MIMETextz{} Cmf traceback {} {}u,   Проблема на веб-сервере:z
Traceback:zP================================================================================
zRequest Information:z: relatedSubjectFromz, Toalternativezsmtp.carbonsoft.ru:25251   )timeout)	tracebackflaskr   smtplibr   email.mime.multipartr   email.mime.textr   formatmethodurlstr
format_excappendrm   sortedkeysgetr   attachOSErrorprintehlosendmail	as_stringquit)	exceptionr   	__requestr   r   r   subjectmsg_contentsrm   environkeyskeybodymsg_rootmsg_alternativeplainsmtpe	mail_frommail_tosubject_prefixs                    r   traceback_exceptionz;install_traceback_email_notify.<locals>.traceback_exception   st   ......      666666,,,,,,*11I,im
 
 ;	NN  ""
 	D!!!2333H%%%#W\\^^,, 	D 	DCCCCS1A1A1A BCCCCyy&&- =++%$7++'-66(((u%%%	42A>>>DD 	 	 	)&&((!,,,FFFFF	 			i(*<*<*>*>???		s   F 
G	"GG	)r   rP   r   r   r   
isinstancelisttupler   r   r?   register_error_handler	Exceptioncmf_exception_mail)r   r   r   r   r   s     @@@r   rO   rO      s:   '63T:: LL1222 +G$  M MLM M  -t  4 434 4  2I7  > >=> >  AN. . . . . . .` y*=>>>0Cr   )CustomJSONProviderc                  :   t                               d           t          j                            d          rt                               d           d S d} t          j                            |           r5t          j        |           }t          j                    |j        z
  dk     rd S t                               d           t          j
        ddgt          j        	          }|                                d
                             d          }t                               |                                           |                                dk    r!t          d                                           t          |                                            d S )Nu:   Проверяем, нужно ли подпулить cmfz./cmf/.cmf_need_updatez+Cmf need update! Run ./manage.py cmf_updatez./cmf/.cmf_last_check_updatei  u<   Проверяем, нужно ли cmf обновитьсяz ./cmf/bin/git_check_need_pull.shz./cmfstdoutr   UTF-8zNeed to pull)r   re   r   r   r   r   stattimest_mtime
subprocessPopenPIPEcommunicatedecodestripr   touch)last_check_filenamestatbufprocessoutputs       r   check_cmf_need_updater     sT   MMNOOO	w~~.// BCCC8	w~~)** '-..9;;))G33FLLOPPP	+W5jo  G   ""1%,,W55FLL   ||~~''%&&,,...	##%%%%%r   c                      dS )u   Не нужно сейчас.
     Считаем, что когда в проект будут копироваться сложные файлы, которые нужно обновлять - доделаемNr;   r;   r   r   check_project_need_update_cmfr   ,  s      r   c                  t   t                               d           t          j        dgt          j                  } |                                 d                             d          }t                               |           t          j        	                    d          rt          j
        d           d S d S )Nu   Обновляем cmfz./cmf/bin/cmf_update.shr   r   r   z./.cmf_need_update)r   r   r   r   r   r   r   r   r   r   remove)r   r   s     r   
cmf_updater   P  s    LL)*** 9::?SSSG  ""1%,,W55FLL	w~~*++ (
	&'''''( (r   Tc                 `   d }|st          d          }	 |r|                                 ddlm} ddlm} ddlm} dd l}dd l	}	dd l
}
|
j
        }t                                          |	j        j                   |s | st          j                                        }|rPdat'          |t)                      t                                 t$          |r |j        t          j                      S S | r^t.          j                            d          }|fd}t.          j                            |          rt7          j        |           t;          j        |           t7          j        d	           t7          j        d
           t7          j        d           t7          j        d           t7          j        d           t7          j         tC          j"        t                                j#                   |rdtH          _%        tM          dt          j'                   |(                    t                                 |r
 |             ntM          dt          j'                   |r |j        t          j                      d S d S # |r |j        t          j                      w w xY w)NTinit_views_and_dsr   rI   commit_with_eventtimeitz~/.cmf_historyc                 .    t          j        |            d S r   )readlinewrite_history_file)history_paths    r   save_historyzcmf_shell.<locals>.save_historyy  s    +L99999r   ztab: completezset show-all-if-ambiguous onzset show-all-if-unmodified onzset completion-query-items 200z set colored-completion-prefix onshell#!!! Use commit() to commit changes.r   )localzNothing to exec))r@   	__enter__cmf.data_providers.baserI   r}   r   cmf.cmf_profiler   codecmf.includepprintlocalsupdateinclude__dict__sysstdinreadretcodeexecglobals__exit__exc_infor   r   
expanduserr   r   read_history_fileatexitregisterparse_and_bindset_completerrlcompleter	Completercompleteginteractive_shellr   stderrinteract)interactivescriptrs   without_context_cmf_contextrollbackcommitr   __codecmfr   pp__history_pathr   s                 r   	cmf_shellr#  Y  s   L ;"T:::13 	%""$$$GGGGGG777777******],--- 	&k 	&Y^^%%F 	6 GFHH---4  	3!L!3<>>222	33  	6W//0@AAN*8 : : : : w~~n-- ;*>:::OL)))#O444#$BCCC#$CDDD#$DEEE#$FGGG";#8#B#B#KLLL .&-#7cjIIIIOO&((O+++ 


##*5555 	3!L!3<>>2222	3 	3< 	3!L!3<>>222	3s   B;J 0E<J  J-c                  v  	 ddl m}  ddlm} ddlm	 ddlm} ddlm	} dd l
}ddlm} d|_        	fd	}|j
        } |            }d
|j        _        t!          d          5  dt"          _        t'          dt(          j                    | |            	             d d d            d S # 1 swxY w Y   d S )Nr   )embed)
get_configr   r   r   )	VerboseTBz
bg:#039dfcc                                     t          j        t          j        t          j        gt          j                   d S r   )r   execvr  
executableargv)r  s   r   r3   zipython.<locals>.reload  s4    



#.!<38!<=====r   neutralTr   ishellr   r   )rP   )IPythonr%  traitlets.configr&  r   rI   r}   r   r   r   r   IPython.core.ultratbr'  _tb_highlightInteractiveShellEmbedcolorsr@   r  r  r   r  r  )
r%  r&  r  r   r   r'  r3   r!  cr  s
            @r   ipythonr5    sg   ++++++CCCCCC333333&&&&&&MMM /.....*I> > > > > 
B
A%.A"	t	,	,	,  &3#*EEEEQ


	                 s   #>B..B25B2c                     t          d          5  dt          j        d<   ddlm} |                    |            ddd           dS # 1 swxY w Y   dS )u|   
    :param email: почта админа созданная на этапе acrm_assign.sh --admin=test@carbonsoft.ru
    Tra   NO_CACHEr   )	demo_dataN)r@   r   rm   r   r8  create)emailr8  s     r   init_demo_datar;    s    
 
T		    !$
: 	"!!!!!                                   s   +AAAc                     t                                                      } | dz  }| dz  }|                                r%t          d|                                d           d S ddlm} |                    d          }|                    |	                    d                     |                    |
                                	                    d                     d S )	Nztmp/jwt_rsaztmp/jwt_rsa.pubFilezalready existsr   )RSAi   PEM)r   resolver   r   absoluteCrypto.PublicKeyr>  generatewrite_bytes
export_key	publickey)proj_dirrsa_private_pathrsa_public_pathr>  r   s        r   generate_rsa_keypairrJ    s    vv~~H-/!22O   f&//113CDDD$$$$$$
,,t

C  !6!6777 : :5 A ABBBBBr   c                    dt           j        d<   t                       t                       g }t	          t
                    D ]}|dv rt	          t
                    |         }t                              |          s<t          |t          j        j
                  s\d|j        v r
d|j        v ro|                    |           t                      }|D ]}|                    |          }| r`t          | d          5 }|                    t"                              |t&          d                     d d d            d S # 1 swxY w Y   d S t)          t"                              |t&          d                     d S )	Nra   r7  )CmfRFilerightleftw+   )clsindent)r   rm   rW   rG   varsmodelsinspectisclass
issubclassr   	BaseModelr   r   r   dump_data_dictopenwritejsondumpsr   r   )	file_path
all_models
model_namemodelresfs         r   dump_dbrd    s    BJzMMMIIIJ6ll ! !
&&VZ(u%% 	%!566 	el""v'='=%    
--C ( (""3'' A)T"" 	GaGGDJJs(:1JEEFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	djj"4Qj??@@@@@s   6EEEc                 <   dt           j        d<   t                       t                       t	          | d          5 }t
                              |                                          d d d            n# 1 swxY w Y   dfd	} |              |d           d S )Nra   r7  rFc                 h   D ],}	 t          t                    |         }n#  t          | d           Y 5xY wd }|         D ]}t          d           |j                            |j                  }|                    |j        j        |d         k                                              }|rt          d           |d         }| snt          d            |d          }|D ]}|d	k    rt          d
           |	                    |d          dk    r4t          ||          st          d| d| d           [t          ||          }t          t          |          t          j                  s|	                    |          |j        st#          |t          j                  s(t#          |t          j                  r|j        s|j        r| st#          |t          j                  r||         D ]}		 t          j                            |	d                   }
|
j                            |
j                  }|                    |
j        j        |	d         k                                              }|r|                    |d                    #  t          d|	d                     Y xY wt#          |t          j                  r|	                    |dz             st#          |t          j                  r_|j        s|j        rQ	 t5          ||j        d d         ||                    ]#  t          d| d|j         d|j                    Y xY wt#          |t          j                  r,||         |                    ||                   |_        ||         |_        |	                    dd          |dk    rt          d|j                    |                    d           |r|j                                          .d S )Nu    больше нетz&======================================id	HHHHHHHHHr   zHHHHHHHHH newT)emptyis_newu+   WARNING: служебное поле is_newu   WARNING: Поля u    нет в модели !u3   Не возможно создать связь с _idu,   WARNING не удалось задать FK z = u    для обьекта r   z-1CmfTasku%   WARNING задача без кода 	only_data)!rS  rT  r   dpquery_deprecateddp_modelfilterrh  allr   hasattrr   rW  typer   CmfTypenullabler   
CmfRelBaseCmfTUUIDforeign_keyforeign_keys
CmfM2MBaseget_cls_by_tuuid_strr   CmfRelationBasesetattr
class_name_valueCmfDateTimecastsaver  )with_relr`  ra  inst	inst_dictqinstsr   fielditem
list_modelrb  s              r   r   zrestore_db.<locals>.process  s    N	! N	!JVZ0999:::D _ E* E*	>???H--en==!2io!EFFJJLL -+&&& 8D# ! ! /*** 5t,,,D$ 36 36ChLMMM  }}S"--33 "4-- !]3]]PZ]]]^^^ #D#..E%d5kk6>BB !  }}S))1%.1 "5&*;<< !ESYSbAcAc !FKFW![`[m! zB! !%):;; 6$-cN 	) 	)D)-3_-Q-QRVW[R\-]-]
$.M$B$B:CV$W$W()1D1G4PT:1U(V(V(Z(Z(\(\#( !;$)LLq$:$:$:) %&h\`ae\f&h&h i i i (	) $E6+ABB 6(}}S5[99 %$% $E6?;; 6AR 6V[Vh 6%#D%*:3B3*?3PPPP%! !Fs  !F  !FW\Wc  !F  !F  }A  }D  !F  !F   %H#E6+=>> 6$S>1$',zz)C.'A'A'0~==..6:;R;RK$'KKLLL		D	)))) !   ]N	! N	!s!   #9BJ##J?#$M		$M0	T)F)r   rm   rW   rG   rZ  r\  loadsr  )r^  rc  r   rb  s      @r   
restore_dbr    s     BJzMMMIII	i		 #jj""# # # # # # # # # # # # # # #O! O! O! O! O! O!d GIIIGDMMMMMs   -A66A:=A:c            
      :   dt           j        d<   t                       t                       t	                       ddlm ddlm}  t          j	        d          5   |              t          j                            d          }t          j                            d	          }fd
} |            }t          d          D ]}|j                            |           |                                  |d           t%          dt'          |j                            d                                |j                            |           |                                  |d           |                                 d d d            d S # 1 swxY w Y   d S )Nra   r7  r   )r   r{   /z
DEV-004234)r   z/cmfproject-6597795c-95ce-11ea-9023-6f4fdd48682bc                  X                              dfd	} fd| _         | S )N c                 R    t          |              z
                          d S r   r   )snowr   s    r   wrapz&prod_test.<locals>.timer.<locals>.wrapW  s,    a#&&&dffr   c                  :    t          d              z
            S )Nendr  )rx   r   s   r   r   z*prod_test.<locals>.timer.<locals>.<lambda>\  s    uUDDFFUN;; r   )r  )r  )r  r  rx   r   s    @@r   timerzprod_test.<locals>.timerS  sX    DFFE$&&C      
 <;;;;DHKr   
   r   
all_nested)r  r   )r   rm   rW   rG   rH   r   r}   r|   r?   test_request_contextrT  rp  r   
CmfProjectrange	executorsr   _test_save_commitr   lenr  r   r  )r|   taskprojectr  tir   s         @r   	prod_testr  E  s    BJzMMMIIIIII&&&&&&		!#	&	&    ~!!|!44#''-^'__	 	 	 	 	 EGGr 		 		AN!!'***""$$$AhKKK,DN$=$=$=$N$N O OPPPN!!'***""$$$AhKKKK 	
A                                   s   D(FFFc                    t                               t                               t          j                            t          j        d          g          d          }ddd|j        d<   t          
                    |           } t          j                                                            d           d|  }t          j         d	| d
}|                    d                              | |          }t!          |d          5 }|                    |           d d d            n# 1 swxY w Y   t%          d|            t%          d|            d S )Nzcmf/templatesT)loaderkeep_trailing_newlineF)ensure_ascii	sort_keyszjson.dumps_kwargsz
%Y%m%d%H%M_/patch/.pyzpatch.jinja2)
patch_name	file_namerO  #   Сгенерирован файл: u7   Команда для запуска: python3 -m patch.)jinja2EnvironmentFileSystemLoaderr   r   r   rP   PROJECT_DIRpoliciescmfutiltranslit_stripdatetimer  strftimeget_templaterenderrZ  r[  r   )r.   	jinja_envr  r^  
patch_textrc  s         r   	new_patchr  q  s   ""&&V5G(Y(Y'Z[[" # $ $I @ESW.X.XI*+!!$''D$((**33LAAJJDJJI%<<i<<<I''77>>$Zc>ddJ	i		 !	
              	
;	
;
;<<<	
OI
O
OPPPPPs   D))D-0D-c                     fd} t                                            g }t          j                            t
          j         d          sdS t          j        t
          j         d          D ]K}t          	                    d|          r.|
                    |                    d          d                    L|                                 |st          d           dS t          d	          5  t          j                            d
gdg          }|sf|d          |            |D ]Ot          j                                      s-t                                                                         Pn0t)          |j        j        d          }|D ]|k    r |            ddd           dS # 1 swxY w Y   dS )u?   
    Накладываем патчи по очереди
    c                 (   t           j                                         t          j                                      rt          d d           d S dt          j         d|  d}t                                        	                                 	 t          |dddd	          \  }}}t          d
 d|            t          d
 d|            t          j        j                                         d S #  t          d|             xY w)Nr.   u	   Патч u    уже примененz(cd z; python3 -m patch.)FT)sudoseparate_out_and_errdo_raise	do_decodezPatch z	 stdout: z	 stderr: uI   Произошла ошибка накатывания патча %s (%s))r  r   flushrT  CmfPatchsgetr   rP   r  r  run_bash_commandrs  r  )r  cmderrcodeouterrr.   s        r   apply_patchzpatch.<locals>.apply_patch  s7   
?T** 	<d<<<===FIV'IIJIIIT""'')))	 05W[:>$!P !P !PGS#/4//#//000/4//#//000O%%'''''	]_ceoppps   A%C= =Dr  Nz[0-9]+_.*\.pyr,   r   u0   Не найдено ни одного патчаTr   r.   r<   )order_byr   rl  r  202306050000)rj   rk   r   r   r   rP   r  listdirrematchr   ri   sortr   r@   rT  r  r   r  r  maxr.   value)r  patchesfilenamefirst_patchfrom_patch_limitr.   s        @r   patchr    s-       $ G7>>V/88899 J&"4===>> 3 388$h// 	3NN8>>#..q1222LLNNN @AAA	t	,	,	, & &o))F8SE)JJ 	&2;DK 6 6+++66 6OOO..335556  #;#3#9>JJ & &***K%%%& & & & & & & & & & & & & & & & & &s   4B<F==GGc                     t                                            t          d          5  t          j                                        } t          j        | _        | 	                    d           ddd           dS # 1 swxY w Y   dS )u?  
    Команда для системы обновления. Сохраняет eva_version в CmfGlobalSettings
    Если версии будут отличаться, в случае запуска образа с несовместимой версией БД,
    система вернет ошибку
    Tr   rq  N)
rj   rk   r@   rT  CmfGlobalSettingsr   rP   EVA_VERSIONeva_versionr  )gss    r   save_version_to_dbr    s     	t	,	,	,    %))+++
$                                   s   AA==BBr^  c                    i }t                               t          j                            t
          j        d          g          }||d<   t          j        di |}t          j                            |           rt          d|  d           d S t          j        
                    |           \  }}|
                    d          d         }t          j                            |          st          j        |           t          | d          5 }|                    d          }|                    |                    d	|i                     d d d            n# 1 swxY w Y   t          d
|             d S )Nzcmf/contribr  u	   Тест u    уже существуетr  r   rO  ztest.py.tmplr.   r  r;   )r  r  r   r   r   rP   r  r  r   r   ri   isdirmakedirsrZ  r  r[  r  )r^  _options_loader
_jinja_envfolderr.   rc  templates           r   new_testr    s   H%%rw||F4F'V'V&WXXG HX#//h//J	w~~i   A)AAABBB7==++LFD::eQD7==   
F	i		 1!**>::	//0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 

;	
;
;<<<<<s   A EE #E ext_smtploginpasswordc                 0   t          d          5  t          j                                        }|                    g d           d                    t          j                            d          dd                   }| sd| d} |sd| }| |j	        _
        ||j	        _        ||j	        _        d	|j	        _        d	|j	        _        d|j	        _        |j	                                         t#                       ddd           dS # 1 swxY w Y   dS )
u`   Настраиваем в ножницах локальный почтовый сервер
    T)zplugin.ext_smtpzplugin.loginzplugin.passwordzplugin.use_tlszplugin.verify_sslzplugin.ext_portr,   r`   Nzmailserver.z:25zuser@F)r@   rT  CmfPluginMailBoxget_local_mailboxload_fieldsr   rP   APP_FQDNri   pluginr  r  r  use_tls
verify_sslext_portr  rF   )r  r  r  mail_boxdomains        r   set_local_mailserverr     sa    
T		  *<<>> / / / 	0 	0 	0&///44QRR899 	10V000H 	%$F$$E#+  %#+ "'%*"#' !                 s   C.DDDc                  
   t                       t                                          } |                     dt          d           |                     dt          d           |                     ddd	           |                                 \  }}t                       |j        d
k    rt          |  d S |j        dv rt          |           d S |j        dk    rt                       d S |j        dk    rt                       d S |j        dk    rt                       d S |j        dk    r$t          d                    |                     d S |j        dk    r$t          d                    |                     d S |j        dk    rt!          |  d S |j        dk    rt#                       d S |j        dk    rt%                       d S |j        dk    r'|j        s
J d            t)          |j                   d S |j        dk    rt+                       d S |j        dk    rt-          |  d S |j        dk    rt/          |  d S |j        dk    r7ddlm} t5          t6          j         d          }t5          t6          j         d          }|                                rt<          j                            t6          j         d          rp|                                r:tA          j!        t6          j         d| d            tA          j"        |           n"|#                    t6          j         d           t<          j                            t6          j         d!          rtI          d"d#$            |             d S |j        d%k    r[tK          tL          j'        (                                d&                    |          |j)        '          }|rtU          |           d S d S |j        d(k    rt5          |d                   +                                5 }|,                                }d d d            n# 1 swxY w Y   tK          tL          j'        (                                |||j)        )           d S |j        d*v rt[                       d S |j        .                    d+          s|j        .                    d,          r!t^          0                    |j                   d S |j        d-k    rtb          2                                 d S tg          d.tL          j4        d                    tL          j5                             tU          d/           d S )0Ncommandzrun command)ry  helpz--emailu"   Почта (для init_demo_data)z--without-context
store_trueu4   Не инициализировать app и context)actionr  rx   )celery_worker
job_workerr   rH   r  r   r  r   r  r  r;  us   Нужно указать почту владельца CRM для инициализации демо-данныхrJ  rd  r  r=   r   )make__autogen_modelsz/custom/modules/servicedeskz/custom/modules/taskz./custom/modules/servicedesk/fields/cmf_task.pyz/fields/cmf_task.pyz'/custom/modules/task/fields/cmf_task.pya@  sed -i 's/class CmfTask(modules.servicedesk.models.cmf_task.CmfTask):/class CmfTask(modules.task.models.cmf_task.CmfTask):/' /opt/eva-app/custom/modules/task/fields/cmf_task.py; sed -i 's/import modules.servicedesk.models.cmf_task/import modules.task.models.cmf_task/' /opt/eva-app/custom/modules/task/fields/cmf_task.pyF)r  r   r   )r  r  r  r  )r  r  rs   r  )r5  r-  zbin.zsbin.cache_flushdbu$   Команда не найдена:    )6r   argparseArgumentParseradd_argumentr   parse_known_argsrE   r  rx   r\   r   r~   r  r  r   r  r   r  r  r:  r;  rJ  rd  r  cmf.make_modelsr	  r   rP   r  r   r   r   r   movermtreer1   r  r#  r  r  isattyr  exitrZ  r  r5  
startswithr2   import_modulerj   rk   r   r*  r+  )	parserrs   unknown_argsr	  dir_pathdst_pathrb  script_filer  s	            r   mainr    s    $$&&F
	-@@@
	2VWWW
+LG}~~~0022D,NNN|w|	8	8	8&&&&&		%	%		"	"		$	$		$	$#((<(()))))		#	#,''(((((	/	/	/l++++		 	 	-	-	-	)	)	)z  	Q  	Q  Q  	Q  	Qztz"""""	/	/	/		"	"		%	%L!!!!		"	"8888886-JJJKK6-CCCDD?? 	M63E0u0u0u!v!v 	M   Mv1aaafn  dD  dD  dD  E  E  Eh''''6#5 K K KLLL7>>V/XXXYY 	m  `  gl  m  m  m  m		 	 CI$4$4$6$6tyy?V?Vhlh|}}} 	IIIII	 			!	!,q/""'')) 	([ %%''F	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(	((**6^b^r	t 	t 	t 	t 	t 	t	.	.	.							 	 	(	( DL,C,CG,L,L -----		(	(4cnchhsxFXFXYYYS					s   P??QQr   )TNNN)NNN)Lr:   cmf.monkey_patchr   r  r  r   r  r   r   r   r  r   collectionsr   pathlibr   r   cmf.system_datar   r   rR   rS   rT   CUR_DIRr   r   r  r   r   
work_modelr&   r   rn   r+  r*   r6   rT  cmf.fields.cmf_relation_cacher>   build_fields_cacher}   r?   r@   rA   rB   rC   rD   rE   rF   r   rG   rH   rI   r\   rx   r~   r   rO   r   r   r   r   r#  r5  r;  rJ  rd  r  r  r  r  r  r   r  r   r  r;   r   r   <module>r%     s   y  y            				      



  # # # # # #             , , , , , ,
'//"'//(33
4
4 j(D';		#* U U U U/ / / " " " " " " " "< ]__
 
           OOF <;;;;;$M$&&&                    F E E E E E E E E E& & & &(+I +I +I\  
! 
! 
!G1 G1 G1T ' & & & & && & &.y y yH( ( (73 73 73 73t  6
  
  
 C C CA A A A:\ \ \~) ) )XQ Q Q/& /& /&d
  
  
 = = = = =" # # S    ,H H H H Hr   