
    oiW              	       &   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 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- ZMy)1u   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                 L   ddl m}m} t                t        j
                  j                  t        j                  j                  t        j                  j                  t                    dz          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# t(        j*                  $ r}t
        j,                  rn Y d }~Ld }~ww xY w)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 #$JJ
125FF cNMI] 	*N')	* J$0%)
>"%*%	* 	*    && s0   +
C4 5C(
C4 (C1-C4 4D#DD#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   )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   ~   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   rn   ro   rp   rq   rr   rs   cmf.appr   r   r   s    r   cmf_init_dbr      s[     
Te	4  		&&113*  s   AA55A>c                      t        t        dd       r}t        j                  d       ddlm}  ddlm} ddlm	}  | t        t        j                        } ||j                        }|j                  t        j                          ||       y y )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      sc    v|T**+.8,!2!23!&--0	7==)i  +r   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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   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)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 ++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   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     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   Q  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_historyz  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   __codern   r  pp__history_pathr   s                 r   	cmf_shellr*  Z  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   )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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
    Tre   NO_CACHEr   )	demo_dataN)r@   r   ru   rn   rB  create)emailrB  s     r   init_demo_datarE    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.PublicKeyrH  generatewrite_bytes
export_key	publickey)proj_dirrsa_private_pathrsa_public_pathrH  r   s        r   generate_rsa_keypairrT    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)	Nre   rA  )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_dbrn    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)Nre   rA  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)!r]  r^  r   dpquery_deprecateddp_modelfilterrr  allr   hasattrr   ra  typer   CmfTypenullabler   
CmfRelBaseCmfTUUIDforeign_keyforeign_keys
CmfM2MBaseget_cls_by_tuuid_strr   CmfRelationBasesetattr
class_name_valueCmfDateTimecastsaver&  )with_relrj  rk  inst	inst_dictqinstsr   fielditem
list_modelrl  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   ru   rX   rG   rn   ro   rp   rq   rd  rf  loadsr  )rh  rm  r   rl  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)Nre   rA  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>.wrap]  s    a#&fr   c                  ,    t        d         z
        S )Nendr  )r   r   s   r   r   z*prod_test.<locals>.timer.<locals>.<lambda>b  s    uUDFUN; r   ) )r  )r  r  r   r   s    @@r   timerzprod_test.<locals>.timerY  s$    FE&C
 <DHKr   
   r   
all_nested)r  r   )r   ru   rX   rG   rn   ro   rp   rq   rH   r   r   r   r?   test_request_contextr^  rz  r   
CmfProjectrange	executorsr   _test_save_commitr   lenr  r   r  )r   taskprojectr  tir   s         @r   	prod_testr  J  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_namerY  #   Сгенерирован файл: u7   Команда для запуска: python3 -m patch.)jinja2EnvironmentFileSystemLoaderr   r   r   rQ   PROJECT_DIRpoliciescmfutiltranslit_stripdatetimer  strftimeget_templaterenderrd  re  r   )r.   	jinja_envr  rh  
patch_textrm  s         r   	new_patchr  w  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   flushr^  CmfPatchsgetr   rQ   r  r  run_bash_commandr}  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   rv  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    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   r{  N)r@   rn   ro   rp   rq   rr   rs   r^  CmfGlobalSettingsr   rQ   EVA_VERSIONeva_versionr  )gss    r   save_version_to_dbr    sr     
t	,  &&113%%))+++
$     s   BBB!rh  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   rY  ztest.py.tmplr.   r  r;   )r  r  r   r   r   rQ   r  r  r   r   rm   isdirmakedirsrd  r  re  r  )rh  _options_loader
_jinja_envfolderr.   rm  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,   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
    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_DBrY   rp   rq   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                  
   t                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} t5        t6        j8                   d      }t5        t6        j8                   d      }|j;                         rt<        j>                  j;                  t6        j8                   d      rr|j;                         r@tA        jB                  t6        j8                   d| d        tA        jD                  |       n"|jG                  t6        j8                   d       t<        j>                  j;                  t6        j8                   d!      rtI        d"d#$        |        y |j                  d%k(  rtK                y |j                  d&k(  rRtM        tN        jP                  jS                         d'j                  |      |jT                  (      }|rtW        |       y y |j                  d)k(  rkt5        |d         jY                         5 }|j[                         }d d d        tM        tN        jP                  jS                         ||jT                  *       y |j                  d+v rt]                y |j                  j_                  d,      s|j                  j_                  d-      r t`        jc                  |j                         y |j                  d.k(  rGte                tf        jh                  jj                  jm                          tn        jq                          y ts        d/tN        jt                  dj                  tN        jv                               tW        d0       y # 1 sw Y   IxY w)1N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  rE  us   Нужно указать почту владельца CRM для инициализации демо-данныхrT  rn  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#  )r?  r6  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  rD  rE  rT  rn  r  cmf.make_modelsr  r   rQ   r  r   r   r   r   movermtreer1   r  r  r*  r  r  isattyr#  exitrd  r  r?  
startswithr2   import_modulerG   rn   ro   rp   rq   rr   rs   r   r3  r4  )	parserr{   unknown_argsr  dir_pathdst_pathrl  script_filer"  s	            r   mainr-    s    $$&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4cnnchhsxxFXYS		( 	(s   U%%U/r   )TNNN)NNN)Nr:   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   r4  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?  rE  rT  rn  r  r  r  r  r  r   r  r
  r  r-  r;   r   r   <module>r6     s   y       	   
  #   ,
''//"''//(3
4 j(D';			#** U/ " "< _
 
      OOF <$M$$&   F E&8,I^
!G1T '&.yH(73t<
 CA:]@*ZQ/&d = ="# # S *5Lr   