U
    Af#                     @   s*   d dl T d dlmZ G dd dejZdS )    )*)cmf_global_settingsc                       s   e Zd ZdZdZejjddddddd	d
ddddddddddddddg Zedd Z	edd Z
edd Zedd  Zeed!d"d#d$ Zed%d& Z fd'd(Zd)d* Zed+d,ed,d-d.Zed/d0 Zeed,d1d2Zeed3d4d5Z  ZS )6CmfGlobalSettingsuF   
    Глобальные настройки приложения
    TZchange_page_settingsZenabled_plugin_nclistZeva_available_versionZeva_backup_entryZeva_backup_historyZeva_cancel_upgradeZeva_current_sheduled_upgradeZeva_current_versionZeva_restoreZeva_shedule_upgradeZeva_upgradeZeva_upgrade_entryZeva_upgrade_historyget_settingsZperformance_server_test
public_getZpublic_get_page_customizepublic_get_settingspublic_listZreset_page_settingsZfstek_set_defaulthtml_clean_attributesc                 O   s   d S N clsargskwargsr   r   #./cmf/models/cmf_global_settings.pyr   #   s    z%CmfGlobalSettings.public_get_settingsc                 O   s   d S r
   r   r   r   r   r   r   )   s    zCmfGlobalSettings.public_listc                 O   s   d S r
   r   r   r   r   r   r   .   s    zCmfGlobalSettings.public_getc                 C   s$   t | dd stjjdgd| _| jS )N_global_settingsr   )fields)getattrmodelsr   getr   r   r   r   r   r   2   s    zCmfGlobalSettings.get_settingsCmfGlobalSettings:changed)Zchannelc                  O   s   d t j_d S r
   )r   r   r   )_args_kwargsr   r   r   clean_cache9   s    zCmfGlobalSettings.clean_cachec                 C   s   t d tdd  d S )Nz"CmfGlobalSettings::changed triggerr   )gdebugZcmf_emit_server_eventr   r   r   r   trigger_reload>   s    
z CmfGlobalSettings.trigger_reloadc                    s   |    |   t j||S r
   )emitr   supersave)selfr   r   	__class__r   r   r    C   s    zCmfGlobalSettings.savec           
      C   s  ddl m} |d| j ddtjgd td}|s@i }i t_|| jj}|dkri }| jj|d	< tjott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rv| jddD ]4\}}|dkrVq>t| |}|j|jkrtd| j d|j  q>t|tjjrt|jts|jdk	r||jjj n*t|jtr|jD ]}||jj q|jdk	rdt|tjjrdt|jts:|jdk	r:||jjj n*t|jtrd|jD ]}||jj qN|d | q>|d | d}	| jrd}	|d |	 tt|d |d< tt|d |d< tt|d |d< tt|d |d< |tj| jj< dS )u   
        Сообщаем во фронт о необходимости обновить объект
        :return:
        r   )cmf_emit_eventzevent-z1this event DEPRECATED, use is\_changed-class_name/)	namespaceZevent_persons	emit_listNidcmf_modified_by	parent_id	person_idplace
class_nameZrelation_personsZchanged_fieldschanged_relationsactionT)
is_changed)Zcmf_modified_atr)   Zcmf_viewed_atZcmf_viewed_byZcmf_locked_atZcmf_locked_byzemit: FIXME is changed bug ..updateinsert)cmf.includer$   r(   r   Zcurrent_personr   r'   valuer-   hasattrr*   Z
is_definedr+   r,   r0   itemsr   oldr   
isinstanceZcmfr   Z
CmfRelBaselistappendZ_oldextendZis_newset)
r!   r$   r'   Zbodyr.   kvZfieldir/   r   r   r   r   H   sr    





zCmfGlobalSettings.emitN)backup_namec                 O   sh   dd l }tj  dddg}| r*||  |j|ddtddtddd	}|  |jdksdt	d
|S )Nr   /usr/bin/bashz/opt/bin/pg_backupZ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_moder;   Popenopencommunicate
returncodeAssertionError)rA   r   r   rJ   cmdprocr   r   r   	pg_backup   s    


zCmfGlobalSettings.pg_backupc            	      O   sf   dd l }dd l}dddg}|j|d|jtddd}| \}}|j}|rXtd	| | 	d
S )Nr   rB   /opt/bin/pg_restorer:   TrE   rD   )rF   rH   rI   u4   Произошла ошибка при вызове 
)
rJ   jsonrM   PIPErN   rO   rP   RuntimeErrordecodesplit)	r   r   rJ   rW   rR   ZprocessouterrZerrcoder   r   r   pg_backup_ls   s    
zCmfGlobalSettings.pg_backup_lsc              	      sX   dd l }dd l ddd| g}tj  |j|ddtddtdd fd	d
 jD dS )Nr   rB   rU   ZrestoreTrC   rD   rE   c                    s"   i | ]}| d s| j| qS )ZUWSGI_)
startswithenviron).0envosr   r   
<dictcomp>   s     
  z0CmfGlobalSettings.pg_restore.<locals>.<dictcomp>)rF   rG   rH   rI   rb   )rJ   rd   r   rK   rL   rM   rN   r`   )rA   r   r   rJ   rR   r   rc   r   
pg_restore   s    
zCmfGlobalSettings.pg_restore)returnc               	   C   s   ddl } ddl}tjrtjS t t_ttj dddd}||}W 5 Q R X | j	j
}| j	j}tt||d  tjd< | tjd< |d  D ]J\}}|tjd krtttjd | | tjd |< q|tjd |< qtjS )	us  Возвращаем и кешируем json настройки белого списка разрешенных html аттрибутов и их тегов
        вынесли в ручку для возможности использования на фронтенде

        Returns:
            dict: словарь аттрибутов и тегов
        r   Nz/cmf/util/clean_attributes.jsonrzutf-8)encodingZtagsZ
attributes)bleachrW   ZAPPZclean_attributesdictrN   ZconfigZPROJECT_DIRloadZ	sanitizerZALLOWED_TAGSZALLOWED_ATTRIBUTESr:   r=   copyr7   )rj   rW   filedataZdefault_tagsZdefault_attrskeyr5   r   r   r   r	      s     &z'CmfGlobalSettings.html_clean_attributes)__name__
__module____qualname____doc__Z	api_allowr   r   Zapi_methodsclassmethodr   r   r   r   staticmethodZon_server_eventr   r   r    r   strrT   r^   rf   rk   r	   __classcell__r   r   r"   r   r      sb   




H
	r   N)r4   Z
cmf.fieldsr   r   r   r   r   r   <module>   s   