
    Y~hMc                         d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
 d dlmZmZ d dlmZmZ d dlmZ d dlT d dlmZ  G d	 d
ej                  ZdS )    N)defaultdict)Path)randomchoices)OptionalList)	safe_join)*)cmf_global_settingsc            	       d    e Zd ZdZej        j        g dz   Zd Zd Zd Z	 fdZ
ededefd	            Zed
efd            Z ed          Z ed          Z ed          Z ed          Z ed          Zedefd            Zedefd            Zed1dededefd            Zed             Zed             Zed2dededee         fd            Z e!"                    d          Z#ede$e         fd            Z%ed3defd!            Z&e!"                    d"          Z'ed#             Z(ed$             Z)ed%             Z*ed&             Z+d' Z,ed(             Z-ed)             Z.ed4d*            Z/e e0d+,          d-efd.                        Z1ed/             Z2ed0             Z3 xZ4S )5CmfGlobalSettingsuF   
    Глобальные настройки приложения
    )performance_server_test
public_getpublic_listchange_page_settingsreset_page_settingseva_available_versioneva_current_versioneva_upgradeeva_shedule_upgradeeva_current_sheduled_upgradeeva_cancel_upgradeeva_upgrade_historyeva_upgrade_entryeva_backup_historyeva_backup_entryeva_restorec                     | j         j        s&| j        j        s| j        j        s| j        j        sd S t          t          j        j        dg           d S )NT)args)	auth_options_allow_base
is_changedauth_options_allow_oauthauth_options_allow_ldapauth_options_allow_ssoschedule_deferred_jobmodels	CmfPersonaccount_sync_usersselfs    0./modules/settings/models/cmf_global_settings.py_check_auth_settingsz&CmfGlobalSettings._check_auth_settings)   sd    ,7 	-8	,7	 +6	 Ff.AOOOOOO    c                 8   | j         j        sd S d}| j         s|                    dd          }t          |d           t	          t
          j        j                   t          j	        r1dt          j	        _
        t          j	                                         d S d S )Nu   Включение двухфакторной авторизации у всех пользователей может занять от 1 до 15 минутu   Включениеu   ВыключениеFabortT)two_factor_optr!   replace	cmf_alertr%   r&   r'   init_2fa_settingsgsessioncheckedsave)r*   messages     r+   _check_2fa_settingsz%CmfGlobalSettings._check_2fa_settings2   s    "- 	F r" 	Too&:<RSSG'''''f.@AAA9 	 $AIINN	 	r-   c                     d S N r)   s    r+   _check_password_settingsz*CmfGlobalSettings._check_password_settings>   s    r-   c                 6   |                                   |                                  |                                  | j        j        r| j        rt          d           | j        j        r| j        rt          d            t                      j        |i |S )Nu   Контроль работы включен. Система будет предупреждать о нарушениях сроков.u   Контроль работы включен. Система будет предупреждать и блокировать работу через 1 час в случае нарушения сроков.)	r>   r,   r:   staff_control_enabledr!   r3   staff_control_block_workspacesuperr8   )r*   r   kwargs	__class__s      r+   r8   zCmfGlobalSettings.saveA   s    %%'''!!###  """%0 	uT5O 	u t u u u-8 	{T=_ 	{ z { { {uww|T,V,,,r-   namecontentc                    t           j        j        st          d           d S t	          t
          j        d          }t          j        	                    |          st          
                    |           t	          ||           }t          |d          5 }|                    t          j        |                    d          d                              d d d            d S # 1 swxY w Y   d S )NR   Только администратор может менять настройкиcustom/static/app/assets/imageszwb+,   )r5   current_personis_adminr3   r	   configPROJECT_DIRospathexistsmakedirsopenwritebase64	b64decodesplit)rE   rF   r   rC   	file_pathfs         r+   r   z&CmfGlobalSettings.change_page_settingsM   s   ( 	jkkkFf02STT	w~~i(( 	#KK	"""i..	)U## 	=qGGF$W]]3%7%7%:;;<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=s   AC$$C(+C(namesc                     t           j        j        st          d           d S | D ]V}t	          t
          j        d|          }t          j        	                    |          rt          
                    |           Wd S )NrH   rI   )r5   rL   rM   r3   r	   rN   rO   rP   rQ   rR   remove)r[   rE   rY   s      r+   r   z%CmfGlobalSettings.reset_page_settingsY   s|    ( 	jkkkF 	% 	%D!&"46WY]^^Iw~~i(( %		)$$$	% 	%r-   z/var/log/eva_updatez/opt/bin/update.shz/opt/var/backup/z$/mnt/shared/config/available_versionz'/mnt/shared/config/shedule_upgrade.jsonreturnc                    t           j                                         | j                                        sdS | j                                        5 }|                                                    d          }ddd           n# 1 swxY w Y   t          	                    d|          s,t                              d|           t          dd           ||                                 k    rdS |S )u   
        Получение доступной для обновления последней официальной версии
        '' - обновление не требуется, None - обновление не доступно
        N
^(\d{2}\.\d{2}\.\d{2}\.\d{4})?$z)eva_available_version: invalid version %su6   Недопустимый ответ с сервера.Tr/   )r&   CmfAccessListcheck_admin_mode_EVA_VERSION_FILErR   rT   readstriprematchloggingerrorr3   r   )cls_kwargsrZ   versions       r+   r   z'CmfGlobalSettings.eva_available_versionl   s    	--///$++-- 	F"'')) 	+QffhhnnT**G	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+xx:GDD 	\MMFPPPNVZ[[[[c--////Fs   (BBBc                     t                      S )u.   Получение текущей версии)cmf_get_versionrk   rl   s     r+   r   z%CmfGlobalSettings.eva_current_version~   s        r-   Nreleaserm   branchwanted_timestampc                     t           j                                         |st          dd           t                              d|          st          dd           ||                                 k    rt          dd           ||                                 k    r"t          j	        j
        st          dd           |dk    rt          d	d           t          t          j                                                                                  }|r	||k    r|}n|}|||d
}| j                            d          5 }t#          j        ||           d d d            n# 1 swxY w Y   t          d           d S )Nu=   Не указана версия для обновления.Tr/   ra   uc   Версия для обновления указана в неправильном формате.uT   Версия меньше текущей, обновление недоступно.ug   На тестовые версии может обновлять только техподдержка.rq   u   Смена на тестовые ветки доступно через ручное обновление техподдржкой.)rm   rr   shedule_timestampwu0   Обновление запланировано.)r&   rb   rc   r3   rg   rh   r   r   r5   current_user
is_supportintdatetimenow	timestamp_EVA_SHEDULE_UPGRADE_FILErT   jsondump)rk   rm   rr   rs   now_tsru   shedulerZ   s           r+   r   z%CmfGlobalSettings.eva_shedule_upgrade   s   --/// 	dV^bccccxx:GDD 	J|  EI  J  J  J  Jc--////muyzzzzc//1111!.:S1  A  IM  N  N  N  NY  ]  ei  j  j  j  jX&**,,668899 	' 06 9 9 0 &%N_``*//44 	"Igq!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"EFFFFFs   E$$E(+E(c                     i }| j                                         rE| j                                         5 }t          j        |          }d d d            n# 1 swxY w Y   |S r<   )r}   rR   rT   r~   load)rk   r   rZ   s      r+   r   z.CmfGlobalSettings.eva_current_sheduled_upgrade   s    (//11 	'.3355 ')A,,' ' ' ' ' ' ' ' ' ' ' ' ' ' 's   AAAc                     t           j                                         | j                                        r| j                                         t          d           d S )Nu&   Обновление отменено.)r&   rb   rc   r}   rR   unlinkr3   rk   s    r+   r   z$CmfGlobalSettings.eva_cancel_upgrade   sX    --///(//11 	3)00222;<<<<<r-   restore_on_failc           	         t           j                                         t          dd           t	          | j                  dg}|r|                    d|            |r|                    d           	 t          j        |dddd          }nx# t          j	        t          j
        f$ rZ}t                              d	|j        |j        |j                   t          d
| d|j         d|j         d           Y d}~nd}~ww xY w|j                                        }|r8t          d|            |                    d          }|d         |d         dS t          d           dS )u  
        Запуск обновления. На  последнюю официальную, если version is None
        restore_on_fail - автоматический откат при ошибке.
        Возвращаем {'version': ..., 'entry_id': ...} - если обновление запущено.
        None - если обновление не требуется.
        /   Метод обновления устарел.Tr/   z--backgroundz
--version=z--restore-on-fail
   )timeoutcapture_outputchecktextzeva_upgrade: %s error: %s, %suB   Ошибка запуска процесса обновления(z): , Nu4   Запущен процесс обновления:  r      )rm   entry_idu-   Обновление не требуется.)r&   rb   rc   r3   str_EVA_UPDATE_SCRIPTappend
subprocessrunTimeoutExpiredCalledProcessErrorri   	exceptioncmdstdoutstderrrf   	partition)	rk   rm   r   rl   r   proceoutputpartss	            r+   r   zCmfGlobalSettings.eva_upgrade   s    	--///DDQQQQC*++^< 	0KK.W../// 	-KK+,,,	E>$4tZ^___DD):+HI 	E 	E 	E>qxQRQYZZZw[\wwabaiwwmnmuww  @D  E  E  E  E  E  E  E  E  E	E ""$$ 	HUVUUVVV$$S))E$QxU1X>>>FGGGGGs   8B D-ADDz%^\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}$c                 x   t           j                                         t          dd           g }| j                                        rW| j                                        D ]=}| j                            |j	                  r|
                    d|j	        i           >|                    dd            |S )uE   Возвращаем список истории обновленийr   Tr/   r   c                     | d         S Nr   r=   xs    r+   <lambda>z7CmfGlobalSettings.eva_upgrade_history.<locals>.<lambda>   
    * r-   reversekey)r&   rb   rc   r3   _EVA_UPDATE_DIRis_diriterdir_UPDATE_ENTRY_RErh   rE   r   sort)rk   rl   resultentrys       r+   r   z%CmfGlobalSettings.eva_upgrade_history   s     	--///DDQQQQ%%'' 	<,4466 < <'--ej99 <MM:uz":;;;D&=&=>>>r-   Fc                    t           j                                         t          dd           | j                            |          st          dd           | j        |z  }|                                st          d| dd           ||dd}g d	}|r|                    d
           |D ]J}d||<   ||z                                  r,||z  	                                
                                ||<   K|S )u;  
        Получим информацию об обновлении, with_log - получить лог-файл
        Возвращаем {
            entry_id: ..., datetime: ..., cmd: ..., version_src: ..., version_dst: ..., version_patches: ...,
            status: ..., ret_code: ..., log: ...}
        r   Tr/   u=   Недопустимый формат ID обновленияz
Backup ID u&    не найден на сервереN)r   rz   log)r   version_srcversion_dstversion_patchesstatusret_coder   )r&   rb   rc   r3   r   rh   r   rR   r   	read_textrf   )rk   r   with_logrl   
entry_pathr   filesfiles           r+   r   z#CmfGlobalSettings.eva_upgrade_entry   s0    	--///DDQQQQ#))%00 	dV^bcccc(.
  "" 	^P5PPPX\]]]]#tDD^^^ 	 LL 	E 	EDF4L4'')) E *4::<<BBDDtr-   zI^(?P<datetime>\d{4}-\d{2}-\d{2}_\d{6})__(?P<timestamp>\d+)__(?P<name>.*)$c                 X   t           j                                         t          dd           g }i }t	          t
                    }| j                                        r0| j                                        D ]}| j	        
                    |j                  x}rH|j        |d         g |d         |d         d||j        <   |                    ||j                            k|                                rXt                              |          x}r<| j	        
                    |          x}r ||                             |j                   |                                D ]*\  }}	||v r!||         d                             |	           +|                    dd	 
           |S )Nr   Tr/   rE   rz   r|   )r   rE   aliasesrz   r|   r   c                     | d         S r   r=   r   s    r+   r   z6CmfGlobalSettings.eva_backup_history.<locals>.<lambda>  r   r-   r   )r&   rb   rc   r3   r   list_EVA_BACKUP_DIRr   r   _BACKUP_ENTRY_RErh   rE   r   
is_symlinkrP   readlinkitemsextendr   )
rk   rl   r   idxr   r   rh   targetr   
alias_lists
             r+   r   z$CmfGlobalSettings.eva_backup_history   s   --///DDQQQQd##%%'' 	@,4466 	7 	7066uzBBB5 7$)JfRT$)*$5E+DV'X 'XC
O MM#ej/2222%%'' 7r{{57I7I-IV 7!$!5!;!;F!C!CC7FO**5:666(/ @ @$*s??M),33J???D&=&=>>>r-   c                     t           j                                         t          dd           t          dd           d S )Nr   Tr/   zTODO get backup detailr&   rb   rc   r3   rp   s     r+   r   z"CmfGlobalSettings.eva_backup_entry  sE    --///DDQQQQ*$777777r-   c                     t           j                                         t          dd           t          dd           d S )Nr   Tr/   zTODO Background Restorer   )rk   r   rl   s      r+   r   zCmfGlobalSettings.eva_restore  sE    --///DDQQQQ+4888888r-   c                 T    t           j        j        rt           j        j        j        S dS )uk   
        Хак, т.к. в публичном контексте возвращается acl_deny
        N)r5   global_settingspage_customizer~   r   s    r+   public_get_page_customizez+CmfGlobalSettings.public_get_page_customize  s&    
 + 	9$388tr-   c                     t           j                            dg          }g d}|D ].}||         j        ||         _        |                                 /t          d           dS )uv   
        Установить в соответствии с ФСТЭК, включаем все защиты
        r
   )fields)two_factor_adminsession_timeoutpassword_min_upper_symbolpassword_min_numberspassword_min_special_symbolpassword_min_lengthpassword_max_dayspassword_check_historyauth_admin_mode_reloginauth_inactive_block_daysauth_fail_timeoutauth_fail_try_countauth_fail_permanent_blockaudit_storage_durationlogin_reuse_lockuL   Опции установлены в соответствии с ФСТЭК.N)r&   r   getfstek_defaultvaluer8   r3   )r*   gsfstek_default_fieldsfields       r+   fstek_set_defaultz#CmfGlobalSettings.fstek_set_default%  sx     %))#)77 
  
  
" * 	 	E i5BuIOGGIIIIabbbbbr-   c                    dd l }d_d}dd l}dd l}t          j        j        s"t          j        j        st          dd           t          	                    d           t          j
                    }d}|dk     r|dz  }|dk     t          j
                    |z
  }d	}|d
k    rd} |d|dd|          }	t          	                    d           d}
t          j        j        }d}d                    t          t           j        d                    }t          j
                    }t%          |
          D ]+}|                    |                    |          |           ,t%          |
          D ]*}|                    |                    |                     +t%          |
          D ]*}|                    |                    |                     +t          j
                    |z
  } |d|
 d|dd          }t          	                    d           d}d}d}d}d| d}d| d}|d z  }|d!                    d" t%          d#          D                       z  }|d!z  }|d!                    d$ t%          d#          D                       z  }|d%z  }d&| d'}|d(z  }|d!                    d) t%          d#          D                       z  }|d!z  }|d!                    d* t%          d#          D                       z  }|d%z  }d+| d,}t.          j        j        j        j                                        5 }|                    |           |                    |           t          j
                    }	 t%          |          D ]U}|                    |           |                    |                    |-                     |                    |           Vt%          |          D ]U}|                    |           |                    |                    |-                     |                    |           Vn# t<          $ r} d }~ww xY wt          j
                    |z
  }|                    |           d d d            n# 1 swxY w Y    |d.| d|dd          }t          	                    d/           t?          |                                 d         d0z  d0z  d0z            }d	}|d1k     rd} |d2| d3|          } t          	                    d4           |!                                j"        dz  }!d	}"|!d5k     rd}" |d6|!d7d8|"          }#t          	                    d9           d:}$tF          j$        %                    |$          s |d;d<          }%njtM          |$d=          5 }&t?          |&'                                          dz  dz  }'d d d            n# 1 swxY w Y   d	}(|'d>k     rd}( |d?|'d7d8|(          }%t          	                    d@           |(                                })d	}*|)d1k     rd}* |dA|)|*          }+t          	                    dB           d},dCdz  }-|)                                5 }.t          j
                    }/	 t%          |,          D ]}tF          &                    tF          j$                            |.tU          |                    tF          j+        tF          j,        z  tF          j-        z            }&tF          .                    |&|-           tF          /                    |&           n# t<          $ r} d }~ww xY wt          j
                    |/z
  }0d d d            n# 1 swxY w Y    |dD|, dE|0dd          }1t          	                    dF           ta          j1        g dGddHddI          }2|2j2        3                                }3th          5                    dJ|3          }2|2r	|2d         }2nd }2 |dK|2           }4t          	                    dL           	 ta          j1        dMdNdOtl          j7        dP         dQ         dRtl          j7        dP         dS         dTdUdVg	ddHddI          }5|5j2        3                                }6|68                                ^}7}8}9}: |dWdX|7 dY|8 dZ|9 d[          };n@# t<          $ r3}< |dWd\          };t          	                    d]|<            Y d }<~<nd }<~<ww xY wt          	                    d^           d                    |	||| |#|%|+|1|4|;g
          S )`Nr   c                 0    |rd|  d| d| dS d|  d| dS )Nz<p><span><b>z </b>: </span><span style="color:z">z</span></p>z</b>: </span><span>r=   )captionr   colors      r+   _test_formatz?CmfGlobalSettings.performance_server_test.<locals>._test_formatG  sF     lkgkkukkX^kkkkQ'QQfQQQQr-   ud   Тестирование сервера доступно только АдминистраторамTr/   zStart test 1i@x}rK   greenr   redu6   Скорость цикла (не более 2сек.)z.2fu   сек.zStart test 2i  z_performance_server_test2_{}    kuG   Производительность Redis (запись/чтение, u    записей)u    сек.zStart test 3zpublic.performance_server_test3BEGINCOMMITzDROP TABLE IF EXISTS ;zCREATE TABLE z (zid integer, r   c              3   "   K   | ]
}d | dV  dS )rE   z integerNr=   .0is     r+   	<genexpr>z<CmfGlobalSettings.performance_server_test.<locals>.<genexpr>  s.      >>q*q***>>>>>>r-      c              3   "   K   | ]
}d | dV  dS )name_sz varcharNr=   r   s     r+   r   z<CmfGlobalSettings.performance_server_test.<locals>.<genexpr>  s.      @@,,,,@@@@@@r-   z);zINSERT INTO z	 VALUES (z{id}, c              3      K   | ]}| V  d S r<   r=   r   s     r+   r   z<CmfGlobalSettings.performance_server_test.<locals>.<genexpr>  s$      2211222222r-   c           	      r    g | ]4}d d                     t          t          j        d                     d 5S )'r      r   )joinr   stringascii_letters)r   _s     r+   
<listcomp>z=CmfGlobalSettings.performance_server_test.<locals>.<listcomp>  sA    aaaRSMRWWWV-AS%I%I%IJJMMMaaar-   zDELETE FROM z WHERE id = {id};)iduL   Производительность PostgreSQL (запись/чтение, zStart test 4i      uD   Объем памяти на сервере (не менее 8Гб.)u   Гб.zStart test 5   u:   Частота процессора (не менее 3GHz)z.1fGHzzStart test 6z5/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_frequ<   Частота процессора (не менее 3.8GHz)Skippedrgffffff@uB   Частота процессора Turbo (не менее 3.8GHz)zStart test 7u1   Количество ядер (не менее 8)zStart test 8s   xxxxxxxxuN   Производительность запись/чтение на диск (u    файлов)zStart test 9)	redis-cliz--intrinsic-latency5   )r   r   r   r   zavg latency: ([\d.]* \w*)u/   Тест виртуализации (Redis cli)zStart test 10r  z	--latencyz-hdefaulthostz-pportz-ir  z--rawu*   Latency до Redis (не более 1мс)zmin u   мс. / max u   мс. / avg u   мс.SkipzTEST 10 Exception: z
Tests DONEr<   )9tempfilepsutilshutilr5   rL   rM   rw   rx   r3   debugtimeAPPREDIS_DBredisr  r   r  digitsrangesetformatr   deleter&   r'   dpdata_driverengineconnectexecute	Exceptionry   virtual_memorycpu_freqmaxrP   rQ   rR   rT   re   	cpu_countTemporaryDirectoryr   O_RDWRO_CREATO_SYNCrU   closer   r   r   rf   rg   findallrN   cache_settingsrX   )=rk   r  r   r  r  startr   
test1_timetest1_colortest1	key_countredis_dbdb_keynew_captchatest2_start_time
test2_timetest2	row_counttest_table_namebegincommits1s2s3s4
db_connecttest3_start_timeerr
test3_timetest3	test4_valtest4_colortest4	test5_valtest5_colortest5cpufreq_filetest6rZ   	test6_valtest6_color	test7_valtest7_colortest7
file_counts_8kbtmpdirtest8_start_time
test8_timetest8	test9_restest9_stdouttest9
test10_restest10_stdout
test10_min
test10_max
test10_avgr	  test10r   s=                                                                r+   r   z)CmfGlobalSettings.performance_server_testC  sn   	R 	R 	R 	R 	( 	J1J 	J|  EI  J  J  J  J		*nnFA *nnY[[5(
>>KUZdWqWqWqWqs~		<%/gggfms;;;<<9;;y!! 	8 	8ALLq));7777y!! 	+ 	+ALLq))****y!! 	. 	.AOOFMM!,,----Y[[#33
  Cgp  C  C  C *8888: : 	
	;7_7770_000
n
dii>>E"II>>>>>>
d

dii@@eBii@@@@@@
d
6O666
h
dii22b		222222
d

diiaaW\]_W`W`aaabbb
d
@O@@@ ,3;;== 	#r"""r"""#y{{y)) / /A&&u---&&ryyAy777&&v....y)) / /A&&u---&&ryyAy777&&v..../    '77Jr"""'	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#*   Hlu  H  H  H *8888: : 	
--//247<TABB	q==Kchqexexex  {F  G  G	OO%%)D0	q==KY^g[p[p[p[pr}~~	Nw~~l++ 	K L!_akllEElC(( 8AMMD047	8 8 8 8 8 8 8 8 8 8 8 8 8 8 8!K3# L!ejsg|g|g|g|  J  K  KE	 $$&&	q==KPR[]hii	
E"((** 		8f#y{{z**    AVSVV < <bi"*>TWYW`>`aaAHHQ&&&HHQKKKK     '77J		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8 		8   Inx  I  I  I *8888: : 	
N#M#M#MUYcevz  BF  G  G  G	 '--//JJ;\JJ	 	!!IIIOT]Q_``	   	/#k)-v/DY/OPV/W)-v/DY/OPV/W)-sG)= 04RPT[_	a a aJ
 '-3355M5B5H5H5J5J2J
J!\"O  RZXb  RZ  RZpz  RZ  RZ  IS  RZ  RZ  RZ  [  [FF 	/ 	/ 	/!\"OQWXXFGG-!--........	/
 	
wwueUE5%PUW]^___s   ?>R>C
Q	R	
QQQ.RRR?(W33W7:W7^(B1]^
]*$]%%]**^^^Bc" "
d,)ddc                  B   g } t           j                            t          j         d          sg S t                               t          j         d          D ]F}t           j                            t          j         d| d          r|                     |           G| S )Nz/custom/pluginsz/custom/plugins/z/enabled)rP   rQ   rR   rN   rO   listdirr   )resplugin_names     r+   enabled_plugin_nclistz'CmfGlobalSettings.enabled_plugin_nclist  s    
 w~~!3DDDEE 	I::);&M&M&MNN 	( 	(Kw~~!3ZZ[ZZZ[[ (

;'''
r-   c                    |s%t           j                            d          j        }|dk    rt           j                                        }t           j        j        j        j                                        5 }|	                    d| d           d d d            n# 1 swxY w Y   t                                           |S )NT)TECHCOM_nocachez6CmfGlobalSettings:00000000-0000-0000-0000-000000000001z%update cmf_global_settings set id = 'r  )r&   r   r   r  gen_idr%  r&  r'  r(  r)  	CMF_CACHEflushdb)rk   gs_id
connections      r+   fix_gsidzCmfGlobalSettings.fix_gsid  s     	J,000FFIELLL ,3355E),8?GGII UZ""#S5#S#S#STTTU U U U U U U U U U U U U U U s   9BB#&B#CmfGlobalSettings:debug)channelis_debugc                     | t           _        t                                                              | rt          j        nt          j                   t                              d|            d S )NzSet debug mode to %s)rN   DEBUGri   	getLoggersetLevelINFOinfo)ry  rC   s     r+   _change_debug_tmpz#CmfGlobalSettings._change_debug_tmp   sS      $$h%PW]]GLQQQ+X66666r-   c                  &    t          dd           d S )Nrw  Tcmf_emit_server_eventr=   r-   r+   start_debug_tmpz!CmfGlobalSettings.start_debug_tmp'  s    7>>>>>r-   c                  &    t          dd           d S )Nrw  Fr  r=   r-   r+   stop_debug_tmpz CmfGlobalSettings.stop_debug_tmp+  s    7?????r-   )Nrq   N)NN)Fr<   )5__name__
__module____qualname____doc__r   r   api_methodsr,   r:   r>   r8   staticmethodr   r   r   r   r   r   r   r   rd   r}   classmethodr   r   ry   r   r   r   boolr   dictr   rg   compiler   r   r   r   r   r   r   r   r   r   r   rn  rv  on_server_eventr  r  r  __classcell__)rD   s   @r+   r   r      s#         &7C G
 G
 G
 
K&P P P
 
 
  
- 
- 
- 
- 
- 	=# 	= 	= 	= 	= \	= %4 % % % \% d011O233d-..OCDD $%N O O    [" !s ! ! ! [! G G# Gc Gad G G G [G,   [ = = [= H H# Ht HZbcgZh H H H [H> zz"JKK
tDz 
 
 
 [
  D    [4 zz"noo  [. 8 8 [8 9 9 [9
   [c c c< |` |` [|`| 
 
 \
    [  _67777D 7 7 7 87 \7
 ? ? \? @ @ \@ @ @ @ @r-   r   )rV   sysr  r   r  r~   rz   collectionsr   pathlibr   r   r   typingr   r   werkzeug.utilsr	   cmf.includemodules.settings.fieldsr   r   r=   r-   r+   <module>r     s    



         # # # # # #       " " " " " " " " ! ! ! ! ! ! ! ! $ $ $ $ $ $     7 7 7 7 7 7[@ [@ [@ [@ [@+= [@ [@ [@ [@ [@r-   