
    Fi              	       0   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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/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5 d.dZ6d Z7d Z8d Z9d Z:ddl)m;Z; d Z<d Z=d Z>d/dZ?d Z@d ZAd  ZBd.d!ZCd" ZDd# ZEd$ ZFd% ZGd& ZHd'eIfd(ZJd0d)eId*eId+eIfd,ZKd- ZLd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_tmp0   s7    D)))  -----r   c                 <    | j                             d           dS )r"   T)
missing_okN)r   unlinkr   s    r   clean_modelszWorkModelFile.clean_models5   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.fill9   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                    ddl m}m} 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   n*# t(          j        $ r}t
          j        rn Y d }~nd }~ww xY wi }| r	d| v rd|d<    |di | d S )Nr   )deferred_job_workerRedisMonitor/config_load.pyz--single_queueTsingle_queuer;   )cmf.cmf_deferred_jobrK   rL   install_traceback_email_notifyr?   configfrom_pyfiler   r   dirnameabspath__file__socketioinit_apprE   start_viewsrG   r@   rA   rB   redisConnectionErrorCACHE_REDIS_FAILOWER)cmd_args_kwargsrK   rL   e
job_kwargss         r   start_job_workerr`   b   s   FFFFFFFF #$$$J
11225FF   cNNNMMMIII]] 	* 	*NNN')))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*     & 	 CCCC J *$00%)
>"%%*%%%%%s<   D C9-D 9C==D  C=D D,D''D,c                  b   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          j        j                                         t&                                           t          j        rdt          j        d<   |rddlm} t3          j        |d           t          j        t          _        t;                       t=          j        t          fd||d| d S )NrM   Fuse_reloaderz--auto-reloadTz--no-debuggerz--with-celeryz--with-jobsi  z--port=   1SOCKETIOr   )rK   )rN   z0.0.0.0)hostportdebug) rP   r?   rQ   rR   r   r   rS   rT   rU   disable_permissionsfirst_request_init_skiprX   intsplitrG   cmfappREDIS_SETTINGS_MANAGER
init_redis	CMF_CACHEflushdbWHATSAPP_MESSENGER_URLenvironrO   rK   geventspawnIS_BOX_VERSIONcache_optimizerE   rV   run)argskwargsoptionsri   	with_jobsrh   argrK   s           r   startr   ~   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G"--///$ %!$
: =<<<<<<(t<<<<.CNNNLH94uHHHHHHHr   c                  *   t          dd          5  t                       t          j        j                                         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   rn   ro   rp   rq   rr   rs   cmf.appr   r   r   s    r   cmf_init_dbr      s     
Te	4	4	4   				&11333******                 s   A)BBB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)getattrrQ   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appendru   sortedkeysgetr   attachOSErrorprintehlosendmail	as_stringquit)	exceptionr   	__requestr   r   r   subjectmsg_contentsru   environkeyskeybodymsg_rootmsg_alternativeplainsmtpr^   	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   rQ   r   r   r   
isinstancelisttupler   r   r?   register_error_handler	Exceptioncmf_exception_mail)r   r   r   r   r   s     @@@r   rP   rP      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   ri   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   Q  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_historyz  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scriptr{   without_context_cmf_contextrollbackcommitr   __codern   r  pp__history_pathr   s                 r   	cmf_shellr)  Z  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                    	 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|_        t                              d	                              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:#039dfcparsoWARNINGc                                     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   )rQ   )IPythonr+  traitlets.configr,  r  rI   r   r   r  r   r  IPython.core.ultratbr-  _tb_highlightr   	getLoggerr   InteractiveShellEmbedcolorsr@   r  r  r   r  r  )
r+  r,  r%  r   r  r-  r3   r'  cr$  s
            @r   ipythonr>    s   ++++++CCCCCC333333&&&&&&MMM /.....*I g''	222> > > > > 
B
A%.A"	t	,	,	,  &3#*EEEEQ


	                 s   >CC"C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
    Tre   NO_CACHEr   )	demo_dataN)r@   r   ru   rn   rA  create)emailrA  s     r   init_demo_datarD    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.PublicKeyrG  generatewrite_bytes
export_key	publickey)proj_dirrsa_private_pathrsa_public_pathrG  r   s        r   generate_rsa_keypairrS    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 )	Nre   r@  )CmfRFilerightleftw+   )clsindent)r   ru   rX   rG   varsmodelsinspectisclass
issubclassrn   	BaseModelr   r   r   dump_data_dictopenwritejsondumpsr   r   )	file_path
all_models
model_namemodelresfs         r   dump_dbrm    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          j        j                                         t          | d          5 }t          
                    |                                          d d d            n# 1 swxY w Y   dfd	} |              |d           d S )Nre   r@  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)!r\  r]  r   dpquery_deprecateddp_modelfilterrq  allr   hasattrr   r`  typer   CmfTypenullabler   
CmfRelBaseCmfTUUIDforeign_keyforeign_keys
CmfM2MBaseget_cls_by_tuuid_strr   CmfRelationBasesetattr
class_name_valueCmfDateTimecastsaver%  )with_relri  rj  inst	inst_dictqinstsr   fielditem
list_modelrk  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   ru   rX   rG   rn   ro   rp   rq   rc  re  loadsr  )rg  rl  r   rk  s      @r   
restore_dbr    s     BJzMMMIIIG"--///	i		 #jj""# # # # # # # # # # # # # # #O! O! O! O! O! O!d GIIIGDMMMMMs    -BB Bc            
         dt           j        d<   t                       t                       t          j        j                                         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 )Nre   r@  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>.wrap]  s,    a#&&&dffr   c                  :    t          d              z
            S )Nendr  )r   r   s   r   r   z*prod_test.<locals>.timer.<locals>.<lambda>b  s    uUDDFFUN;; r   )r  )r  )r  r  r   r   s    @@r   timerzprod_test.<locals>.timerY  sX    DFFE$&&C      
 <;;;;DHKr   
   r   
all_nested)r  r   )r   ru   rX   rG   rn   ro   rp   rq   rH   r   r   r   r?   test_request_contextr]  ry  r   
CmfProjectrange	executorsr   _test_save_commitr   lenr  r   r  )r   taskprojectr  tir   s         @r   	prod_testr  J  s    BJzMMMIIIG"--///III&&&&&&		!#	&	&    ~!!|!44#''-^'__	 	 	 	 	 EGGr 		 		AN!!'***""$$$AhKKK,DN$=$=$=$N$N O OPPPN!!'***""$$$AhKKKK 	
A                                   s   >D(F33F7:F7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_namerX  #   Сгенерирован файл: u7   Команда для запуска: python3 -m patch.)jinja2EnvironmentFileSystemLoaderr   r   r   rQ   PROJECT_DIRpoliciescmfutiltranslit_stripdatetimer  strftimeget_templaterenderrc  rd  r   )r.   	jinja_envr  rg  
patch_textrl  s         r   	new_patchr  w  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} 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                                           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   flushr]  CmfPatchsgetr   rQ   r  r  run_bash_commandr|  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   ru  r  202306050000)r   r   r   rQ   r  listdirrematchr   rm   sortr   r@   rr   rs   r]  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   CF==GGc                  Z   t          d          5  t          j        j                                         t
                                           t          j        	                                } t          j        | _        |                     d           ddd           dS # 1 swxY w Y   dS )u?  
    Команда для системы обновления. Сохраняет eva_version в CmfGlobalSettings
    Если версии будут отличаться, в случае запуска образа с несовместимой версией БД,
    система вернет ошибку
    Tr   rz  N)r@   rn   ro   rp   rq   rr   rs   r]  CmfGlobalSettingsr   rQ   EVA_VERSIONeva_versionr  )gss    r   save_version_to_dbr    s     
t	,	,	,    &11333%))+++
$                                   s   BB  B$'B$rg  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   rX  ztest.py.tmplr.   r  r;   )r  r  r   r   r   rQ   r  r  r   r   rm   isdirmakedirsrc  r  rd  r  )rg  _options_loader
_jinja_envfolderr.   rl  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,   rd   Nzmailserver.z:25zuser@F)r@   r]  CmfPluginMailBoxget_local_mailboxload_fieldsr   rQ   APP_FQDNrm   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    rLtc                       td          j3        j4        5                                 tl          7                                 d S tq          d.tL          j9        d                    tL          j:                             tU          d/           d S )0Ncommandzrun command)r  helpz--emailu"   Почта (для init_demo_data)z--without-context
store_trueu4   Не инициализировать app и context)actionr  r   )celery_worker
job_workerr   rH   r  r   r  r	  r  r  rD  us   Нужно указать почту владельца CRM для инициализации демо-данныхrS  rm  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!  r{   r"  )r>  r5  zbin.zsbin.cache_flushdbu$   Команда не найдена:    );r   argparseArgumentParseradd_argumentr   parse_known_argsrE   r  r   r`   r   r   r  r  r   r  r	  r  r  rC  rD  rS  rm  r  cmf.make_modelsr  r   rQ   r  r   r   r   r   movermtreer1   r  r)  r  r  isattyr"  exitrc  r  r>  
startswithr2   import_modulerG   rn   ro   rp   rq   rr   rs   r   r2  r3  )	parserr{   unknown_argsr  dir_pathdst_pathrk  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 -----		(	(			&113334cnchhsxFXFXYYYS					s   P??QQr   )TNNN)NNN)Mr:   rY   cmf.monkey_patchrn   r  r  r   r  r   r   r   r  r   collectionsr   pathlibr   r   cmf.system_datar   r   rS   rT   rU   CUR_DIRr   r   r  r   r   
work_modelr&   r  rv   r3  r*   r6   r]  cmf.fields.cmf_relation_cacher>   build_fields_cacher   r?   r@   rA   rB   rC   rD   rE   rF   r  rG   rH   rI   r`   r   r   r   rP   r   r   r   r   r)  r>  rD  rS  rm  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& & & &8,I ,I ,I^  
! 
! 
!G1 G1 G1T ' & & & & && & &.y y yH( ( (73 73 73 73t  <
  
  
 C C CA A A A:] ] ]@* * *ZQ Q Q/& /& /&d     = = = = =" # # S    ,J J J J Jr   