
    Hmd8                     V   	 d dl mZmZ n# e$ r d dlmZmZ Y nw xY wd dlZd dlZd dlmZ d dl	m	Z	 d dl
mZ i a G d de          Z G d d	e          Z G d
 de          Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd"dZd#dZ d"dZ!di i dfdZ"d Z#d Z$d$d!Z%dS )%    )RawConfigParserNoSectionErrorN)Template)datetime)Lockc                       e Zd ZdS )GconfNotConfigurableN__name__
__module____qualname__     E/usr/lib/x86_64-linux-gnu/glusterfs/python/syncdaemon/gsyncdconfig.pyr	   r	              Dr   r	   c                       e Zd ZdS )GconfInvalidValueNr
   r   r   r   r   r       r   r   r   c                       e Zd Zdi i dfdZd Zd Zd Zd Zdd	Zd
 Z	d Z
ddZddZddZddZddZd Zd Zd ZdS )GconfNFc                 0   t                      | _        || _        || _        d | _        i | _        i | _        i | _        g | _        g | _	        d| _
        |
|dz   | _        g | _        || _        || _        || _        i | _        |                                  d S )Nr   z.tmp)r   lockdefault_conf_filecustom_conf_filetmp_conf_filegconf	gconfdatagconf_typecasttemplate_confnon_configurable_configs
prev_mtimesession_conf_itemsargsextra_tmpl_argsoverride_from_argsdefault_values_load)selfr   r   r"   r#   r$   s         r   __init__zGconf.__init__%   s    FF	!2 0!
 (*%'!1F!:D"$	."4 

r   c                    i }| j                                         D ]\  }}|||                    dd          <   | j                                        D ]\  }}||||<   | j                                        D ]
\  }}|||<   | j                                         D ]b\  }}|| j        v rTt          |t                    st          |t                    r*t          |          
                    |          | j         |<   cd S )N-_)r   itemsreplacer"   r#   r   
isinstancestrunicoder   safe_substitute)r'   tmpl_valueskvs       r   _tmpl_substitutezGconf._tmpl_substitute<   s!   J$$&& 	1 	1DAq/0K		#s++,, IOO%% 	# 	#DAq}!"A(..00 	 	DAqKNNJ$$&& 	I 	IDAqD&&&1c"" '&0G&<&< ' ( ; ;K H H
1	I 	Ir   c                 F   | j                                         D ]\  }}t                                          d| j                            |d          z   d           }|A ||          | j         |<   | j                            |d            ||          | j        |<   d S )Nto_string)r   r,   globalsgetr   r%   )r'   r3   r4   	cast_funcs       r   _do_typecastzGconf._do_typecastO   s    J$$&& 	: 	:DAq		+//8<<<dD DI$ )	!
1&**1d33?-6Yq\\D'*	: 	:r   c                    | j         t                      |dk    r#|                     |          st                      t                      }t	          | j                   5 }|                    |           |dk    r;|                    d|          s	 d d d            dS |                    d|           n<	 |                    d           n# t          $ r Y nw xY w|
                    d           d d d            n# 1 swxY w Y   t	          | j        d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        | j        | j                    |                                  dS )NallvarsTw)r   r	   _is_configurabler   openreadfp
has_optionremove_optionremove_sectionr   add_sectionr   writeosrenamereload)r'   namecnfffws        r   resetzGconf.resetX   s    (&((( 5==!6!6t!<!<=&((($'(( 	(AJJqMMM u}}~~fd33  	( 	( 	( 	( 	( 	( 	( 	( !!&$////&&v....%   D '''%	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	(( $$c** 	bIIbMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 		$$d&;<<<tsN   !3D !D 9CD 
CD CD  DD EE	Ec                    | j         t                      |                     |          st                      |                     ||          st	                      | j                            |d           }||k    rdS t                      }t          | j                   5 }|	                    |           d d d            n# 1 swxY w Y   |
                    d          s|                    d           |                    d||           t          | j        d          5 }|                    |           d d d            n# 1 swxY w Y   t          j        | j        | j                    |                                  dS )NTr?   r@   )r   r	   rA   _is_valid_valuer   r   r:   r   rB   rC   has_sectionrG   setr   rH   rI   rJ   rK   )r'   rL   valuecurr_valrM   rN   rO   s          r   rT   z	Gconf.set   s    (&((($$T** 	)&(((##D%00 	&#%%%:>>$--u4$'(( 	AJJqMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 v&& 	$OOF###e$$$$$c** 	bIIbMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 		$$d&;<<<ts$   "CCC%EEETc                     |r| j         t                      |                     |          st                      |$|                     ||          st	                      d S d S N)r   r	   rA   rR   r   )r'   rL   rU   with_conffiles       r   checkzGconf.check   su     	)T2:&((($$T** 	)&(((T%9%9$%F%F#%%% r   c                 n    | j         5  |                                  d d d            d S # 1 swxY w Y   d S rX   )r   r&   )r'   s    r   _load_with_lockzGconf._load_with_lock   s{    Y 	 	JJLLL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   *..c                 :   i | _         g | _        i | _        g | _        g | _        i | _        t                      }t          | j                  5 }|	                    |           d d d            n# 1 swxY w Y   | j
        At          | j
                  5 }|	                    |           d d d            n# 1 swxY w Y   |                    dd          | _        |                                D ]}|dv ri | j        |<   |                    |          D ]'\  }}|                                | j        |         |<   (|                    |d          r|                    |d          | j        |<   |                    |d          rF|                    |d                                          dk    r| j                            |           |                    |d          rX|                    |d                                                                          dk    r| j                            |           |                    |d	          r0|                    |d	                                          | j         |<   |                    d
          rt|                    d
          D ]^\  }}| j                            |           | j                             |d          | j        |<   |                                | j         |<   _| j        r]| j                                        D ]C\  }}|                    dd          }|                    d          r|| j         v r
|| j         |<   D|                                  |                                  d S )N__meta__version)r^   r?   typeconfigurablefalsetemplatetruerU   r?    r+   r*   z
secondary-)r   r   r   r   r!   r%   r   rB   r   rC   r   r:   r_   sectionsr   r,   striprD   lowerappendrS   r$   r"   r-   
startswithr5   r<   )r'   confrN   sectr3   r4   s         r   r&   zGconf._load   s   
 (*%"$   $()) 	QKKNNN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	  ,d+,, A               xx
I66 MMOO 	C 	CD+++ $&DN4 

4(( 4 41*+''))t$Q'' tV,, C,0HHT6,B,B#D) t^44 ?88D.117799WDD188>>> tZ00 488D*--3355;;==GG&--d333 tW-- C#'88D'#:#:#@#@#B#B
4  F## 	*

6** * *1'..q111)-2)>)>#A& !		
1 " 	&	)) & &1IIc3''<<-- &!tz//$%DJqMs$   A//A36A3B77B;>B;c                     |                                  r.|r|                                  d S |                                  d S d S rX   )_is_config_changedr\   r&   )r'   	with_locks     r   rK   zGconf.reload   sQ    ""$$ 	 $$&&&&&

		 	r   c                     |r<| j         5  | j                            ||          cd d d            S # 1 swxY w Y   d S | j                            ||          S rX   )r   r   r:   )r'   rL   default_valuero   s       r   r:   z	Gconf.get   s     	7 ; ;z~~dM::; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; :>>$666s   266c                    i }|sU| j         D ]K}|| j        vr@| j                            |d          }|                     |          |d|dk    rdndd||<   L|S | j                                        D ]W\  }}|| j        v rdnd}| j                            |d          }|dk    rdnd}|r||||d||<   D|| j        vr
||||d||<   X|S )Nre   TF)rU   defaultra   modified)r!   r   r%   r:   r   r,   )	r'   show_defaultsshow_non_configurablerM   r3   dvr4   ra   rt   s	            r   getallzGconf.getall   sA    
	,  D999,00B77B!%!#%(,-/2XXEE4	 CF J J$$&& 	 	DAq$%)F$F$F55 $ $((B//B "buudH$ !$0 (	 A D999!"#%(4$,	 CF 
r   c                     | j         5  |                     d           |                     ||d          cd d d            S # 1 swxY w Y   d S )NF)ro   )r   rK   r:   )r'   rL   rq   s      r   getrz
Gconf.getr$  s    Y 	B 	BKK%K(((88D-58AA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	Bs   .AA
Ac                     d S rX   r   )r'   rL   s     r   get_helpzGconf.get_help)  s    r   c                 l    | j                             |d           }|dS |                    dd          S )NFra   T)r   r:   )r'   rL   items      r   rA   zGconf._is_configurable,  s7    ~!!$--<5xx---r   c                    | j                             |d           }|dS |                    dd           dS |d         dk    rt          ||d         |d                   S |d         dk    rt          ||d                   S |d         d	k    rt	          |          S |d         d
k    rt          |          S |d         dk    rt          |          S |d         dk    rt          |          S dS )NF
validationTminmaxminmaxchoiceallowed_valuesboolexecpathunixtimeint)r   r:   validate_minmaxvalidate_choicevalidate_boolvalidate_execpathvalidate_unixtimevalidate_int)r'   rL   rU   r~   s       r   rR   zGconf._is_valid_value3  s   ~!!$--<5 88L$''/4 ))"5$u+tE{CCC))"5$/?*@AAA'' '''++$U+++++$U+++&&&&&ur   c                     | j         [t          j                            | j                   r7t          j        | j                   }|j        | j        k    r|j        | _        dS dS NTF)r   rI   pathexistslstatst_mtimer    )r'   sts     r   rn   zGconf._is_config_changedQ  sX     ,7>>$/00 -Xd344;00&(kDO4ur   NT)TFFrX   )r   r   r   r(   r5   r<   rP   rT   rZ   r\   r&   rK   r:   rx   rz   r|   rA   rR   rn   r   r   r   r   r   $   s>       ;?"   .I I I&: : :% % %N  >& & & &  A A AF   7 7 7 7$ $ $ $LB B B B
   . . .  <    r   r   c                     t                      }|                    |            d|d|}	 t          |                    |                    S # t          $ r Y d S w xY w)Nzpeers  )r   readdictr,   r   )config_file
primaryvolsecondaryvolrM   session_sections        r   is_config_file_oldr   [  ss    


CHH['1zz<<@OCIIo..///   tts   !A 
AAc                    t           j                            t           j                            |           d          }t	          j        | |           t                      }|                    d           |                                D ]}\  }}|dk    r%d}|dk    rd}nd}|	                    d||           0|dk    rd	}|	                    d||           P|
                    d
d          }|	                    d||           ~t          | d          5 }|                    |           d d d            d S # 1 swxY w Y   d S )Nzgsyncd.conf.bkpr?   
use_tarsshzsync-methodrd   tarsshrsynctimeoutzsecondary-timeoutr+   r*   r@   )rI   r   joindirnameshutilcopyfiler   rG   r,   rT   r-   rB   rH   )	r   retconfig_file_backupconfigkeyrU   new_key	new_value
configfiles	            r   config_upgrader   d  s   bgook&B&BDUVV OK!3444 F
viikk / /
U,#G$		#	JJvw	2222I)GJJvw.... kk#s++GJJvw....	k3		 !:Z   ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !s   D;;D?D?c                 H    	 t          |           }dS # t          $ r Y dS w xY wr   r   
ValueError)rU   r+   s     r   r   r     s9    JJt   uus    
!!c                     	 t          j        t          |                                         d          }|dk    rdS dS # t          $ r Y dS w xY w)Nz%Y1970FT)r   fromtimestampr   strftimer   )rU   ys     r   r   r     s`    "3u::..77==;;5t   uus   :A   
AAc                     	 t          |           } t          |          }t          |          }| |k    o| |k    S # t          $ r Y dS w xY w)NFr   )rU   minvalmaxvals      r   r   r     s]    E

VV25F?2   uus   8; 
A	A	c                 L    |                     d          }d |D             }| |v S )N,c                 6    g | ]}|                                 S r   )rg   ).0r4   s     r   
<listcomp>z#validate_choice.<locals>.<listcomp>  s     888Aaggii888r   )split)rU   r   s     r   r   r     s3    #))#..N88888NN""r   c                 
    | dv S )N)rd   rb   r   rU   s    r   r   r     s    %%%r   c                 ~    t           j                            |           ot          j        | t           j                  S rX   )rI   r   isfileaccessX_OKr   s    r   r   r     s)    7>>%  >RYubg%>%>>r   c                 @    t           j                            |           S rX   )rI   r   r   r   s    r   validate_filepathr         7>>%   r   c                 @    t           j                            |           S rX   )rI   r   r   r   s    r   validate_pathr     r   r   c                      t          |           S rX   )r   r   s    r   to_intr     s    u::r   c                      t          |           S rX   )floatr   s    r   to_floatr     s    <<r   c                 @    t          | t                    r| S | dv rdndS )N)rd   TrueTF)r.   r   r   s    r   to_boolr     s.    % ,,,44%7r   c                 8    t                               | |          S rX   )_gconfr:   rL   rq   s     r   r:   r:     s    ::dM***r   Fc                 :    t                               | |          S )Nru   rv   )r   rx   r   s     r   rx   rx     s%    ==}/D  F F Fr   c                 8    t                               | |          S rX   )r   rz   r   s     r   rz   rz     s    ;;t]+++r   c                 ,    t          | ||||          ad S rX   )r   r   )default_confcustom_confr"   r#   r$   s        r   loadr     s"     <dO%' 'FFFr   c                 <    t                               | |           d S rX   )r   rT   )rL   rU   s     r   	setconfigr     s    
JJtUr   c                 :    t                               |            d S rX   )r   rP   )rL   s    r   resetconfigr     s    
LLr   Tc                 @    t                               | ||           d S )N)rU   rY   )r   rZ   )rL   rU   rY   s      r   rZ   rZ     s     
LLU-L@@@@@r   rX   r   r   )&ConfigParserr   r   ImportErrorconfigparserrI   r   r8   r   r   	threadingr   r   	Exceptionr	   r   objectr   r   r   r   r   r   r   r   r   r   r   r   r   r   r:   rx   rz   r   r   r   rZ   r   r   r   <module>r      s  =<<<<<<<<< = = =<<<<<<<<<<= 				                   
 
	 	 	 	 	9 	 	 		 	 	 	 		 	 	 	u u u u uF u u un	  ! ! !>      # # #& & &? ? ?! ! !! ! !    8 8 8+ + + +F F F F
, , , , $(b"!' ' ' '  
  
A A A A A As    