
    ʥi              	           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(                  j+                  ej(                  j-                  e            Z ededed	 ej4                         ej6                  
       d Z e         G d d      Z e       Zej?                          ddl  ddl!Z!dejD                  v rejG                          n(ejI                  e%       ddl&m'Z'  e'jP                          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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&ZId/d'eHd(eHd)eHfd*ZJd+ ZKd, ZLy)0u   Magage.py занимается построением аппликейшена и не переопределяет функции и не создает функции в апп    N)OrderedDict)Path)fields)init_system_datazrunning:inz	from cwd:filec                  8   t         j                  j                  t        j                         d      } t         j                  j                  t        j                         d      }t         j                  j	                  |       st        j                  ||        y y )Nzcustom/config.pyzcustom/config.py.example)ospathjoingetcwdexistsshutilcopy)config_pathexample_paths     ./cmf/manage.pycheck_configr      s[    '',,ryy{,>?K77<<		-GHL77>>+&L+. '    c                   (    e Zd ZdZd Zd Zd Zd Zy)WorkModelFileu  
    Почему бы не создать целый класс для одного файла, гг?
    Захотел прибить гвоздями весь код, работающий с ним в одно место, а не размазывать по manage.py
    c                     t        t        j                         d      | _        | j                  dz  | _        | j                  dz  | _        y )Ntmpz__autogen_models_tmp.pyz__autogen_models.py)r   r   r   app_tmpfilepath	orig_pathselfs    r   __init__zWorkModelFile.__init__+   s8    BIIK/%>>&;;r   c                 r    | j                   j                  d       | j                  j                  d       y)    Зануляем файл чтобы иметь объект модуля-заглушки для Чёрной Магии (тм) T)exist_okz# clean
N)r   mkdirr   
write_textr   s    r   	clean_tmpzWorkModelFile.clean_tmp0   s)    D)  -r   c                 <    | j                   j                  d       y)r"   T)
missing_okN)r   unlinkr   s    r   clean_modelszWorkModelFile.clean_models5   s    .r   c                 B   | j                   j                  | j                   j                   dt        j                                }|j                  | j                  j                                |j                  | j                          t        j                  |       y)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   sp    
 #mm559K9K8LAbiik]6[\&&t~~'?'?'AB""4==1!r   N)__name__
__module____qualname____doc__r    r&   r*   r6    r   r   r   r   &   s    <
.
/"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
                  j                  t        j                  j                  t        j                  j                  t                    dz          t
        j                  r&dd l}|j                  t
        j                  dd       t         j#                  t               t%                t'                t)                	 t+               5  t-                t/                d d d        i }| r	d| v rd|d<    |di | y # 1 sw Y   xY w# t0        j2                  $ r}t
        j4                  rn Y d }~Ld }~ww xY w)	Nr   )deferred_job_workerRedisMonitor/config_load.pyT)dsnsend_default_piitraces_sample_ratez--single_queuesingle_queuer;   )cmf.cmf_deferred_jobrK   rL   install_traceback_email_notifyr?   configfrom_pyfiler   r   dirnameabspath__file__SENTRY_INIT
sentry_sdkinit
SENTRY_DSNsocketioinit_apprE   start_viewsrG   r@   rA   rB   redisConnectionErrorCACHE_REDIS_FAILOWER)cmd_args_kwargsrK   rL   rZ   e
job_kwargss          r   start_job_workerrg   b   s   F #$JJ
125FF !!!  	 	
 cNMI] 	*N')	* J$0%)
>"%*%	* 	*    && s0   !
D* +D D* D'#D* *E=EEc                  H   t                t        j                  j                  t        j
                  j                  t        j
                  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 st        |j                  d      d         }& t                t        j                   j"                  j%                          t&        j)                          t        j*                  rdt        j,                  d<   |rddlm} t3        j4                  |d       t        j6                  t        _        t;                t=        j>                  t        fd||d| y )NrM   Fuse_reloaderz--auto-reloadTz--no-debuggerz--with-celeryz--with-jobsi  z--port=   1SOCKETIOr   )rK   )rQ   z0.0.0.0)hostportdebug) rS   r?   rT   rU   r   r   rV   rW   rX   disable_permissionsfirst_request_init_skipr_   intsplitrG   cmfappREDIS_SETTINGS_MANAGER
init_redis	CMF_CACHEflushdbWHATSAPP_MESSENGER_URLenvironrR   rK   geventspawnIS_BOX_VERSIONcache_optimizerE   r]   run)argskwargsoptionsrp   	with_jobsro   argrK   s           r   startr      sS   "$JJ277??277??8+DEHYYZ#C #(CMG
 $GN$"&E$I$-4"7	D *s?syy~a()D* IGG""--/$$!$

:<(t<..CNLLH94uHHr   c                     t        dd      5  t                t        j                  j                  j                          t        j                          ddlm	}   |         t                d d d        y # 1 sw Y   y xY w)NTF)preprocess_requestr   before_request)r@   rH   ru   rv   rw   rx   ry   rz   cmf.appr   r   r   s    r   cmf_init_dbr      s[     
Te	4  		&&113*  s   AA55A>c                     d } t        t        dd       sy t        j                  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        _        y )
Nc                      y Nr;   )xs    r   <lambda>z0install_traceback_email_notify.<locals>.<lambda>       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                  |j                        }dt        |       dd	|j                         g}|j                  d
       |j                  d       |j                  d	       |j                  }t!        |j#                               }	|	D ]'  }
|j                  |
d|j%                  |
             ) d
j'                  |      d
z   } |d      }||d<   |d<   dj'                        |d<    |d      }|j)                  |        ||      }|j)                  |       	  |dd      }|j/                          |j1                  |j3                                |j5                          y # t*        $ r$}t-        |j                         |       Y d }~y d }~ww xY w)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appendr|   sortedkeysgetr   attachOSErrorprintehlosendmail	as_stringquit)	exceptionr   	__requestr   r   r   subjectmsg_contentsr|   environkeyskeybodymsg_rootmsg_alternativeplainsmtpre   	mail_frommail_tosubject_prefixs                    r   traceback_exceptionz;install_traceback_email_notify.<locals>.traceback_exception   s   . 6,*11I,,imm
 ;	N  "
 	D!23H%##W\\^, 	DCCS1A BC	D yy&- +%$7+'6(u%	2A>D
 			i(*<*<*>?		  	)&&(!,	s   
F   	G)GG)getattrrT   logginginfor   
isinstancelisttupler   r   r?   register_error_handler	Exceptioncmf_exception_mail)r   r   r   r   r   s     @@@r   rS   rS      s    '63T:LL12 ++G$ MLM  -t 434  22I7 >=>  AAN.` y*=>0Cr   )CustomJSONProviderc                     t         j                  d       t        j                  j	                  d      rt         j                  d       y d} t        j                  j	                  |       r:t        j                  |       }t        j                         |j                  z
  dk  ry t         j                  d       t        j                  ddgt        j                  	      }|j                         d
   j                  d      }t         j                  |j                                |j                         dk(  rt        d      j!                          t        |       j!                          y )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   rp   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     s   MMNO	ww~~./BC8	ww~~)*''-.99;)))G3LLOP	+W5jooG   "1%,,W5FLL ||~'%&,,.	##%r   c                       y)u   Не нужно сейчас.
     Считаем, что когда в проект будут копироваться сложные файлы, которые нужно обновлять - доделаемNr;   r;   r   r   check_project_need_update_cmfr   )  r   r   c                  R   t         j                  d       t        j                  dgt        j                        } | j                         d   j                  d      }t         j                  |       t        j                  j                  d      rt        j                  d       y y )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   M  sv    LL)* 9::??SG  "1%,,W5FLL	ww~~*+
		&' ,r   c                 `   d }|st        d      }	 |r|j                          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                  j                         |s | st        j                   j#                         }|rIdat'        |t)               t                      t$        |r" |j*                  t        j,                           S S | r\t.        j0                  j3                  d      }|fd}t.        j0                  j5                  |      rt7        j8                  |       t;        j<                  |       t7        j>                  d	       t7        j>                  d
       t7        j>                  d       t7        j>                  d       t7        j>                  d       t7        j@                  tC        jD                  t                     jF                         |rdtH        _%        tM        dt        jN                         |jQ                  t                      |r# |        ntM        dt        jN                         |r" |j*                  t        j,                           y y # |r" |j*                  t        j,                           w w xY w)NTinit_views_and_dsr   rI   commit_with_eventtimeitz~/.cmf_historyc                 .    t        j                  |        y r   )readlinewrite_history_file)history_paths    r   save_historyzcmf_shell.<locals>.save_historyv  s    ++L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   __coderu   r   pp__history_pathr   s                 r   	cmf_shellr"  V  s   L"T:13""$G7*]],,-kYY^^%F GFH-4 !L!!3<<>2 3 WW//0@AN*8 : ww~~n-**>:OOL)##O4##$BC##$CD##$DE##$FG"";#8#8#B#K#KL&-#7cjjIOO&(O+
##**5!L!!3<<>2 <!L!!3<<>2 s   B1J (E: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        j                  d	      j!                  d
       	fd}|j                  } |       }d|j"                  _        t'        d      5  dt(        _        t-        dt.        j0                          | |        	        d d d        y # 1 sw Y   y xY w)Nr   )embed)
get_configr   r   r   )	VerboseTBz
bg:#039dfcparsoWARNINGc                                t        j                  t        j                  t        j                  gt        j                         y r   )r   execvr  
executableargv)r  s   r   r3   zipython.<locals>.reload  s*    

#..!<388!<=r   neutralTr   ishellr   r   )rT   )IPythonr$  traitlets.configr%  r   rI   r   r   r   r   r   IPython.core.ultratbr&  _tb_highlightr   	getLoggersetLevelInteractiveShellEmbedcolorsr@   r  r  r   r  r  )
r$  r%  r  r   r   r&  r3   r   cr  s
            @r   ipythonr8    s    +C3& /*I g''	2> 
BA%.A"	t	, &3#**EQ
	  s   
7C

Cc                     t        d      5  dt        j                  d<   ddlm} |j                  |        ddd       y# 1 sw Y   yxY w)u|   
    :param email: почта админа созданная на этапе acrm_assign.sh --admin=test@carbonsoft.ru
    Trl   NO_CACHEr   )	demo_dataN)r@   r   r|   ru   r;  create)emailr;  s     r   init_demo_datar>    sB    
 
T	  !$

: 	"     s   +A  A	c                  j   t               j                         } | dz  }| dz  }|j                         rt        d|j	                         d       y ddlm} |j                  d      }|j                  |j                  d             |j                  |j                         j                  d             y )	Nztmp/jwt_rsaztmp/jwt_rsa.pubFilezalready existsr   )RSAi   PEM)r   resolver   r   absoluteCrypto.PublicKeyrA  generatewrite_bytes
export_key	publickey)proj_dirrsa_private_pathrsa_public_pathrA  r   s        r   generate_rsa_keypairrM    s    v~~H-/!22O f&//13CD$
,,t
C  !67 : :5 ABr   c                    dt         j                  d<   t                t                g }t	        t
              D ]  }|dv rt	        t
              |   }t        j                  |      s0t        |t        j
                  j                        sUd|j                  v rd|j                  v rr|j                  |        t               }|D ]  }|j                  |      } | rAt        | d      5 }|j!                  t"        j%                  |t&        d             d d d        y t)        t"        j%                  |t&        d             y # 1 sw Y   y xY w)	Nrl   r:  )CmfRFilerightleftw+   )clsindent)r   r|   r_   rG   varsmodelsinspectisclass
issubclassru   	BaseModelr   r   r   dump_data_dictopenwritejsondumpsr   r   )	file_path
all_models
model_namemodelresfs         r   dump_dbrg    s'    BJJzMIJ6l !
&VZ(u%%!5!56ell"v'=% ! -C (""3'( )T" 	GaGGDJJs(:1JEF	G 	G 	djj"4Qj?@	G 	Gs   .,E		Ec                 V   dt         j                  d<   t                t                t        j
                  j                  j                          t        | d      5 }t        j                  |j                               d d d        dfd	} |         |d       y # 1 sw Y   xY w)Nrl   r:  rc                    D ]  }	 t        t              |   }d }|   D ]K  }t        d       |j                  j	                  |j
                        }|j                  |j
                  j                  |d   k(        j                         }|rt        d       |d   }| st        d        |d      }|D ]m  }|d	k(  rt        d
       |j                  |d      dk(  r+t        ||      st        d| d| d       Jt        ||      }t        t        |      t        j                        sz|j                  |      |j                   st#        |t        j$                        s2t#        |t        j&                        r|j(                  s|j*                  r| st#        |t        j,                        r||   D ]  }		 t        j&                  j/                  |	d         }
|
j                  j	                  |
j
                        }|j                  |
j
                  j                  |	d   k(        j                         }|r|j1                  |d           t#        |t        j2                        r|j                  |dz         rԐt#        |t        j&                        r8|j(                  s|j*                  r 	 t5        ||j6                  d d ||          (t#        |t        j:                        r"||   I|j=                  ||         |_        d||   |_        p |j                  dd      |dk(  rt        d|j                          :|j?                  d       N |sq|j                  jA                           y #  t        | d       Y xY w#  t        d|	d           Y xY w#  t        d| d|j8                   d|j                          Y 5xY w)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)!rV  rW  r   dpquery_deprecateddp_modelfilterrk  allr   hasattrr   rZ  typer   CmfTypenullabler   
CmfRelBaseCmfTUUIDforeign_keyforeign_keys
CmfM2MBaseget_cls_by_tuuid_strr   CmfRelationBasesetattr
class_name_valueCmfDateTimecastsaver  )with_relrc  rd  inst	inst_dictqinstsr   fielditem
list_modelre  s              r   r   zrestore_db.<locals>.process  s    N	!JVZ0 D _ E*	>?HH--enn=!2!2io!EFJJL+& 8D# /* t,D$ 36Ch KM  }}S"-3 "4- 23%7OPZ|[\]^ #D#.E%d5k6>>B  }}S)1%.. "5&*;*;<ESYSbSbAcFKFWFW[`[m[m  zB !%):):;$-cN 	)D)-3__-Q-QRVW[R\-]
$.MM$B$B:CVCV$W()1D1D1G1G4PT:1U(V(Z(Z(\#($)LLq$:	) $E6+A+AB(}}S5[9$#E6??;ARARV[VhVh%#D%*:*:3B*?3P $E6+=+=>$S>1$',zz)C.'A'0~g36j ==.6:;RA$''KL		D	)KE*L  ]N	!$89:X) %([\`ae\f[g&h i (%!"NseSVW\WcWcVdd{  }A  }D  }D  |E  !F %s$   NBN)ON&)N?*O/	T)F)r   r|   r_   rG   ru   rv   rw   rx   r]  r_  loadsr  )ra  rf  r   re  s      @r   
restore_dbr    s|     BJJzMIGG""--/	i	 #jj"#O!d IDMo# #s   $BB(c            
      4   dt         j                  d<   t                t                t        j
                  j                  j                          t                ddl	m	 ddl
m}  t        j                  d      5   |         t        j                  j!                  d      }t        j"                  j!                  d	      }fd
} |       }t%        d      D ]  }|j&                  j)                  |       |j+                           |d       t-        dt/        |j&                  j1                  d                    |j&                  j3                  |       |j+                           |d        |j5                          d d d        y # 1 sw Y   y xY w)Nrl   r:  r   )r   r   /z
DEV-004234)r   z/cmfproject-6597795c-95ce-11ea-9023-6f4fdd48682bc                  L                    dfd	} fd| _         | S )Nc                 <    t        |         z
                 y r   r   )snowr   s    r   wrapz&prod_test.<locals>.timer.<locals>.wrapY  s    a#&fr   c                  ,    t        d         z
        S )Nendr  )r   r   s   r   r   z*prod_test.<locals>.timer.<locals>.<lambda>^  s    uUDFUN; r   ) )r  )r  r  r   r   s    @@r   timerzprod_test.<locals>.timerU  s$    FE&C
 <DHKr   
   r   
all_nested)r  r   )r   r|   r_   rG   ru   rv   rw   rx   rH   r   r   r   r?   test_request_contextrW  rs  r   
CmfProjectrange	executorsr   _test_save_commitr   lenr  r   r  )r   taskprojectr  tir   s         @r   	prod_testr  F  s.    BJJzMIGG""--/I&		!	!#	&  ~~!!|!4##''-^'_	 Gr 		ANN!!'*""$hK,DNN$=$=$=$N OPNN!!'*""$hK		 	
A     s   <D	FFc                 p   t         j                  t         j                  t        j                  j                  t        j                  d      g      d      }ddd|j                  d<   t        j                  |       } t        j                  j                         j                  d       d|  }t        j                   d	| d
}|j                  d      j                  | |      }t!        |d      5 }|j#                  |       d d d        t%        d|        t%        d|        y # 1 sw Y   &xY w)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_namerR  #   Сгенерирован файл: u7   Команда для запуска: python3 -m patch.)jinja2EnvironmentFileSystemLoaderr   r   r   rT   PROJECT_DIRpoliciescmfutiltranslit_stripdatetimer  strftimeget_templaterenderr]  r^  r   )r.   	jinja_envr  ra  
patch_textrf  s         r   	new_patchr  s  s   ""&&V5G5G(Y'Z[" # $I @ESW.XI*+!!$'D$$((*33LAB!D6JI%%&gi[<I''7>>$Zc>dJ	i	 !	
	/	{
;<	CI;
OP s   5D,,D5c                  N   fd} g }t         j                  j                  t        j                   d      syt        j
                  t        j                   d      D ]<  }t        j                  d|      s|j                  |j                  d      d          > |j                          |st        d       yt        d	      5  t        j                          t        j                   j#                  d
gdg      }|sZ|d    |        |D ]G  t        j                   j%                        r$t        j!                        j'                          I n5t)        |j*                  j,                  d      }|D ]  |kD  s	 |         ddd       y# 1 sw Y   yxY w)u?   
    Накладываем патчи по очереди
    c                    t         j                  j                          t        j                  j                        rt        d d       y dt        j                   d|  d}t        j	                        j                          	 t        |dddd	      \  }}}t        d
 d|        t        d
 d|        t        j                  j                  j                          y #  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   flushrW  CmfPatchsgetr   rT   r  r  run_bash_commandrv  r  )r  cmderrcodeouterrr.   s        r   apply_patchzpatch.<locals>.apply_patch  s    

??T*IdV#;<=V''((;J<qIT"'')	 05W[:>$!PGS#F4&	#/0F4&	#/0OO%%'	]_ceops   AC+ +C;r  Nz[0-9]+_.*\.pyr,   r   u0   Не найдено ни одного патчаTr   r.   r<   )order_byr   ro  r  202306050000)r   r   r   rT   r  listdirrematchr   rt   sortr   r@   ry   rz   rW  r  r   r  r  maxr.   value)r  patchesfilenamefirst_patchfrom_patch_limitr.   s        @r   patchr    si   $ G77>>V//089JJ&"4"4!5W=> 388$h/NN8>>#.q123 LLN@A	t	, &oo))F8SE)J2;D 6+++6OOO.3356  #;#3#3#9#9>J &**%&& & &s   	A,F6AF
FF$c                  H   t        d      5  t        j                  j                  j	                          t
        j                          t        j                  j                         } t        j                  | _        | j                  d       ddd       y# 1 sw Y   yxY w)u?  
    Команда для системы обновления. Сохраняет eva_version в CmfGlobalSettings
    Если версии будут отличаться, в случае запуска образа с несовместимой версией БД,
    система вернет ошибку
    Tr   rt  N)r@   ru   rv   rw   rx   ry   rz   rW  CmfGlobalSettingsr   rT   EVA_VERSIONeva_versionr  )gss    r   save_version_to_dbr    sr     
t	,  &&113%%))+++
$     s   BBB!ra  c                    i }t         j                  t        j                  j	                  t
        j                  d      g      }||d<   t        j                  di |}t        j                  j                  |       rt        d|  d       y t        j                  j                  |       \  }}|j                  d      d   }t        j                  j                  |      st        j                  |       t        | d      5 }|j                  d      }|j                  |j!                  d	|i             d d d        t        d
|         y # 1 sw Y   xY w)Nzcmf/contribr  u	   Тест u    уже существуетr  r   rR  ztest.py.tmplr.   r  r;   )r  r  r   r   r   rT   r  r  r   r   rt   isdirmakedirsr]  r  r^  r  )ra  _options_loader
_jinja_envfolderr.   rf  templates           r   new_testr    s   H%%rww||F4F4F'V&WXG HX##/h/J	ww~~i 	)$@AB77==+LFD::eQD77== 
F	i	 1!**>:	/01 
/	{
;<1 1s   4EEext_smtploginpasswordc                 :   t        d      5  t        j                  j                         }|j	                  g d       dj                  t        j                  j                  d      dd       }| sd| d} |sd| }| |j                  _
        ||j                  _        ||j                  _        d	|j                  _        d	|j                  _        d|j                  _        |j                  j!                          t#                ddd       y# 1 sw Y   yxY w)
u`   Настраиваем в ножницах локальный почтовый сервер
    T)zplugin.ext_smtpzplugin.loginzplugin.passwordzplugin.use_tlszplugin.verify_sslzplugin.ext_portr,   rk   Nzmailserver.z:25zuser@F)r@   rW  CmfPluginMailBoxget_local_mailboxload_fieldsr   rT   APP_FQDNrt   pluginr  r  r  use_tls
verify_sslext_portr  rF   )r  r  r  mail_boxdomains        r   set_local_mailserverr    s     
T	 **<<> / 	0&////4QR89$VHC0HF8$E#+  %#+ "'%*"#' !  s   C<DDc                      ddl m}  t        d      5  t        j                  j
                  t        j                  j                          | j                          d d d        y # 1 sw Y   y xY w)Nr   CmfCustomClassT)	cmf.models.base_modelr  r@   r?   REDIS_DBr`   rw   rx   write_custom_fields_from_dbr  s    r   init_custom_fieldsr
    sP    4	T	 5<<%&&113224	5 5 5s   A	A$$A-c                  0   t         j                         } | j                  dt        d       | j                  dt        d       | j                  ddd	       | j	                         \  }}t                |j                  d
k(  r	t        |  y |j                  dv rt        |       y |j                  dk(  rt                y |j                  dk(  rt                y |j                  dk(  rt                y |j                  dk(  rt        dj                  |             y |j                  dk(  rt        dj                  |             y |j                  dk(  r	t        |  y |j                  dk(  rt!                y |j                  dk(  rt#                y |j                  dk(  r)|j$                  sJ d       t'        |j$                         y |j                  dk(  rt)                y |j                  dk(  r	t+        |  y |j                  dk(  r	t-        |  y |j                  dk(  r5ddlm} t3        t4        j6                   d      }t3        t4        j6                   d      }|j9                         rt:        j<                  j9                  t4        j6                   d      rr|j9                         r@t?        j@                  t4        j6                   d| d        t?        jB                  |       n"|jE                  t4        j6                   d       t:        j<                  j9                  t4        j6                   d!      rtG        d"d#$        |        y |j                  d%k(  rtI                y |j                  d&k(  rRtK        tL        jN                  jQ                         d'j                  |      |jR                  (      }|rtU        |       y y |j                  d)k(  rkt3        |d         jW                         5 }|jY                         }d d d        tK        tL        jN                  jQ                         ||jR                  *       y |j                  d+v rt[                y |j                  j]                  d,      s|j                  j]                  d-      r t^        ja                  |j                         y |j                  d.k(  rGtc                td        jf                  jh                  jk                          tl        jo                          y |j                  d/k(  r!tp        jr                  ju                  d01       y tw        d2tL        jx                  dj                  tL        jz                               tU        d3       y # 1 sw Y   yxY w)4N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  r>  us   Нужно указать почту владельца CRM для инициализации демо-данныхrM  rg  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  )r8  r.  zbin.zsbin.cache_flushdbclear_s3_cacheT)forceu$   Команда не найдена:    )>argparseArgumentParseradd_argumentr   parse_known_argsrE   r  r   rg   r   r   r  r  r   r  r  r  r  r=  r>  rM  rg  r  cmf.make_modelsr  r   rT   r  r   r   r   r   movermtreer1   r  r
  r"  r  r  isattyr  exitr]  r  r8  
startswithr2   import_modulerG   ru   rv   rw   rx   ry   rz   rW  rO  r  r   r+  r,  )	parserr   unknown_argsr  dir_pathdst_pathre  script_filer  s	            r   mainr(    s7    $$&F
	-@
	2VW
+LG}~002D,N||w|	8	8&		%		"		$		$#((<()		#,'(	/	/l+		 	-	-	)	)zz  	Q  Q  	Qztzz"	/	/		"		%L!		"86--..IJK6--..BCD??63E3E2FFt0u!v v1122`afneo  pC  dD  Eh'6#5#5"66J KL77>>V//00WXY  `  gl  m	-	-		 CII$4$4$6tyy?Vhlh|h|}I 		!,q/"'') 	([ %%'F	(		((*6^b^r^r	t	.	.			 	 	(DLL,C,CG,L-		(	&&113	)	)&&T&24cnnchhsxxFXYS	!	( 	(s   VVr   )TNNN)NNN)Mr:   r`   cmf.monkey_patchru   r  r  r   r  r   r   r   r  r   collectionsr   pathlibr   r   cmf.system_datar   r   rV   rW   rX   CUR_DIRr   r   r  r   r   
work_modelr&   r   r}   r,  r*   r6   rW  cmf.fields.cmf_relation_cacher>   build_fields_cacher   r?   r@   rA   rB   rC   rD   rE   rF   r   rG   rH   rI   rg   r   r   rS   r   r   r   r   r"  r8  r>  rM  rg  r  r  r  r  r  r   r  r  r
  r(  r;   r   r   <module>r1     s   y       	   
  #   ,
''//"''//(3
4 j(D';			#** U/ " "< _
 
      OOF <$M$$&   F E"&J,I^G1T '&.yH(73t<
 CA:]@*ZQ/&d = ="# # S *5Mr   