
    i.                     P    d dl  d dlmZ ddlmZ  G d dej
                        Zy)    )*)cmf_global_settings   )frontend_stat_metricsc                   
    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                      y N clsargskwargss      #./cmf/models/cmf_global_settings.pyr   z%CmfGlobalSettings.public_get_settings&   s         c                      y r"   r#   r$   s      r(   r   zCmfGlobalSettings.public_list,   s     r)   c                      y r"   r#   r$   s      r(   r   zCmfGlobalSettings.public_get1   s    r)   c                 F    t         j                  j                  dgd      S )Nr   T)fieldscache_inmemory)modelsr   get)r%   s    r(   r   zCmfGlobalSettings.get_settings5   s     ''++C5+NNr)   c                 B    | j                          t        |   |i |S r"   )emitsupersave)selfr&   r'   	__class__s      r(   r4   zCmfGlobalSettings.save9   s     		w|T,V,,r)   c                 2	   t         j                  d      }|si }i t         _        |j                  | j                  j                        }|i }| j                  j                  |d<   t         j
                  xr$ 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<   |j                  d      xs g }| j                  r,| j                  d      D ]  \  }}|dv rt        | |      }|j                  |j                  k(  r0t         j!                  d| j                   d|j                          at#        |t$        j&                  j(                        rt#        |j                  t*              s<|j                  0|j-                  |j                  j                  j                         nPt#        |j                  t*              r6|j                  D ]'  }|j-                  |j                  j                         ) |j.                  durt#        |t$        j&                  j(                        rt#        |j                  t*              s<|j                  0|j-                  |j                  j                  j                         nPt#        |j                  t*              r6|j                  D ]'  }|j-                  |j                  j                         ) |d
   j-                  |        |d   j1                  |       d}| j2                  rd}|d   j-                  |       t+        t5        |d               |d<   t+        t5        |d
               |d
<   t+        t5        |d               |d<   t+        t5        |d	               |d	<   |t         j                  | j                  j                  <   y)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_atr:   cmf_viewed_atcmf_viewed_bycmf_locked_atcmf_locked_byzemit: FIXME is changed bug ..updateinsert)gr0   r8   r9   valuecurrent_personr>   hasattrr;   
is_definedr<   r=   rC   itemsgetattrolddebug
isinstancecmfr-   
CmfRelBaselistappend_oldextendis_newset)	r5   r8   bodyrA   kvfieldirB   s	            r(   r2   zCmfGlobalSettings.emit=   s    EE+&	IAK}}TWW]]+<DDJ&'&6&6&T1;K;K;N;N;T;TD"# $D $D DM!%D')D#$%'D!"(*D$%DN4%$..*C*C $ 4 4D4%$..*C*C $ 4 4D4!djj&;&; JJ,,DM HH%89?R??

d
3 11 G G a(99'GG9$//9J!EL\L\K]^_eSZZ%:%:;%ekk48U[[=T)001E1EF#EKK6!& AA-44QTTZZ@A ::S(Zszz?T?T-U%eii6599;P)001C1CD#EIIt4!& AA-44QTTZZ@A%&--a0-1. 	 !(():;;;FXf%c$x.12X!%c$/?*@&A!B$(T2E-F)G$H !#'D1C,D(E#F %)DGGMM"r)   N)backup_namerc   c           
         dd l }t        j                  j                          g d}| r|j	                  |        |j                  |ddt        dd      t        dd            }|j                          |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_moderY   Popenopencommunicate
returncode)rc   r&   r'   rn   cmdprocs         r(   	pg_backupzCmfGlobalSettings.pg_backup   s    --/?JJ{#ttTXY}  @D  UE'+,TVZ'[   ]!#T%TT#r)   c            	         dd l }dd l}g d}|j                  |d|j                  t	        dd            }|j                         \  }}|j                  }|rt        d|       |j                         j                  d      S )	Nr   )re   /opt/bin/pg_restorerX   Tri   rh   )rj   rl   rm   u4   Произошла ошибка при вызове 
)
rn   jsonrq   PIPErr   rs   rt   RuntimeErrordecodesplit)	r&   r'   rn   r{   ru   processouterrerrcodes	            r(   pg_backup_lszCmfGlobalSettings.pg_backup_ls   s    >""3$z'+,TVZ'[ # ]&&(S$$!UVYUZ[\\zz|!!$''r)   c                 *   dd l }dd l}ddd| g}t        j                  j	                          |j                  |ddt        dd      t        dd      |j                  D ci c]$  }|j                  d	      r||j                  |   & c}
      S c c}w )Nr   re   ry   restoreTrg   rh   ri   UWSGI_)rj   rk   rl   rm   env)	rn   osr/   ro   rp   rq   rr   environ
startswith)rc   r&   r'   rn   r   ru   r   s          r(   
pg_restorezCmfGlobalSettings.pg_restore   s     5y+N--/ttTXY}  @D  UE'+,TVZ'[EGZZ$pcWZWeWefnWoS"**S/%9$p   r 	r$ps   B6Breturnc                      ddl } ddl}t        j                  rt        j                  S t	               t        _        t        t        j                   ddd      5 }|j                  |      }ddd       | j                  j                  }| j                  j                  }t        t        |d   z               t        j                  d<   |j                         t        j                  d<   |d   j                         D ]p  \  }}|t        j                  d   v r@t        t        t        j                  d   |   |z               t        j                  d   |<   [|t        j                  d   |<   r t        j                  S # 1 sw Y   xY w)	us  Возвращаем и кешируем json настройки белого списка разрешенных html аттрибутов и их тегов
        вынесли в ручку для возможности использования на фронтенде

        Returns:
            dict: словарь аттрибутов и тегов
        r   Nz/cmf/util/clean_attributes.jsonrzutf-8)encodingtags
attributes)bleachr{   APPclean_attributesdictrr   configPROJECT_DIRload	sanitizerALLOWED_TAGSALLOWED_ATTRIBUTESrX   r]   copyrQ   )r   r{   filedatadefault_tagsdefault_attrskeyrM   s           r(   r   z'CmfGlobalSettings.html_clean_attributes   s\    	'''#vV''((GH#X_` 	#dh99T?D	# ''44((;; (,CtF|0K,L'MV$-:-?-?-A\*|,224 	@JCc**<88:>s3CWCWXdCefiCjmrCr?s:t$$\237:?$$\237		@
 ###!	# 	#s   FFc                 l   t         j                  r| j                  d      x}r+t        j                  j                  t        |dz               | j                  d      x}rt        j                  j                  |       | j                  d      x}r t        j                  j                  |       y y y )Nindexed_db_size_mbi   evicted_by_double_f5evicted_by_quota)	r   METRICS_API_STATS_COLLECTr0   r   front_cache_indexed_db_sizewriteintr   r   )r   r&   r'   r   r   r   s         r(   r   z"CmfGlobalSettings.send_front_stats   s     ++2 &*XX.B%CC!C%AAGGL^_cLcHde'+xx0F'GG#G%::@@AUV#'88,>#???%66<<=MN @= ,r)   )__name__
__module____qualname____doc__	api_allowr   r   api_methodsclassmethodr   r   r   r   r4   r2   staticmethodstrrw   r   r   r   r   r   __classcell__)r6   s   @r(   r   r      s    I%77CC G
 
K6  
     O O-G*R *. 
c 
 
 
( 
( rs r r $4 $ $@ $O $Or)   r   N)cmf.include
cmf.fieldsr   metricsr   r   r#   r)   r(   <module>r      s%     * +jO+== jOr)   