
    ?i.                     D    d dl  d dlmZ  G d dej                        Zy)    )*)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                      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_get0   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_settings4   s     ''++C5+NNr'   c                 B    | j                          t        |   |i |S r    )emitsupersave)selfr$   r%   	__class__s      r&   r2   zCmfGlobalSettings.save8   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_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}}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_namera   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_moderW   Popenopencommunicate
returncode)ra   r$   r%   rl   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   )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$$!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   rc   rw   restoreTre   rf   rg   UWSGI_)rh   ri   rj   rk   env)	rl   osr-   rm   rn   ro   rp   environ
startswith)ra   r$   r%   rl   r   rs   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)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\    	'''#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                    t         j                  r| j                  d      x}r6t        j                  j
                  j                  dt        |dz               | j                  d      x}r*t        j                  j
                  j                  d|       | j                  d      x}r+t        j                  j
                  j                  d|       y y y )Nindexed_db_size_mb"front_cache_indexed_db_size_kbytesi   evicted_by_double_f5 front_cache_evicted_by_double_f5evicted_by_quotafront_cache_evicted_by_quota)	r   METRICS_API_STATS_COLLECTr.   rT   utilmetricswrite_summaryintwrite_counter)r   r$   r%   r   r   r   s         r&   r   z"CmfGlobalSettings.send_front_stats   s     ++4 &*XX.B%CC!C  ../SUXYklpYpUqr'+xx0F'GG#G  ../QSgh#'88,>#???  ../MO_` @? ,r'   )__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7CC G
 
K6  
     O O-G*R *. 
c 
 
 
( 
( rs r r $4 $ $@ %a %ar'   r   N)cmf.include
cmf.fieldsr   r   r!   r'   r&   <module>r      s"     *ka+== kar'   