
    =Ogl                        	 d dl mZ d dlm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Zg dZeZdZdZ G d de          Z G d	 d
e          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z e            Z G d d          Z G d d e          Z  G d! d"e          Z! G d# d$e          Z" G d% d&e          Z# G d' d(e#          Z$ G d) d*e$          Z% G d+ d,e          Z& G d- d.e          Z'dS )/    )MutableMapping)ChainMapN)NoSectionErrorDuplicateOptionErrorDuplicateSectionErrorNoOptionErrorInterpolationErrorInterpolationDepthErrorInterpolationMissingOptionErrorInterpolationSyntaxErrorParsingErrorMissingSectionHeaderErrorConfigParserSafeConfigParserRawConfigParserInterpolationBasicInterpolationExtendedInterpolationLegacyInterpolationSectionProxyConverterMappingDEFAULTSECTMAX_INTERPOLATION_DEPTHDEFAULT
   c                   "    e Zd Z	 ddZd ZeZdS )Error c                 J    || _         t                              | |           d S N)message	Exception__init__)selfmsgs     %/usr/lib64/python3.11/configparser.pyr#   zError.__init__   s%    4%%%%%    c                     | j         S r    )r!   r$   s    r&   __repr__zError.__repr__   s
    |r'   N)r   )__name__
__module____qualname__r#   r*   __str__ r'   r&   r   r      s;        1& & & &   GGGr'   r   c                       e Zd Z	 d ZdS )r   c                 `    t                               | d|           || _        |f| _        d S )NzNo section: )r   r#   sectionargsr$   r2   s     r&   r#   zNoSectionError.__init__   s1    tt:;;;K			r'   Nr+   r,   r-   r#   r/   r'   r&   r   r      s&        <         r'   r   c                       e Zd Z	 ddZdS )r   Nc                    t          |          dg}|hdt          |          g}|(|                    d                    |                     |                    d           |                    |           |}n|                    dd           t
                              | d                    |                     || _        || _	        || _
        |||f| _        d S )N already existsWhile reading from  [line {0:2d}]z
: section r   zSection r   )reprappendformatextendinsertr   r#   joinr2   sourcelinenor3   )r$   r2   rA   rB   r%   r!   s         r&   r#   zDuplicateSectionError.__init__   s    G}}/0,d6ll;G!/66v>>???NN<(((NN3CCJJq*%%%tRWWS\\***ff-			r'   NNr5   r/   r'   r&   r   r      s-        . . . . . .r'   r   c                       e Zd Z	 ddZdS )r   Nc                    t          |          dt          |          dg}|hdt          |          g}|(|                    d                    |                     |                    d           |                    |           |}n|                    dd           t
                              | d                    |                     || _        || _	        || _
        || _        ||||f| _        d S )	Nz in section r8   r9   r:   z	: option r   zOption r   )r;   r<   r=   r>   r?   r   r#   r@   r2   optionrA   rB   r3   )r$   r2   rF   rA   rB   r%   r!   s          r&   r#   zDuplicateOptionError.__init__   s    F||^T']] ",d6ll;G!/66v>>???NN;'''NN3CCJJq)$$$tRWWS\\***fff5			r'   rC   r5   r/   r'   r&   r   r      s-        6 6 6 6 6 6r'   r   c                       e Zd Z	 d ZdS )r   c                 v    t                               | d|d|           || _        || _        ||f| _        d S )Nz
No option z in section: r   r#   rF   r2   r3   )r$   rF   r2   s      r&   r#   zNoOptionError.__init__   sJ    tt) 	* 	* 	*W%			r'   Nr5   r/   r'   r&   r   r      s&        +& & & & &r'   r   c                       e Zd Z	 d ZdS )r	   c                 l    t                               | |           || _        || _        |||f| _        d S r    rI   )r$   rF   r2   r%   s       r&   r#   zInterpolationError.__init__  s6    tS!!!Wc*			r'   Nr5   r/   r'   r&   r	   r	      s&        :+ + + + +r'   r	   c                       e Zd Z	 d ZdS )r   c                     d                     ||||          }t                              | |||           || _        ||||f| _        d S )NzBad value substitution: option {!r} in section {!r} contains an interpolation key {!r} which is not a valid option name. Raw value: {!r})r=   r	   r#   	referencer3   )r$   rF   r2   rawvalrN   r%   s         r&   r#   z(InterpolationMissingOptionError.__init__  sV    !!'F!K!K 	 	##D&'3???"Wfi8			r'   Nr5   r/   r'   r&   r   r   	  s&        K9 9 9 9 9r'   r   c                       e Zd ZdS )r   N)r+   r,   r-   r/   r'   r&   r   r     s         r'   r   c                       e Zd Z	 d ZdS )r
   c                     d                     ||t          |          }t                              | |||           |||f| _        d S )NzRecursion limit exceeded in value substitution: option {!r} in section {!r} contains an interpolation key which cannot be substituted in {} steps. Raw value: {!r})r=   r   r	   r#   r3   )r$   rF   r2   rO   r%   s        r&   r#   z InterpolationDepthError.__init__   sU     &*A! ! 	
 	##D&'3???Wf-			r'   Nr5   r/   r'   r&   r
   r
     s&        :. . . . .r'   r
   c                   T    e Zd Z	 ddZed             Zej        d             Zd ZdS )r   Nc                     |r|rt          d          |s|st          d          |r|}t                              | d|z             || _        g | _        |f| _        d S )Nz:Cannot specify both `filename' and `source'. Use `source'.z%Required argument `source' not given.z"Source contains parsing errors: %r)
ValueErrorr   r#   rA   errorsr3   )r$   rA   filenames      r&   r#   zParsingError.__init__-  s      	 	 - . . . 	& 	DEEE 	FtAFJKKKJ			r'   c                 J    	 t          j        dt          d           | j        S NzNThe 'filename' attribute will be removed in Python 3.12. Use 'source' instead.   
stacklevelwarningswarnDeprecationWarningrA   r)   s    r&   rW   zParsingError.filename<  s2    '$1	
 	
 	
 	

 {r'   c                 N    	 t          j        dt          d           || _        d S rY   r]   r$   values     r&   rW   zParsingError.filenameF  s5    ($1	
 	
 	
 	

 r'   c                 h    | j                             ||f           | xj        d||fz  z  c_        d S )Nz
	[line %2d]: %s)rV   r<   r!   )r$   rB   lines      r&   r<   zParsingError.appendP  s:    FD>***,~==r'   rC   )r+   r,   r-   r#   propertyrW   setterr<   r/   r'   r&   r   r   *  sr        H      X _  _> > > > >r'   r   c                       e Zd Z	 d ZdS )r   c                     t                               | d|||fz             || _        || _        || _        |||f| _        d S )Nz7File contains no section headers.
file: %r, line: %d
%r)r   r#   rA   rB   re   r3   )r$   rW   rB   re   s       r&   r#   z"MissingSectionHeaderError.__init__X  sV    Gvt$%	& 	& 	& 	vt,			r'   Nr5   r/   r'   r&   r   r   U  s&        J- - - - -r'   r   c                   (    e Zd Z	 d Zd Zd Zd ZdS )r   c                     |S r    r/   )r$   parserr2   rF   rc   defaultss         r&   
before_getzInterpolation.before_getl      r'   c                     |S r    r/   r$   rl   r2   rF   rc   s        r&   
before_setzInterpolation.before_seto  ro   r'   c                     |S r    r/   rq   s        r&   before_readzInterpolation.before_readr  ro   r'   c                     |S r    r/   rq   s        r&   before_writezInterpolation.before_writeu  ro   r'   N)r+   r,   r-   rn   rr   rt   rv   r/   r'   r&   r   r   i  sS        L          r'   r   c                   B    e Zd Z	  ej        d          Zd Zd Zd ZdS )r   z%\(([^)]+)\)sc           	      f    g }|                      ||||||d           d                    |          S N   r   _interpolate_somer@   r$   rl   r2   rF   rc   rm   Ls          r&   rn   zBasicInterpolation.before_get  7    vvq%(ANNNwwqzzr'   c                     |                     dd          }| j                            d|          }d|v r't          d||                    d          fz            |S )Nz%%r   %1invalid interpolation syntax in %r at position %dreplace_KEYCREsubrU   findr$   rl   r2   rF   rc   	tmp_values         r&   rr   zBasicInterpolation.before_set  p    MM$++	L$$R33	) +.3Y^^C5H5H-IJ K K Kr'   c           
         |                     ||d|          }|t          k    rt          |||          |r|                    d          }	|	dk     r|                    |           d S |	dk    r'|                    |d |	                    ||	d          }|dd         }
|
dk    r |                    d           |dd          }n|
dk    r| j                            |          }|t          ||d|z            |                    |	                    d                    }||
                                d          }	 ||         }n!# t          $ r t          ||||          d w xY wd|v r|                     |||||||dz              n*|                    |           nt          ||d	|          |d S d S )
NTrawfallbackr   r   rz   rZ   ('bad interpolation variable reference %rz+'%' must be followed by '%' or '(', found: )getr   r
   r   r<   r   matchr   optionxformgroupendKeyErrorr   r|   )r$   rl   rF   accumrestr2   mapdepthrO   pcmvarvs                 r&   r|   z$BasicInterpolation._interpolate_some  s/   GVEE***)&'6BBB "	+		#A1uuT"""1uuT"1"X&&&ABBxQqS	ACxxS!!!ABBxcL&&t,,9267ADHJ J J((44AEEGGHH~@CAA @ @ @96 6;?@@ !88**665!+2CD D D D LLOOOO.GG#'4*+ + +?  "	+ "	+ "	+ "	+ "	+s   E E*N	r+   r,   r-   recompiler   rn   rr   r|   r/   r'   r&   r   r   y  s[        I bj)**G  
  '+ '+ '+ '+ '+r'   r   c                   B    e Zd Z	  ej        d          Zd Zd Zd ZdS )r   z\$\{([^}]+)\}c           	      f    g }|                      ||||||d           d                    |          S ry   r{   r}   s          r&   rn   z ExtendedInterpolation.before_get  r   r'   c                     |                     dd          }| j                            d|          }d|v r't          d||                    d          fz            |S )Nz$$r   $r   r   r   s         r&   rr   z ExtendedInterpolation.before_set  r   r'   c                 6   |                     ||d|          }|t          k    rt          |||          |r`|                    d          }	|	dk     r|                    |           d S |	dk    r'|                    |d |	                    ||	d          }|dd         }
|
dk    r!|                    d           |dd          }n|
dk    r| j                            |          }|t          ||d|z            |                    d          	                    d	          }||
                                d          }|}|}	 t          |          dk    r$|                    |d                   }||         }nct          |          dk    r<|d         }|                    |d                   }|                     ||d
          }nt          ||d|          nA# t          t          t          f$ r' t!          |||d	                    |                    d w xY wd|v rA|                     |||||t'          |                    |d
                    |dz              n*|                    |           nt          ||d|          |^d S d S )NTr   r   r   rz   rZ   {r   :)r   zMore than one ':' found: z+'$' must be followed by '$' or '{', found: )r   r   r
   r   r<   r   r   r   r   splitr   lenr   r   r   r   r   r@   r|   dictitems)r$   rl   rF   r   r   r2   r   r   rO   r   r   r   pathsectoptr   s                   r&   r|   z'ExtendedInterpolation._interpolate_some  s   GVEE***)&'6BBB /	+		#A1uuT"""1uuT"1"X&&&ABBxQqS	ACxxS!!!ABBxcL&&t,,9267ADHJ J Jwwqzz'',,AEEGGHH~K4yyA~~$00a99HTa#Aw$00a99"JJtSdJ;;6"GG=ATCE E E !.-@ K K K9$A AFJKK !88**63q$+/Tt0L0L+M+M+0196 6 6 6 LLOOOO.GG#'4*+ + +Y  /	+ /	+ /	+ /	+ /	+s   	BG$ $>H"Nr   r/   r'   r&   r   r     sZ        > bj)**G  
  4+ 4+ 4+ 4+ 4+r'   r   c                   b     e Zd Z	  ej        d          Z fdZd Zd Ze	d             Z
 xZS )r   z%\(([^)]*)\)s|.c                 r     t                      j        |i | t          j        dt          d           d S )NzLegacyInterpolation has been deprecated since Python 3.2 and will be removed from the configparser module in Python 3.13. Use BasicInterpolation or ExtendedInterpolation instead.rZ   r[   superr#   r^   r_   r`   r$   r3   kwargs	__class__s      r&   r#   zLegacyInterpolation.__init__  sO    $)&)))G 1		
 	
 	
 	
 	
 	
r'   c                 @   |}t           }|r{|dz  }|rqd|v rmt          j        | j        |          }| j                            ||          }	 ||z  }n1# t          $ r#}	t          ||||	j        d                   d d }	~	ww xY wn|{|rd|v rt          |||          |S )Nrz   z%()rl   r   )
r   	functoolspartial_interpolation_replacer   r   r   r   r3   r
   )
r$   rl   r2   rF   rc   varsrO   r   r   es
             r&   rn   zLegacyInterpolation.before_get  s    ' 	QJE 
#+D,G39; ; ;((%88F!DLEE F F F9< <AEFF   	  	CTU]])&'6BBBs   A 
BA<<Bc                     |S r    r/   rq   s        r&   rr   zLegacyInterpolation.before_set.  ro   r'   c                     |                      d          }||                                  S d|                    |          z  S )Nrz   z%%(%s)s)r   r   )r   rl   ss      r&   r   z*LegacyInterpolation._interpolation_replace1  s=    KKNN9;;== v11!4444r'   )r+   r,   r-   r   r   r   r#   rn   rr   staticmethodr   __classcell__r   s   @r&   r   r     s        @ bj+,,G
 
 
 
 
  (   5 5 \5 5 5 5 5r'   r   c            
           e Zd Z	 dZdZdZ e            Z ej	        eej
                  Z ej	        e                    d          ej
                  Z ej	        e                    d          ej
                  Z ej	        d          Zddddddddd	Zd
edfddd
ddeeeddZd Zd Zd Zd Zd Zd;dZd;dZd<dZd=dZd;dZdd
eddZd Z dd
eddZ!dd
eddZ"dd
edd Z#dd
edd!Z$edd
f fd"	Z%d# Z&d$ Z'd% Z(d;d&Z)d>d'Z*d( Z+d) Z,d* Z-d+ Z.d, Z/d- Z0d. Z1d/ Z2d0 Z3d1 Z4d2 Z5d3 Z6d4 Z7d5 Z8d6 Z9d7d7d7d8d9Z:e;d:             Z< xZ=S )?r   z
        \[                                 # [
        (?P<header>.+)                     # very permissive!
        \]                                 # ]
        a  
        (?P<option>.*?)                    # very permissive!
        \s*(?P<vi>{delim})\s*              # any number of space/tab,
                                           # followed by any of the
                                           # allowed delimiters,
                                           # followed by any space/tab
        (?P<value>.*)$                     # everything up to eol
        a  
        (?P<option>.*?)                    # very permissive!
        \s*(?:                             # any number of space/tab,
        (?P<vi>{delim})\s*                 # optionally followed by
                                           # any of the allowed
                                           # delimiters, followed by any
                                           # space/tab
        (?P<value>.*))?$                   # everything up to eol
        z=|:delimz\STF)1yestrueon0nofalseoffN=r   )#;)
delimiterscomment_prefixesinline_comment_prefixesstrictempty_lines_in_valuesdefault_sectioninterpolation
convertersc                   || _         |                                  | _        |                                  | _        t          |           | _        |                                  | _        t          | |	          | j        |	<   t          |          | _        |dk    r|r| j	        n| j
        | _        nd                    d |D                       }|r>t          j        | j                            |          t          j                  | _        n=t          j        | j                            |          t          j                  | _        t          |pd          | _        t          |pd          | _        || _        || _        || _        |	| _        |
| _        | j        t4          u r| j        | _        | j        t9                      | _        t;          | j        t8                    s$t=          dt?          | j                             |t4          ur| j                             |           |r| !                    |           d S d S )Nr   |c              3   >   K   | ]}t          j        |          V  d S r    )r   escape).0ds     r&   	<genexpr>z+RawConfigParser.__init__.<locals>.<genexpr>t  s*      ::!1::::::r'   r   r/   zSinterpolation= must be None or an instance of Interpolation; got an object of type )"_dict	_sections	_defaultsr   _converters_proxiesr   tuple_delimiters	OPTCRE_NVOPTCRE_optcrer@   r   r   _OPT_NV_TMPLr=   VERBOSE	_OPT_TMPL_comment_prefixes_inline_comment_prefixes_strict_allow_no_value_empty_lines_in_valuesr   _interpolation_UNSET_DEFAULT_INTERPOLATIONr   
isinstance	TypeErrortypeupdate_read_defaults)r$   rm   	dict_typeallow_no_valuer   r   r   r   r   r   r   r   r   s                r&   r#   zRawConfigParser.__init__c  s.    
+D11

)5dO)L)Lo& ,,##-;L4>>DLL::z:::::A 6!z$*;*B*B*B*K*K*,* 6  6  "z$.*?*?a*?*H*H*,* 6  6!&'7'=2!>!>(-.E.K(L(L%-&;#,+&(("&"=D&"///D$-}== 	F*.t/B*C*CF F   V####J/// 	*)))))	* 	*r'   c                     | j         S r    )r   r)   s    r&   rm   zRawConfigParser.defaults  s
    ~r'   c                 P    	 t          | j                                                  S r    )listr   keysr)   s    r&   sectionszRawConfigParser.sections  s!    ADN''))***r'   c                     	 || j         k    rt          d|z            || j        v rt          |          |                                 | j        |<   t          | |          | j        |<   d S )NzInvalid section name: %r)r   rU   r   r   r   r   r   r4   s     r&   add_sectionzRawConfigParser.add_section  sv    	
 d***7'ABBBdn$$'000"&**,,w!-dG!<!<gr'   c                     	 || j         v S r    )r   r4   s     r&   has_sectionzRawConfigParser.has_section  s    	 $.((r'   c                     	 	 | j         |                                         }n# t          $ r t          |          d w xY w|                    | j                   t          |                                          S r    )r   copyr   r   r   r   r   r  )r$   r2   optss      r&   optionszRawConfigParser.options  sy    G	4>'*//11DD 	4 	4 	4 ))t3	4DN###DIIKK   s   # >c                    	 t          |t          t          t          j        f          r|g}t          j        |          }g }|D ]}	 t          ||          5 }|                     ||           d d d            n# 1 swxY w Y   n# t          $ r Y Ow xY wt          |t          j                  rt          j
        |          }|                    |           |S )N)encoding)r   strbytesosPathLikeiotext_encodingopen_readOSErrorfspathr<   )r$   	filenamesr  read_okrW   fps         r&   readzRawConfigParser.read  s+   
	 i#ubk!:;; 	$"I#H--! 	% 	%H(X666 -"JJr8,,,- - - - - - - - - - - - - - -   (BK00 /9X..NN8$$$$s6   BA;/B;A?	?BA?	B
BBc                 n    	 |	 |j         }n# t          $ r d}Y nw xY w|                     ||           d S )Nz<???>)nameAttributeErrorr  )r$   frA   s      r&   	read_filezRawConfigParser.read_file  sZ    	 >!! ! ! ! !

1fs    <string>c                 \    	 t          j        |          }|                     ||           d S r    )r  StringIOr  )r$   stringrA   sfiles       r&   read_stringzRawConfigParser.read_string  s.    5F##uf%%%%%r'   <dict>c                 F   	 t                      }|                                D ]\  }}t          |          }	 |                     |           n## t          t
          f$ r | j        r||v r Y nw xY w|                    |           |                                D ]\  }}|                     t          |                    }|t          |          }| j        r||f|v rt          |||          |                    ||f           |                      |||           d S r    )
setr   r  r  r   rU   r   addr   r   )r$   
dictionaryrA   elements_addedr2   r  keyrc   s           r&   	read_dictzRawConfigParser.read_dict  sW   	 '--// 	. 	.MGT'llG  ))))):6   < G~$=$= w'''"jjll . .
U&&s3xx00$JJE< EWcNn$D$D.wVDDD""GS>222#u----.	. 	.s   AA/.A/c                 n    	 t          j        dt          d           |                     ||           d S )NzMThis method will be removed in Python 3.12. Use 'parser.read_file()' instead.rZ   r[   )rA   )r^   r_   r`   r  )r$   r  rW   s      r&   readfpzRawConfigParser.readfp  sF    001	
 	
 	
 	

 	r(+++++r'   r   r   r   c                H   	 	 |                      ||          }n# t          $ r |t          u r |cY S w xY w|                     |          }	 ||         }n+# t          $ r |t          u rt          ||          |cY S w xY w|s||S | j                            | ||||          S r    )_unify_valuesr   r   r   r   r   r   rn   )r$   r2   rF   r   r   r   r   rc   s           r&   r   zRawConfigParser.get  s    		 ""7D11AA 	  	  	 6!!		 
 !!&))	 fIEE 	  	  	 6!!#FG444		   	5%-L&11$235 5 5s    33A %A=<A=c                 2     | | j         ||fi |          S r    )r   )r$   r2   convrF   r   s        r&   _getzRawConfigParser._get2  s(    tHDHWf7777888r'   c                p    	  | j         |||f||d|S # t          t          f$ r |t          u r |cY S w xY w)N)r   r   )r5  r   r   r   )r$   r2   rF   r4  r   r   r   r   s           r&   	_get_convzRawConfigParser._get_conv5  sp    	49WdF '$ ' '%' ' '. 	 	 	6!!OOO	s    55c                4     | j         ||t          f|||d|S Nr0  )r7  intr$   r2   rF   r   r   r   r   s          r&   getintzRawConfigParser.getint@  s7    t~gvs ;$'/; ;39; ; 	;r'   c                4     | j         ||t          f|||d|S r9  )r7  floatr;  s          r&   getfloatzRawConfigParser.getfloatE  s7    t~gvu ;#D'/; ;39; ; 	;r'   c                4     | j         ||| j        f|||d|S r9  )r7  _convert_to_booleanr;  s          r&   
getbooleanzRawConfigParser.getbooleanJ  s@    t~gvt/G O"%D8O OGMO O 	Or'   c                     	 t           u r t                                                      S  j                                        	                      j                            n*# t          $ r  j        k    rt                    Y nw xY wt                                                    }|r2|                                D ]\  }}|                     |          <    fd|rfdfd|D             S )Nc                 L    j                             | |                    S r    )r   rn   )rF   r   r2   r$   s    r&   <lambda>z'RawConfigParser.items.<locals>.<lambda>g  s)    d&9&D&DTVQvY'+ '+ r'   c                     |          S r    r/   )rF   r   s    r&   rE  z'RawConfigParser.items.<locals>.<lambda>j  s    !F) r'   c                 *    g | ]}| |          fS r/   r/   )r   rF   value_getters     r&   
<listcomp>z)RawConfigParser.items.<locals>.<listcomp>k  s(    GGG6f--.GGGr'   )r   r   r   r   r  r   r   r   r   r   r   r  r   )
r$   r2   r   r   	orig_keysr,  rc   r   rH  r   s
   ``     @@r&   r   zRawConfigParser.itemsO  sA   		 f77==??"N!!	.HHT^G,---- 	. 	. 	.$...$W--- /.	. NN	 	1"jjll 1 1
U+0$""3''((+ + + + + + 	43333LGGGGYGGGGs   
 A+ +$BBc                 `    	 |                                  D ]}| |         }| |= ||fc S t          r    )r  r   r$   r,  rc   s      r&   popitemzRawConfigParser.popitemm  sE    	 ==?? 	 	CIES	:r'   c                 *    |                                 S r    )lower)r$   	optionstrs     r&   r   zRawConfigParser.optionxformz  s       r'   c                     	 |r|| j         k    r|                     |          }|| j        v S || j        vrdS |                     |          }|| j        |         v p|| j        v S )NF)r   r   r   r   )r$   r2   rF   s      r&   
has_optionzRawConfigParser.has_option}  s    	N  	1'T%999%%f--FT^++DN**5%%f--FdnW55 0/1r'   c                     	 |r| j                             | |||          }|r|| j        k    r| j        }n-	 | j        |         }n# t
          $ r t          |          d w xY w|||                     |          <   d S r    )r   rr   r   r   r   r   r   r   )r$   r2   rF   rc   sectdicts        r&   r(  zRawConfigParser.set  s     	:'224&38: :E 	8'T%999~HH8>'2 8 8 8$W--478-2!!&))***s   A A c                 \   	 |r!d                     | j        d                   }n| j        d         }| j        r4|                     || j        | j                                        |           | j        D ]7}|                     ||| j        |                                         |           8d S )Nz {} r   )r=   r   r   _write_sectionr   r   r   )r$   r  space_around_delimitersr   r2   s        r&   writezRawConfigParser.write  s    	 # 	$d.q122AA #A> 	?D$8$(N$8$8$:$:A? ? ?~ 	D 	DGG $w 7 = = ? ?D D D D	D 	Dr'   c                    	 |                     d                    |                     |D ]}\  }}| j                            | |||          }|| j        s'|t          |                              dd          z   }nd}|                     d                    ||                     ~|                     d           d S )Nz[{}]

z
	r   z{}{}
)rX  r=   r   rv   r   r  r   )r$   r  section_namesection_items	delimiterr,  rc   s          r&   rV  zRawConfigParser._write_section  s    ;
..///' 	2 	2JC'44T<5:< <E (< !CJJ$6$6tV$D$DDHHX__S%001111
r'   c                     	 |r|| j         k    r| j        }n-	 | j        |         }n# t          $ r t	          |          d w xY w|                     |          }||v }|r||= |S r    )r   r   r   r   r   r   )r$   r2   rF   rT  existeds        r&   remove_optionzRawConfigParser.remove_option  s     	8'T%999~HH8>'2 8 8 8$W--478!!&))H$ 	! s	   & Ac                 >    	 || j         v }|r| j         |= | j        |= |S r    )r   r   )r$   r2   r_  s      r&   remove_sectionzRawConfigParser.remove_section  s2    $T^+ 	'w'g&r'   c                 z    || j         k    r$|                     |          st          |          | j        |         S r    )r   r  r   r   r$   r,  s     r&   __getitem__zRawConfigParser.__getitem__  s<    $&&&t/?/?/D/D&3--}S!!r'   c                     || v r| |         |u rd S || j         k    r| j                                         n(|| j        v r| j        |                                          |                     ||i           d S r    )r   r   clearr   r-  rL  s      r&   __setitem__zRawConfigParser.__setitem__  s     $;;49--F $&&&N  """"DN""N3%%'''U|$$$$$r'   c                     || j         k    rt          d          |                     |          st          |          |                     |           d S )Nz"Cannot remove the default section.)r   rU   r  r   rb  rd  s     r&   __delitem__zRawConfigParser.__delitem__  s[    $&&&ABBB$$ 	 3--C     r'   c                 B    || j         k    p|                     |          S r    )r   r  rd  s     r&   __contains__zRawConfigParser.__contains__  s#    d**Cd.>.>s.C.CCr'   c                 0    t          | j                  dz   S )Nrz   )r   r   r)   s    r&   __len__zRawConfigParser.__len__  s    4>""Q&&r'   c                 f    t          j        | j        f| j                                                  S r    )	itertoolschainr   r   r  r)   s    r&   __iter__zRawConfigParser.__iter__  s(     468K8K8M8MNNNr'   c                     	 t                      }d }d }d }d}d}d }		 t          |d          D ]\  }}
t          j        }d | j        D             }|t          j        k    r|ri }|                                D ]c\  }}|
                    ||dz             }|dk    r%|||<   |dk    s#|dk    r-|
|dz
                                           rt          ||          }d|}|t          j        k    r|| j	        D ]-}|

                                                    |          rd} n.|t          j        k    rd }|
d |         
                                }|s?| j        r*|'|%|r#||         ||                             d           nt          j        }g| j                            |
          }|r|                                nd}|%|r#||k    r||                             |           |}| j                            |          }|r|                    d          }|| j        v r?| j        r||v rt-          |||          | j        |         }|                    |           n^|| j        k    r| j        }nK|                                 }|| j        |<   t7          | |          | j        |<   |                    |           d }|t;          |||
          | j                            |          }|r|                    dd	d
          \  }}}|s|                     |	|||
          }	|                      |!                                          }| j        r||f|v rtE          ||||          |                    ||f           ||
                                }|g||<   |d ||<   |                     |	|||
          }		 | #                                 n# | #                                 w xY w|	r|	d S )Nr   rz   )startc                     i | ]}|d S )r/   )r   r   s     r&   
<dictcomp>z)RawConfigParser._read.<locals>.<dictcomp>  s    "P"P"PQ1b"P"P"Pr'   rv  r   headerrF   virc   )$r(  	enumeratesysmaxsizer   r   r   isspaceminr   strip
startswithr   r<   NONSPACECREsearchrt  SECTCREr   r   r   r   r   r)  r   r   r   r   r   r   r   _handle_errorr   rstripr   _join_multiline_values)r$   r  fpnamer+  cursectsectnameoptnamerB   indent_levelr   re   comment_startinline_prefixesnext_prefixesprefixindexrc   first_nonspacecur_indent_levelmory  optvals                         r&   r  zRawConfigParser._read  s   	  _	* )"A 6 6 6 \L \L #"P"P$2O"P"P"P#s{222$&M)8)>)>)@)@ F F $		&%' : : B;;$05f- A::%!))U1W8M8M8O8O),/u,E,EM&3O $s{222 #4  Fzz||..v66 () !CK//$(M^m^,2244 2 
3 *1#/# 0#G,8#G,33B777 (+{!%!1!8!8!>!>=K#R>#7#7#9#9#9QR 'G'$|33G$++E2222 $4L++E22B .L#%88H#5#5#t~55#| DN0J0J&;Hf<B'D 'D !D&*nX&>G*..x8888%)===&*nGG&*jjllG7>DN846B46R6RDM(3*..x888"& 7MMM "\//66 L24((8T72S2S/GR#* P$($6$6q&&$$O$O&*&6&6w~~7G7G&H&HG $ K!)7 3~ E E&:8W;A6'K 'K !K*..'/BCCC  &1)/4:8 0 0 48 0 0 !% 2 21ffd K KAAy\L| ''))))D'')))) 	G	 	s   N.O! !O7c                 x   | j         | j        f}t          j        |f| j                                                  }|D ]{\  }}|                                D ]a\  }}t          |t                    r'd                    |          	                                }| j
                            | |||          ||<   b|d S )NrZ  )r   r   rp  rq  r   r   r   r   r@   r  r   rt   )r$   rm   all_sectionsr2   r
  r  vals          r&   r  z&RawConfigParser._join_multiline_valuesp  s    '7 {'+~';';'='=? ? , 	K 	KGW$]]__ K K	cc4(( 2))C..//11C $ 3 ? ?@G@Dc!K !KK	K 	Kr'   c                 v    	 |                                 D ]"\  }}|| j        |                     |          <   #d S r    )r   r   r   )r$   rm   r,  rc   s       r&   r   zRawConfigParser._read_defaults|  sK    	+"..** 	: 	:JC49DN4++C0011	: 	:r'   c                 n    |st          |          }|                    |t          |                     |S r    )r   r<   r;   )r$   excr  rB   re   s        r&   r  zRawConfigParser._handle_error  s6     	'v&&C

64::&&&
r'   c                 6   	 i }	 | j         |         }n+# t          $ r || j        k    rt          |          d Y nw xY wi }|rC|                                D ].\  }}|t          |          }|||                     |          <   /t          ||| j                  S r    )	r   r   r   r   r   r  r   	_ChainMapr   )r$   r2   r   sectiondictvardictr,  rc   s          r&   r2  zRawConfigParser._unify_values  s    	 	8.1KK 	8 	8 	8$...$W--47 /.	8  	7"jjll 7 7
U$JJE16((--..+t~>>>s    %;;c                     	 |                                 | j        vrt          d|z            | j        |                                          S )NzNot a boolean: %s)rO  BOOLEAN_STATESrU   rb   s     r&   rA  z#RawConfigParser._convert_to_boolean  sG    	;;== 333058999"5;;==11r'   r   )r2   rF   rc   c                    	 t          |t                    st          d          t          |t                    st          d          | j        r|r&t          |t                    st          d          d S d S )Nzsection names must be stringszoption keys must be stringszoption values must be strings)r   r  r   r   )r$   r2   rF   rc   s       r&   _validate_value_typesz%RawConfigParser._validate_value_types  s    	 '3'' 	=;<<<&#&& 	;9:::# 	Au 	AeS)) A ?@@@A A	A 	Ar'   c                     | j         S r    )r   r)   s    r&   r   zRawConfigParser.converters  s    r'   r    )r   )r&  )T)>r+   r,   r-   
_SECT_TMPLr   r   r   r   r   r   r   r  r=   r   r   r  r  _default_dictr   r   r#   rm   r  r  r  r
  r  r  r%  r-  r/  r   r5  r7  r<  r?  rB  r   rM  r   rR  r(  rX  rV  r`  rb  re  rh  rj  rl  rn  rr  r  r  r   r  r2  rA  r  rf   r   r   r   s   @r&   r   r   :  s?       6J
IL +]__bjRZ00GRZ	((u(55rzBBF 
<..U.;;RZHHI"*U##Kd$ eM MN !% %+*5?",dD!,%&+* +* +* +* +*Z  + + +
= = =) ) )! ! !   6   & & & &
. . . .>, , , , +0dV #5 #5 #5 #5 #5J9 9 9 7<$!     .3; ; ; ; ;
 054 ; ; ; ; ;
 27T"O O O O O
 #D H H H H H H<  ! ! !1 1 13 3 3 3D D D D(      " " "
% % %! ! !D D D' ' 'O O Oz z zx
K 
K 
K: : :  ? ? ?(2 2 2 02"B A A A A A*     X         r'   r   c                   F     e Zd Z	  e            Zd fd	Z fdZd Z xZS )r   Nc                 ~    	 |                      ||           t                                          |||           d S N)rF   rc   )r  r   r(  )r$   r2   rF   rc   r   s       r&   r(  zConfigParser.set  sA    	.""&">>>GVU+++++r'   c                 x    	 |                      |           t                                          |           d S )N)r2   )r  r   r  )r$   r2   r   s     r&   r  zConfigParser.add_section  s?    	 	""7"333G$$$$$r'   c                     	 	 | j         }t                      | _         |                     | j        |i           || _         d S # || _         w xY wr    )r   r   r-  r   )r$   rm   hold_interpolations      r&   r   zConfigParser._read_defaults  s^    	
	5!%!4"///DNND0(;<<<"4D"4D4444s   6A 	Ar    )	r+   r,   r-   r   r   r(  r  r   r   r   s   @r&   r   r     sw        2//11, , , , , ,% % % % %5 5 5 5 5 5 5r'   r   c                         e Zd Z	  fdZ xZS )r   c                 r     t                      j        |i | t          j        dt          d           d S )NzThe SafeConfigParser class has been renamed to ConfigParser in Python 3.2. This alias will be removed in Python 3.12. Use ConfigParser directly instead.rZ   r[   r   r   s      r&   r#   zSafeConfigParser.__init__  sN    $)&)))2 1		
 	
 	
 	
 	
 	
r'   )r+   r,   r-   r#   r   r   s   @r&   r   r     s;        B
 
 
 
 
 
 
 
 
r'   r   c                       e Zd Z	 d Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zed
             Zed             ZddddddZdS )r   c                     	 || _         || _        |j        D ]A}d|z   }t          j        | j        t          ||                    }t          | ||           Bd S )Nr   _impl)_parser_namer   r   r   r   getattrsetattr)r$   rl   r  r4  r,  getters         r&   r#   zSectionProxy.__init__  sn    N
% 	' 	'D$,C&txwvs7K7KLLLFD#v&&&&	' 	'r'   c                 6    d                     | j                  S )Nz<Section: {}>)r=   r  r)   s    r&   r*   zSectionProxy.__repr__  s    %%dj111r'   c                     | j                             | j        |          st          |          | j                             | j        |          S r    )r  rR  r  r   r   rd  s     r&   re  zSectionProxy.__getitem__  sD    |&&tz377 	 3--|
C000r'   c                 |    | j                             ||           | j                             | j        ||          S r  )r  r  r(  r  rL  s      r&   rh  zSectionProxy.__setitem__  s9    **#U*CCC|
C777r'   c                     | j                             | j        |          r | j                             | j        |          st	          |          d S r    )r  rR  r  r`  r   rd  s     r&   rj  zSectionProxy.__delitem__  sP    ''
C88 	 **4:s;;	 3--	  	 r'   c                 B    | j                             | j        |          S r    )r  rR  r  rd  s     r&   rl  zSectionProxy.__contains__  s    |&&tz3777r'   c                 D    t          |                                           S r    )r   _optionsr)   s    r&   rn  zSectionProxy.__len__
  s    4==??###r'   c                 N    |                                                                  S r    )r  rr  r)   s    r&   rr  zSectionProxy.__iter__  s    }}'')))r'   c                     | j         | j        j        k    r| j                            | j                   S | j                                        S r    )r  r  r   r
  rm   r)   s    r&   r  zSectionProxy._options  s@    :555<''
333<((***r'   c                     | j         S r    )r  r)   s    r&   rl   zSectionProxy.parser  s     |r'   c                     | j         S r    )r  r)   s    r&   r  zSectionProxy.name  s     zr'   NF)r   r   r  c                F    	 |s| j         j        } || j        |f|||d|S r9  )r  r   r  )r$   rF   r   r   r   r  r   s          r&   r   zSectionProxy.get   sN    	  	%L$EuTZ 2St&2 2*02 2 	2r'   r    )r+   r,   r-   r#   r*   re  rh  rj  rl  rn  rr  r  rf   rl   r  r   r/   r'   r&   r   r     s        5' ' '2 2 21 1 1
8 8 8     
8 8 8$ $ $* * *+ + +   X   X2D2 2 2 2 2 2 2r'   r   c                   T    e Zd Z	  ej        d          Zd Zd Zd Zd Z	d Z
d ZdS )	r   z^get(?P<name>.+)$c                    || _         i | _        t          | j                   D ]^}| j                            |          }|r"t          t          | j         |                    sAd | j        |                    d          <   _d S )Nr  )r  _datadir	GETTERCREr   callabler  r   )r$   rl   r  r   s       r&   r#   zConverterMapping.__init__:  s    
$,'' 	/ 	/F$$V,,A HWT\6%B%BCC *.DJqwwv''		/ 	/r'   c                     | j         |         S r    )r  rd  s     r&   re  zConverterMapping.__getitem__C  s    z#r'   c           	         	 d|z   }n># t           $ r1 t          d                    |t          |                              w xY w|dk    rt          d          || j        |<   t          j        | j        j        |          }||_	        t          | j        ||           | j                                        D ].}t          j        |j        |          }t          |||           /d S )Nr   zIncompatible key: {} (type: {})z)Incompatible key: cannot use "" as a name)r4  r  )r   rU   r=   r   r  r   r   r  r7  	converterr  valuesr   )r$   r,  rc   kfuncproxyr  s          r&   rh  zConverterMapping.__setitem__F  s   	8AA 	8 	8 	8   &sDII 6 68 8 8	8 ::HIII
3 !7eDDDa&&&\((** 	& 	&E&uy===FE1f%%%%	& 	&s	    ;Ac                    	 d|pd z   }n# t           $ r t          |          w xY w| j        |= t          j        | j        f| j                                                  D ]#}	 t          ||           # t          $ r Y  w xY wd S )Nr   )	r   r   r  rp  rq  r  r  delattrr  )r$   r,  r  insts       r&   rj  zConverterMapping.__delitem__V  s    	 %AA 	  	  	 3--	 JsOOT\OT\5H5H5J5JKK 	 	Da    !    	 	s   
 $$A55
BBc                 *    t          | j                  S r    )iterr  r)   s    r&   rr  zConverterMapping.__iter__d  s    DJr'   c                 *    t          | j                  S r    )r   r  r)   s    r&   rn  zConverterMapping.__len__g  s    4:r'   N)r+   r,   r-   r   r   r  r#   re  rh  rj  rr  rn  r/   r'   r&   r   r   0  s         
/00I/ / /  & & &            r'   r   )(collections.abcr   collectionsr   r  r   r  rp  r  r   r{  r^   __all__r   r  r   r   r"   r   r   r   r   r   r	   r   r   r
   r   r   objectr   r   r   r   r   r   r   r   r   r   r/   r'   r&   <module>r     s!  KZ + * * * * * - - - - - -     				     				 				 



 5 5 5  

 
 
 
 
I 
 
 
         U      . . . . .E . . .46 6 6 6 65 6 6 66& & & & &E & & &+ + + + + + + +	9 	9 	9 	9 	9&8 	9 	9 	9    1   
. 
. 
. 
. 
.0 
. 
. 
.(> (> (> (> (>5 (> (> (>V- - - - - - - -" 
        E+ E+ E+ E+ E+ E+ E+ E+PG+ G+ G+ G+ G+M G+ G+ G+T,5 ,5 ,5 ,5 ,5- ,5 ,5 ,5^@
  @
  @
  @
  @
 n @
  @
  @
 F5 5 5 5 5? 5 5 5@

 

 

 

 

| 

 

 

C2 C2 C2 C2 C2> C2 C2 C2L8 8 8 8 8~ 8 8 8 8 8r'   