
    Fi#                     @    d dl T d dlmZ  G d dej                  ZdS )    )*)cmf_global_settingsc                   ,    e Zd ZdZdZej        j        g dz   Zed             Z	ed             Z
ed             Zed             Z fdZd	 Zed
ddefd            Zed             Zedefd            Zedefd            Zed             Z xZS )CmfGlobalSettingsuF   
    Глобальные настройки приложения
    T)change_page_settingsenabled_plugin_nclisteva_available_versioneva_backup_entryeva_backup_historyeva_cancel_upgradeeva_current_sheduled_upgradeeva_current_versioneva_restoreeva_shedule_upgradeeva_upgradeeva_upgrade_entryeva_upgrade_historyget_settingsperformance_server_test
public_getpublic_get_page_customizepublic_get_settingspublic_listreset_page_settingsfstek_set_defaulthtml_clean_attributessend_front_statsbanner_publishc                     d S N clsargskwargss      #./cmf/models/cmf_global_settings.pyr   z%CmfGlobalSettings.public_get_settings%   s	     t    c                     d S r    r!   r"   s      r&   r   zCmfGlobalSettings.public_list+   s	     tr'   c                     d S r    r!   r"   s      r&   r   zCmfGlobalSettings.public_get0   s    tr'   c                 F    t           j                            dgd          S )Nr   T)fieldscache_inmemory)modelsr   get)r#   s    r&   r   zCmfGlobalSettings.get_settings4   s     '++C5+NNNr'   c                 ^    |                                    t                      j        |i |S r    )emitsupersave)selfr$   r%   	__class__s      r&   r2   zCmfGlobalSettings.save8   s+    		uww|T,V,,,r'   c                 B   t                               d          }|si }i t           _        |                    | j        j                  }|ci }| j        j        |d<   t           j        ot           j        j        j        |d<   d|d<   d|d<   d|d<   | j        |d<   g |d	<   g |d
<   g |d<   g |d<   t          | d          r| j        j	        r| j        j        |d<   t          | d          r| j
        j	        r| j
        j        |d<   t          | d          r| j        j	        r| j        j        |d<   |                    d          pg }| j        r|                     d          D ]\  }}|dv rt          | |          }|j        |j        k    r+t                               d| j         d|j                    Vt#          |t$          j        j                  rt#          |j        t*                    s,|j        %|                    |j        j        j                   nCt#          |j        t*                    r)|j        D ]!}|                    |j        j                   "|j        durt#          |t$          j        j                  rt#          |j        t*                    s,|j        %|                    |j        j        j                   nCt#          |j        t*                    r)|j        D ]!}|                    |j        j                   "|d
                             |           |d                             |           d}| j        rd}|d                             |           t+          t5          |d                             |d<   t+          t5          |d
                             |d
<   t+          t5          |d                             |d<   t+          t5          |d	                             |d	<   |t           j        | j        j        <   dS )u   
        Сообщаем во фронт о необходимости обновить объект
        :return:
        	emit_listNidcmf_modified_by	parent_id	person_idplace
class_namerelation_personschanged_fieldschanged_relationsactionT)
is_changed)cmf_modified_atr8   cmf_viewed_atcmf_viewed_bycmf_locked_atcmf_locked_byzemit: FIXME is changed bug ..updateinsert)gr.   r6   r7   valuecurrent_personr<   hasattrr9   
is_definedr:   r;   rA   itemsgetattrolddebug
isinstancecmfr+   
CmfRelBaselistappend_oldextendis_newset)	r3   r6   bodyr?   kvfieldir@   s	            r&   r0   zCmfGlobalSettings.emit<   s    EE+&&	 	IAK}}TW]++<DDJ&'&6&T1;K;N;TD"# $D $D DM!%D')D#$%'D!"(*D$%DN4%% 	5$.*C 	5 $ 4D4%% 	5$.*C 	5 $ 4D4!! 	-dj&; 	- J,DM HH%899?R? 	1

d
33 1 11 G G G a((9''GG^$/^^EL\^^___eSZ%:;; A%ek488 AU[=T)001EFFFF#EK66 A!& A AA-44QTZ@@@@:S((Zsz?T-U-U(%ei66 A59;P)001CDDDD#EIt44 A!& A AA-44QTZ@@@@%&--a0000 !(():;;;; 	FXf%%%c$x.1122X!%c$/?*@&A&A!B!B$(T2E-F)G)G$H$H !#'D1C,D(E(E#F#F %)DGM"""r'   N)backup_namera   c           
      >   dd l }t          j                                         g d}| r|                    |            |                    |ddt          dd          t          dd                    }|                                 |j        dk    s
J d            |S )	Nr   )/usr/bin/bashz/opt/bin/pg_backupbackupT"/var/log/eva-backup-subprocess.loga+&/var/log/eva-backup-subprocess.err.log)	close_fdsstart_new_sessionstdoutstderru-   Не удалось сделать бекап)	
subprocessr-   CmfAccessListcheck_admin_moderW   Popenopencommunicate
returncode)ra   r$   r%   rl   cmdprocs         r&   	pg_backupzCmfGlobalSettings.pg_backup   s    --///??? 	$JJ{###ttTXY}  @D  UE  UE'+,TVZ'['[   ] ]!###%T###r'   c            	      $   dd l }dd l}g d}|                    |d|j        t	          dd                    }|                                \  }}|j        }|rt          d|           |                                	                    d          S )	Nr   )rc   /opt/bin/pg_restorerV   Trg   rf   )rh   rj   rk   u4   Произошла ошибка при вызове 
)
rl   jsonro   PIPErp   rq   rr   RuntimeErrordecodesplit)	r$   r%   rl   ry   rs   processouterrerrcodes	            r&   pg_backup_lszCmfGlobalSettings.pg_backup_ls   s    >>>""3$z'+,TVZ'['[ # ] ]&&((S$ 	][VY[[\\\zz||!!$'''r'   c           
          dd l }dd lddd| g}t          j                                         |                    |ddt          dd          t          dd          fd	j        D             
          S )Nr   rc   rw   restoreTre   rf   rg   c                 V    i | ]%}|                     d           |j        |         &S )UWSGI_)
startswithenviron).0envoss     r&   
<dictcomp>z0CmfGlobalSettings.pg_restore.<locals>.<dictcomp>   s6    $p$p$pcWZWeWefnWoWo$pS"*S/$p$p$pr'   )rh   ri   rj   rk   r   )rl   r   r-   rm   rn   ro   rp   r   )ra   r$   r%   rl   rs   r   s        @r&   
pg_restorezCmfGlobalSettings.pg_restore   s    			 5y+N--///ttTXY}  @D  UE  UE'+,TVZ'['[$p$p$p$pRZ$p$p$p   r r 	rr'   returnc                     ddl } ddl}t          j        rt          j        S t	                      t          _        t          t          j         ddd          5 }|                    |          }ddd           n# 1 swxY w Y   | j	        j
        }| j	        j        }t          t          ||d         z                       t          j        d<   |                                t          j        d<   |d                                         D ]w\  }}|t          j        d         v rIt          t          t          j        d         |         |z                       t          j        d         |<   b|t          j        d         |<   xt          j        S )	us  Возвращаем и кешируем json настройки белого списка разрешенных html аттрибутов и их тегов
        вынесли в ручку для возможности использования на фронтенде

        Returns:
            dict: словарь аттрибутов и тегов
        r   Nz/cmf/util/clean_attributes.jsonrzutf-8)encodingtags
attributes)bleachry   APPclean_attributesdictrp   configPROJECT_DIRload	sanitizerALLOWED_TAGSALLOWED_ATTRIBUTESrV   r[   copyrO   )r   ry   filedatadefault_tagsdefault_attrskeyrK   s           r&   r   z'CmfGlobalSettings.html_clean_attributes   s    	 	(''#vvV'HHH#X_``` 	#dh99T??D	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# '4(; (,CtF|0K,L,L'M'MV$-:-?-?-A-A\*|,2244 	@ 	@JCc*<888:>s3CWXdCefiCjmrCr?s?s:t:t$\2377:?$\2377##s   A::A>A>c                     t                               d|             t          dd          5 }|                    t                              |           dz              d d d            d S # 1 swxY w Y   d S )NzSTATS: z/tmp/send_front_stats.logrf   rx   )rJ   rR   rp   writery   dumps)r   r$   r%   fs       r&   r   z"CmfGlobalSettings.send_front_stats   s    	 $  !!!-t44 	-GGDJJt$$t+,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-s   1A,,A03A0)__name__
__module____qualname____doc__	api_allowr   r   api_methodsclassmethodr   r   r   r   r2   r0   staticmethodstrru   r   r   r   r   r   __classcell__)r4   s   @r&   r   r      s         I%7C G
 G
 G
 
K6   [
   [   [ O O [O- - - - -G* G* G*R *. 
 
 
c 
 
 
 \
 
( 
( \
( rs r r r \r $4 $ $ $ \$@ - - \- - - - -r'   r   N)cmf.include
cmf.fieldsr   r   r!   r'   r&   <module>r      se        * * * * * *I- I- I- I- I-+= I- I- I- I- I-r'   