U
    h#                     @   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ddg Zedd Z	edd Z
edd  Zed!d" Z fd#d$Zd%d& Zed'd(ed(d)d*Zed+d, Zeed(d-d.Zeed/d0d1Zed2d3 Z  ZS )4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_attributessend_front_statsZbanner_publishc                 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   0   s    zCmfGlobalSettings.public_getc                 C   s   t jjdgddS )Nr   T)fieldsZcache_inmemory)modelsr   get)r   r   r   r   r   4   s    zCmfGlobalSettings.get_settingsc                    s   |    t j||S r   )emitsupersave)selfr   r   	__class__r   r   r   8   s    zCmfGlobalSettings.savec           	      C   s  t d}|si }i t _|| jj}|dkri }| jj|d< t joLt 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pg }| jrH| jddD ]4\}}|dkr(qt| |}|j|jkr^t 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	r6t|tjjr6t|jts|jdk	r||jjj n*t|jtr6|jD ]}||jj q |d
 | q|d | d}| jrfd}|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:
        	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)gr   r   r   valueZcurrent_personr!   hasattrr   Z
is_definedr   r    r$   itemsgetattrolddebug
isinstanceZcmfr   Z
CmfRelBaselistappendZ_oldextendZis_newset)	r   r   Zbodyr"   kvZfieldir#   r   r   r   r   <   sn    	





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_moder1   Popenopencommunicate
returncodeAssertionError)r7   r   r   r@   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   r8   /opt/bin/pg_restorer0   Tr;   r:   )r<   r>   r?   u4   Произошла ошибка при вызове 
)
r@   jsonrC   PIPErD   rE   rF   RuntimeErrordecodesplit)	r   r   r@   rM   rH   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   r8   rK   ZrestoreTr9   r:   r;   c                    s"   i | ]}| d s| j| qS )ZUWSGI_)
startswithenviron).0envosr   r   
<dictcomp>   s     
  z0CmfGlobalSettings.pg_restore.<locals>.<dictcomp>)r<   r=   r>   r?   rX   )r@   rZ   r   rA   rB   rC   rD   rV   )r7   r   r   r@   rH   r   rY   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)bleachrM   ZAPPZclean_attributesdictrD   ZconfigZPROJECT_DIRloadZ	sanitizerZALLOWED_TAGSZALLOWED_ATTRIBUTESr0   r3   copyr+   )r`   rM   filedataZdefault_tagsZdefault_attrskeyr)   r   r   r   r	      s     &z'CmfGlobalSettings.html_clean_attributesc              	   O   s>   t d|   tdd}|t| d  W 5 Q R X d S )NzSTATS: z/tmp/send_front_stats.logr:   rL   )r(   r.   rD   writerM   dumps)re   r   r   fr   r   r   r
      s    z"CmfGlobalSettings.send_front_stats)__name__
__module____qualname____doc__Z	api_allowr   r   Zapi_methodsclassmethodr   r   r   r   r   r   staticmethodstrrJ   rT   r\   ra   r	   r
   __classcell__r   r   r   r   r      s`   



I
	 r   N)Zcmf.includeZ
cmf.fieldsr   r   r   r   r   r   <module>   s   