
    z%i                        	 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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&y)-    )MutableMapping)ChainMapN)NoSectionErrorDuplicateOptionErrorDuplicateSectionErrorNoOptionErrorInterpolationErrorInterpolationDepthErrorInterpolationMissingOptionErrorInterpolationSyntaxErrorParsingErrorMissingSectionHeaderErrorConfigParserRawConfigParserInterpolationBasicInterpolationExtendedInterpolationLegacyInterpolationSectionProxyConverterMappingDEFAULTSECTMAX_INTERPOLATION_DEPTHDEFAULT
   c                        e Zd Z	 ddZd ZeZy)Errorc                 >    || _         t        j                  | |       y N)message	Exception__init__)selfmsgs     @/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/configparser.pyr!   zError.__init__   s    4%    c                     | j                   S r   )r   r"   s    r$   __repr__zError.__repr__   s    ||r%   N) )__name__
__module____qualname__r!   r(   __str__ r%   r$   r   r      s    1& Gr%   r   c                       e Zd Z	 d Zy)r   c                 T    t         j                  | d|       || _        |f| _        y )NzNo section: )r   r!   sectionargsr"   r1   s     r$   r!   zNoSectionError.__init__   s#    t:;K	r%   Nr*   r+   r,   r!   r.   r%   r$   r   r      s
    < r%   r   c                       e Zd Z	 ddZy)r   Nc                 v   t        |      dg}|Tdt        |      g}| |j                  dj                  |             |j                  d       |j                  |       |}n|j	                  dd       t
        j                  | dj                  |             || _        || _	        || _
        |||f| _        y )N already existsWhile reading from  [line {0:2d}]z
: section r   zSection r)   )reprappendformatextendinsertr   r!   joinr1   sourcelinenor2   )r"   r1   r@   rA   r#   r   s         r$   r!   zDuplicateSectionError.__init__   s    G}/0,d6l;G!/66v>?NN<(NN3CJJq*%tRWWS\*ff-	r%   NNr4   r.   r%   r$   r   r      s    .r%   r   c                       e Zd Z	 ddZy)r   Nc                    t        |      dt        |      dg}|Tdt        |      g}| |j                  dj                  |             |j                  d       |j                  |       |}n|j	                  dd       t
        j                  | dj                  |             || _        || _	        || _
        || _        ||||f| _        y )	Nz in section r7   r8   r9   z	: option r   zOption r)   )r:   r;   r<   r=   r>   r   r!   r?   r1   optionr@   rA   r2   )r"   r1   rE   r@   rA   r#   r   s          r$   r!   zDuplicateOptionError.__init__   s    F|^T'] ",d6l;G!/66v>?NN;'NN3CJJq)$tRWWS\*fff5	r%   rB   r4   r.   r%   r$   r   r      s    6r%   r   c                       e Zd Z	 d Zy)r   c                 j    t         j                  | d|d|       || _        || _        ||f| _        y )Nz
No option z in section: r   r!   rE   r1   r2   )r"   rE   r1   s      r$   r!   zNoOptionError.__init__   s4    t) 	*W%	r%   Nr4   r.   r%   r$   r   r      s
    +&r%   r   c                       e Zd Z	 d Zy)r	   c                 `    t         j                  | |       || _        || _        |||f| _        y r   rH   )r"   rE   r1   r#   s       r$   r!   zInterpolationError.__init__  s,    tS!Wc*	r%   Nr4   r.   r%   r$   r	   r	      s
    :+r%   r	   c                       e Zd Z	 d Zy)r   c                     dj                  ||||      }t        j                  | |||       || _        ||||f| _        y )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!   	referencer2   )r"   rE   r1   rawvalrM   r#   s         r$   r!   z(InterpolationMissingOptionError.__init__  sI    !!'F!K 	 	##D&'3?"Wfi8	r%   Nr4   r.   r%   r$   r   r   	  s
    K9r%   r   c                       e Zd Zy)r   N)r*   r+   r,   r.   r%   r$   r   r     s    r%   r   c                       e Zd Z	 d Zy)r
   c                 x    dj                  ||t        |      }t        j                  | |||       |||f| _        y )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!   r2   )r"   rE   r1   rN   r#   s        r$   r!   z InterpolationDepthError.__init__   sF     &*A! 	
 	##D&'3?Wf-	r%   Nr4   r.   r%   r$   r
   r
     s
    :.r%   r
   c                   &     e Zd Z	  fdZd Z xZS )r   c                 V    t         |   d|       || _        g | _        |f| _        y )Nz Source contains parsing errors: )superr!   r@   errorsr2   )r"   r@   	__class__s     r$   r!   zParsingError.__init__-  s/    ;F:FGJ	r%   c                 r    | j                   j                  ||f       | xj                  d||fz  z  c_        y )Nz
	[line %2d]: %s)rU   r;   r   )r"   rA   lines      r$   r;   zParsingError.append3  s0    FD>*,~==r%   )r*   r+   r,   r!   r;   __classcell__rV   s   @r$   r   r   *  s    H>r%   r   c                       e Zd Z	 d Zy)r   c                 z    t         j                  | d|||fz         || _        || _        || _        |||f| _        y )Nz7File contains no section headers.
file: %r, line: %d
%r)r   r!   r@   rA   rX   r2   )r"   filenamerA   rX   s       r$   r!   z"MissingSectionHeaderError.__init__;  sH    Gvt$%	& 	vt,	r%   Nr4   r.   r%   r$   r   r   8  s
    J-r%   r   c                   &    e Zd Z	 d Zd Zd Zd Zy)r   c                     |S r   r.   )r"   parserr1   rE   valuedefaultss         r$   
before_getzInterpolation.before_getO      r%   c                     |S r   r.   r"   r`   r1   rE   ra   s        r$   
before_setzInterpolation.before_setR  rd   r%   c                     |S r   r.   rf   s        r$   before_readzInterpolation.before_readU  rd   r%   c                     |S r   r.   rf   s        r$   before_writezInterpolation.before_writeX  rd   r%   N)r*   r+   r,   rc   rg   ri   rk   r.   r%   r$   r   r   L  s    Lr%   r   c                   D    e Zd Z	  ej                  d      Zd Zd Zd Zy)r   z%\(([^)]+)\)sc           	      V    g }| j                  ||||||d       dj                  |      S N   r)   _interpolate_somer?   r"   r`   r1   rE   ra   rb   Ls          r$   rc   zBasicInterpolation.before_getm  /    vvq%(ANwwqzr%   c                     |j                  dd      }| j                  j                  d|      }d|v rt        d||j	                  d      fz        |S )Nz%%r)   %1invalid interpolation syntax in %r at position %dreplace_KEYCREsub
ValueErrorfindr"   r`   r1   rE   ra   	tmp_values         r$   rg   zBasicInterpolation.before_setr  `    MM$+	LL$$R3	) +.3Y^^C5H-IJ K Kr%   c           
         |j                  ||d|      }|t        kD  rt        |||      |r|j                  d      }	|	dk  r|j	                  |       y |	dkD  r|j	                  |d |	        ||	d  }|dd }
|
dk(  r|j	                  d       |dd  }n|
dk(  r| j
                  j                  |      }|t        ||d|z        |j                  |j                  d            }||j                         d  }	 ||   }d|v r| j                  |||||||dz          n"|j	                  |       nt        ||d	|      |ry y # t        $ r t        ||||      d w xY w)
NTrawfallbackrv   r   ro      ('bad interpolation variable reference %rz+'%' must be followed by '%' or '(', found: )getr   r
   r}   r;   rz   matchr   optionxformgroupendKeyErrorr   rq   )r"   r`   rE   accumrestr1   mapdepthrN   pcmvarvs                 r$   rq   z$BasicInterpolation._interpolate_somez  s   GVE**)&'6BB		#A1uT"1uT"1X&ABxQq	ACxS!ABxcLL&&t,9267ADHJ J((4AEEGH~@CA !8**665!+2CD LLO.G#'*+ +? ,   @96;?@@s   <E E!N	r*   r+   r,   recompilerz   rc   rg   rq   r.   r%   r$   r   r   \  s*    I bjj)*G
'+r%   r   c                   D    e Zd Z	  ej                  d      Zd Zd Zd Zy)r   z\$\{([^}]+)\}c           	      V    g }| j                  ||||||d       dj                  |      S rn   rp   rr   s          r$   rc   z ExtendedInterpolation.before_get  rt   r%   c                     |j                  dd      }| j                  j                  d|      }d|v rt        d||j	                  d      fz        |S )Nz$$r)   $rw   rx   r~   s         r$   rg   z ExtendedInterpolation.before_set  r   r%   c                    |j                  ||d|      }|t        kD  rt        |||      |r|j                  d      }	|	dk  r|j	                  |       y |	dkD  r|j	                  |d |	        ||	d  }|dd }
|
dk(  r|j	                  d       |dd  }n:|
dk(  r$| j
                  j                  |      }|t        ||d|z        |j                  d      j                  d	      }||j                         d  }|}|}	 t        |      dk(  r|j                  |d         }||   }nLt        |      dk(  r.|d   }|j                  |d         }|j                  ||d
      }nt        ||d|      d|v r5| j%                  |||||t'        |j)                  |d
            |dz          n"|j	                  |       nt        ||d|      |ry y # t        t        t        f$ r t!        |||d	j#                  |            d w xY w)NTr   r   r   ro   r   {r   :)r   zMore than one ':' found: z+'$' must be followed by '$' or '{', found: )r   r   r
   r}   r;   rz   r   r   r   splitr   lenr   r   r   r   r   r?   rq   dictitems)r"   r`   rE   r   r   r1   r   r   rN   r   r   r   pathsectoptr   s                   r$   rq   z'ExtendedInterpolation._interpolate_some  s=   GVE**)&'6BB		#A1uT"1uT"1X&ABxQq	ACxS!ABxcLL&&t,9267ADHJ Jwwqz'',AEEGH~K4yA~$00a9HTa#Aw$00a9"JJtSdJ;6"G=ACE E !8**63q$+/Tt0L+M+0196 LLO.G#'*+ +Y D !.-@ K9$AFJKKs   A4G 3H
Nr   r.   r%   r$   r   r     s)    > bjj)*G
4+r%   r   c                   `     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                 \    t        |   |i | t        j                  dt        d       y )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.r   )
stacklevel)rT   r!   warningswarnDeprecationWarning)r"   r2   kwargsrV   s      r$   r!   zLegacyInterpolation.__init__  s.    $)&)G 1		
r%   c                 @   |}t         }|rS|dz  }|rHd|v rDt        j                  | j                  |      }| j                  j                  ||      }	 ||z  }nn|rS|rd|v rt        |||      |S # t        $ r!}	t        ||||	j                  d         d d }	~	ww xY w)Nro   z%()r`   r   )
r   	functoolspartial_interpolation_replacerz   r{   r   r   r2   r
   )
r"   r`   r1   rE   ra   varsrN   r   ry   es
             r$   rc   zLegacyInterpolation.before_get  s    'QJE#++D,G,G39;((%8F!DLE
   TU])&'6BB   F9<AEFFs   A3 3	B<BBc                     |S r   r.   rf   s        r$   rg   zLegacyInterpolation.before_set  rd   r%   c                 p    | j                  d      }|| j                         S d|j                  |      z  S )Nro   z%%(%s)s)r   r   )r   r`   ss      r$   r   z*LegacyInterpolation._interpolation_replace  s6    KKN9;;= v11!444r%   )r*   r+   r,   r   r   rz   r!   rc   rg   staticmethodr   rY   rZ   s   @r$   r   r     s?    @ bjj+,G
( 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j                  d      ej                        Z ej                  ej                  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d8dZd8dZd9d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'd8d#Z(d;d$Z)d% Z*d& Z+d' Z,d( Z-d) Z.d* Z/d+ Z0d, Z1d- Z2d. Z3d/ Z4d0 Z5d1 Z6d2 Z7d3 Z8d4d4d4d5d6Z9e:d7        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                   || _         | j                         | _        | j                         | _        t        |       | _        | j                         | _        t        | |	      | j
                  |	<   t        |      | _        |dk(  r |r| j                  n| j                  | _        ndj                  d |D              }|rDt        j                  | j                  j!                  |      t        j"                        | _        nCt        j                  | j$                  j!                  |      t        j"                        | _        t        |xs d      | _        t        |xs d      | _        || _        || _        || _        |	| _        |
| _        | j2                  t4        u r| j6                  | _        | j2                  t9               | _        t;        | j2                  t8              s!t=        dt?        | j2                               |t4        ur| j                  jA                  |       |r| jC                  |       y y )Nr   |c              3   F   K   | ]  }t        j                  |        y wr   )r   escape).0ds     r$   	<genexpr>z+RawConfigParser.__init__.<locals>.<genexpr>W  s     :!1:s   !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"   rb   	dict_typeallow_no_valuer   r   r   r   r   r   r   r   r   s                r$   r!   zRawConfigParser.__init__F  s    
+D1

)5dO)Lo& ,#-;4>>DL:z::A!zz$*;*;*B*B*B*K*,** 6  "zz$..*?*?a*?*H*,** 6!&'7'=2!>(-.E.K(L%-&;#,+&("&"="=D&"//D$--}=**.t/B/B*C)DF  V###J/) r%   c                     | j                   S r   )r   r'   s    r$   rb   zRawConfigParser.defaultss  s    ~~r%   c                 J    	 t        | j                  j                               S r   )listr   keysr'   s    r$   sectionszRawConfigParser.sectionsv  s    ADNN'')**r%   c                     	 || j                   k(  rt        d|z        || j                  v rt        |      | j	                         | j                  |<   t        | |      | j                  |<   y )NzInvalid section name: %r)r   r|   r   r   r   r   r   r3   s     r$   add_sectionzRawConfigParser.add_section{  sh    	
 d***7'ABBdnn$'00"&**,w!-dG!<gr%   c                      	 || j                   v S r   )r   r3   s     r$   has_sectionzRawConfigParser.has_section  s    	 $..((r%   c                     	 	 | j                   |   j                         }|j	                  | j
                         t        |j                               S # t        $ r t        |      d w xY wr   )r   copyr   r   r   r   r   r   )r"   r1   optss      r$   optionszRawConfigParser.options  sb    G	4>>'*//1D 	DNN#DIIK    	4 )t3	4s   A A*c                    	 t        |t        t        t        j                  f      r|g}t        j                  |      }g }|D ]k  }	 t        ||      5 }| j                  ||       d d d        t        |t        j                        rt        j                  |      }|j                  |       m |S # 1 sw Y   MxY w# t        $ r Y w xY w)N)encoding)r   strbytesosPathLikeiotext_encodingopen_readOSErrorfspathr;   )r"   	filenamesr  read_okr]   fps         r$   readzRawConfigParser.read  s    
	 i#ubkk!:;"I##H-! 	%H(X6 -"JJr8,- (BKK099X.NN8$	% - - s*   B?B3'B?3B<	8B??	C
Cc                 j    	 |	 |j                   }| j                  ||       y # t        $ r d}Y  w xY w)Nz<???>)nameAttributeErrorr	  )r"   fr@   s      r$   	read_filezRawConfigParser.read_file  sB    	 >! 	

1f " ! !s   $ 22c                 T    	 t        j                  |      }| j                  ||       y r   )r  StringIOr  )r"   stringr@   sfiles       r$   read_stringzRawConfigParser.read_string  s!    5F#uf%r%   c                    	 t               }|j                         D ]  \  }}t        |      }	 | j                  |       |j                  |       |j                         D ]q  \  }}| j                  t        |            }|t        |      }| j                  r||f|v rt        |||      |j                  ||f       | j                  |||       s  y # t        t
        f$ r | j                  r||v r Y w xY wr   )
setr   r  r   r   r|   r   addr   r   )r"   
dictionaryr@   elements_addedr1   r   keyra   s           r$   	read_dictzRawConfigParser.read_dict  s    	 '--/ 	.MGT'lG  ) w'"jjl .
U&&s3x0$JE<<WcNn$D.wVDD""GS>2#u-.	. *:6 <<G~$=s   C C:9C:r   r   r   c                    	 	 | j                  ||      }| j                  |      }	 ||   }|s||S | j                  j                  | ||||      S # t        $ r |t        u r |cY S w xY w# t        $ r |t        u rt        ||      |cY S w xY wr   )_unify_valuesr   r   r   r   r   r   rc   )r"   r1   rE   r   r   r   r   ra   s           r$   r   zRawConfigParser.get  s    		 ""7D1A !!&)	 fIE %-L&&11$235 5#  	 6!		   	 6!#FG44		 s"   A A+ A('A(+BBc                 6     | | j                   ||fi |      S r   )r   )r"   r1   convrE   r   s        r$   _getzRawConfigParser._get  s    HDHHWf7788r%   c                t    	  | j                   |||f||d|S # t        t        f$ r |t        u r |cY S w xY w)N)r   r   )r&  r   r   r   )r"   r1   rE   r%  r   r   r   r   s           r$   	_get_convzRawConfigParser._get_conv  sU    	499WdF '$ '%' '. 	6!O	s    77c                <     | j                   ||t        f|||d|S Nr!  )r(  intr"   r1   rE   r   r   r   r   s          r$   getintzRawConfigParser.getint  s/    t~~gvs ;$'/;39; 	;r%   c                <     | j                   ||t        f|||d|S r*  )r(  floatr,  s          r$   getfloatzRawConfigParser.getfloat  s/    t~~gvu ;#D'/;39; 	;r%   c                H     | j                   ||| j                  f|||d|S r*  )r(  _convert_to_booleanr,  s          r$   
getbooleanzRawConfigParser.getboolean$  s9    t~~gvt/G/G O"%D8OGMO 	Or%   c                    	 	 t         u rt        
 	         S  j                  j	                         		 	j                   j                            t        	j                               }|r,|j                         D ]  \  }}|	 j                  |      <    	 fd}|r	fd}|D cg c]  }| ||      f c}S # t        $ r  j                  k7  rt              Y w xY wc c}w )Nc                 H    j                   j                  | |          S r   )r   rc   )rE   r   r1   r"   s    r$   <lambda>z'RawConfigParser.items.<locals>.<lambda>A  s'    d&9&9&D&DTVQvY'+ r%   c                     |    S r   r.   )rE   r   s    r$   r6  z'RawConfigParser.items.<locals>.<lambda>D  s    !F) r%   )r   rT   r   r   r   r   r   r   r   r   r   r   r   )r"   r1   r   r   	orig_keysr  ra   value_getterrE   r   rV   s   ``       @r$   r   zRawConfigParser.items)  s    		 f7=?"NN!	.HHT^^G,- N	"jjl 1
U+0$""3'(1+3L=FG6f-.GG  	.$...$W-- /	. Hs   C .C+#C('C(c                 T    	 | j                         D ]  }| |   }| |= ||fc S  t        r   )r   r   r"   r  ra   s      r$   popitemzRawConfigParser.popitemG  s?    	 ==? 	CIES	:	 r%   c                 "    |j                         S r   )lower)r"   	optionstrs     r$   r   zRawConfigParser.optionxformT  s      r%   c                     	 |r|| j                   k(  r| j                  |      }|| j                  v S || j                  vry| j                  |      }|| j                  |   v xs || j                  v S )NF)r   r   r   r   )r"   r1   rE   s      r$   
has_optionzRawConfigParser.has_optionW  s    	N 'T%9%99%%f-FT^^++DNN*%%f-FdnnW55 0/1r%   c                     	 |r| j                   j                  | |||      }|r|| j                  k(  r| j                  }n	 | j                  |   }||| j                  |      <   y # t
        $ r t        |      d w xY wr   )r   rg   r   r   r   r   r   r   )r"   r1   rE   ra   sectdicts        r$   r  zRawConfigParser.sete  s    ''224&38:E'T%9%99~~H8>>'2 .3!!&)*  8$W-478s   A% %A;c                 j   	 |rdj                  | j                  d         }n| j                  d   }| j                  r6| j                  || j                  | j                  j                         |       | j                  D ]1  }| j                  ||| j                  |   j                         |       3 y )Nz {} r   )r<   r   r   _write_sectionr   r   r   )r"   r  space_around_delimitersr   r1   s        r$   writezRawConfigParser.writes  s    	 #d..q12A  #A>>D$8$8$(NN$8$8$:A?~~ 	DGG $w 7 = = ?D	Dr%   c                 X   	 |j                  dj                  |             |D ]s  \  }}| j                  j                  | |||      }|| j                  s|t        |      j                  dd      z   }nd}|j                  dj                  ||             u |j                  d       y )Nz[{}]

z
	r)   z{}{}
)rG  r<   r   rk   r   r  ry   )r"   r  section_namesection_items	delimiterr  ra   s          r$   rE  zRawConfigParser._write_section  s    ;
./' 	2JC''44T<5:<E (<(<!CJ$6$6tV$DDHHX__S%01	2 	r%   c                     	 |r|| j                   k(  r| j                  }n	 | j                  |   }| j                  |      }||v }|r||= |S # t        $ r t	        |      d w xY wr   )r   r   r   r   r   r   )r"   r1   rE   rC  existeds        r$   remove_optionzRawConfigParser.remove_option  s{    'T%9%99~~H8>>'2 !!&)H$   8$W-478s   A A"c                 \    	 || j                   v }|r| j                   |= | j                  |= |S r   )r   r   )r"   r1   rN  s      r$   remove_sectionzRawConfigParser.remove_section  s3    $T^^+w'g&r%   c                 v    || j                   k7  r| j                  |      st        |      | j                  |   S r   )r   r   r   r   r"   r  s     r$   __getitem__zRawConfigParser.__getitem__  s6    $&&&t/?/?/D3-}}S!!r%   c                     || v r| |   |u ry || j                   k(  r| j                  j                          n+|| j                  v r| j                  |   j                          | j	                  ||i       y r   )r   r   clearr   r   r;  s      r$   __setitem__zRawConfigParser.__setitem__  sj     $;49- $&&&NN  "DNN"NN3%%'U|$r%   c                     || j                   k(  rt        d      | j                  |      st        |      | j	                  |       y )Nz"Cannot remove the default section.)r   r|   r   r   rQ  rS  s     r$   __delitem__zRawConfigParser.__delitem__  sB    $&&&ABB$3-C r%   c                 F    || j                   k(  xs | j                  |      S r   )r   r   rS  s     r$   __contains__zRawConfigParser.__contains__  s#    d***Cd.>.>s.CCr%   c                 2    t        | j                        dz   S )Nro   )r   r   r'   s    r$   __len__zRawConfigParser.__len__  s    4>>"Q&&r%   c                 t    t        j                  | j                  f| j                  j	                               S r   )	itertoolschainr   r   r   r'   s    r$   __iter__zRawConfigParser.__iter__  s)     4 468K8K8MNNr%   c                 n   	 t               }d }d }d }d}d}d }	t        |d      D ]t  \  }}
t        j                  }| j                  D ci c]  }|d }}|t        j                  k(  r|ri }|j                         D ]S  \  }}|
j                  ||dz         }|dk(  r!|||<   |dk(  s|dkD  s1|
|dz
     j                         sHt        ||      }U |}|t        j                  k(  r|r| j                  D ]%  }|
j                         j                  |      s#d} n |t        j                  k(  rd }|
d | j                         }|s>| j                  r |.|,|r*||   %||   j                  d       nt        j                  }b| j                  j                  |
      }|r|j!                         nd}||r||kD  r||   j                  |       |}| j"                  j%                  |      }|r|j'                  d      }|| j(                  v r>| j*                  r||v rt-        |||      | j(                  |   }|j/                  |       ne|| j0                  k(  r| j2                  }nI| j5                         }|| j(                  |<   t7        | |      | j8                  |<   |j/                  |       d }|t;        |||
      | j<                  j%                  |      }|r|j'                  ddd	      \  }}}|s| j?                  |	|||
      }	| jA                  |jC                               }| j*                  r||f|v rtE        ||||      |j/                  ||f       ||j                         }|g||<   Zd ||<   a| j?                  |	|||
      }	w | jG                          |	r|	y c c}w )
Nr   ro   )startr)   headerrE   vira   )$r  	enumeratesysmaxsizer   r   r}   isspaceminr   strip
startswithr   r;   NONSPACECREsearchrc  SECTCREr   r   r   r   r   r  r   r   r   r   r   r   r   _handle_errorr   rstripr   _join_multiline_values)r"   r  fpnamer  cursectsectnameoptnamerA   indent_levelr   rX   comment_startr   inline_prefixesnext_prefixesprefixindexra   first_nonspacecur_indent_levelmorf  optvals                          r$   r	  zRawConfigParser._read  s   	  %b2 \	HLFDKKM.2.K.KLq"uLOL3;;.? "%4%:%:%< BMFE IIfeAg6E{ ,1M&)zeaiDqM4I4I4K(+M5(AB #0  3;;.? 00 ::<**62$%M + $-(..0E.. &-+(4(//3 $';;L!--44T:N9G~335Q# </ ''.  0\\''.!xx1H4>>1<<H,F"7&8>#@ @"&..":&**84!T%9%99"&.."&**,3:x02>tX2Nh/&**84"G_3FFDII ++E2B.0hhxw.O+V& $ 2 21ffd KA"&"2"27>>3C"D LL%w/>A"6x7=v#G G&**Hg+>? "-%+\\^F06xGG, 04GG, !..q&&$Gy\	Hz 	##%G y Ms   

N2c                 v   | j                   | j                  f}t        j                  |f| j                  j                               }|D ]m  \  }}|j                         D ]U  \  }}t        |t              rdj                  |      j                         }| j                  j                  | |||      ||<   W o y )NrI  )r   r   r_  r`  r   r   r   r   r?   rr  r   ri   )r"   rb   all_sectionsr1   r   r  vals          r$   rs  z&RawConfigParser._join_multiline_valuesH  s    ''7 {'+~~';';'=? , 	KGW$]]_ K	cc4())C.//1C $ 3 3 ? ?@G@Dc!KK	Kr%   c                 r    	 |j                         D ]#  \  }}|| j                  | j                  |      <   % y r   )r   r   r   )r"   rb   r  ra   s       r$   r   zRawConfigParser._read_defaultsT  s:    	+"..* 	:JC49DNN4++C01	:r%   c                 V    |st        |      }|j                  |t        |             |S r   )r   r;   r:   )r"   excrt  rA   rX   s        r$   rq  zRawConfigParser._handle_errorZ  s&    v&C

64:&
r%   c                 $   	 i }	 | j                   |   }i }|r9|j	                         D ]&  \  }}|t        |      }||| j                  |      <   ( t        ||| j                        S # t        $ r || j                  k7  rt        |      d Y zw xY wr   )	r   r   r   r   r   r  r   	_ChainMapr   )r"   r1   r   sectiondictvardictr  ra   s          r$   r#  zRawConfigParser._unify_values`  s    	 	8..1K
 "jjl 7
U$JE16((-.7 +t~~>>  	8$...$W-47 /	8s   A( ($BBc                     	 |j                         | j                  vrt        d|z        | j                  |j                            S )NzNot a boolean: %s)r>  BOOLEAN_STATESr|   )r"   ra   s     r$   r2  z#RawConfigParser._convert_to_booleant  sC    	;;= 3 3305899""5;;=11r%   r)   )r1   rE   ra   c                    	 t        |t              st        d      t        |t              st        d      | j                  r|rt        |t              st        d      y y )Nzsection names must be stringszoption keys must be stringszoption values must be strings)r   r  r   r   )r"   r1   rE   ra   s       r$   _validate_value_typesz%RawConfigParser._validate_value_types{  s`    	 '3';<<&#&9::##ueS) ?@@ * (-r%   c                     | j                   S r   )r   r'   s    r$   r   zRawConfigParser.converters  s    r%   r   )z<string>)z<dict>)T)=r*   r+   r,   
_SECT_TMPLr   r   r   r   r   r   r   rp  r<   r   r   rn  r  _default_dictr   r   r!   rb   r   r   r   r   r  r  r  r   r   r&  r(  r-  r0  r3  r   r<  r   rA  r  rG  rE  rO  rQ  rT  rW  rY  r[  r]  ra  r	  rs  r   rq  r#  r2  r  propertyr   rY   rZ   s   @r$   r   r     s   6J
IL +_bjjRZZ0GRZZ	((u(5rzzBF 

<..U.;RZZHI"**U#Kd$ eMN !% %+*5?",dD!,%&+*Z+
=)!6&
.> +0dV #5J9 7<$! .3;
 054 ;
 27T"O
 #D H<!13D("
%!D'Oxt
K:?(2 02"B A*    r%   r   c                   @     e Zd Z	  e       Zd fd	Z fdZd Z xZS )r   c                 P    	 | j                  ||       t        | 	  |||       y N)rE   ra   )r  rT   r  )r"   r1   rE   ra   rV   s       r$   r  zConfigParser.set  s+    	.""&">GVU+r%   c                 J    	 | j                  |       t        | 	  |       y )N)r1   )r  rT   r   )r"   r1   rV   s     r$   r   zConfigParser.add_section  s(    	 	""7"3G$r%   c                     	 	 | j                   }t               | _         | j                  | j                  |i       || _         y # | _         w xY wr   )r   r   r   r   )r"   rb   hold_interpolations      r$   r   zConfigParser._read_defaults  sK    	
	5!%!4!4"//DNND00(;<"4D"4Ds   8A 	Ar   )	r*   r+   r,   r   r   r  r   r   rY   rZ   s   @r$   r   r     s    2/1,%5r%   r   c                   v    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y)r   c                     	 || _         || _        |j                  D ]?  }d|z   }t        j                  | j
                  t        ||            }t        | ||       A y )Nr   _impl)_parser_namer   r   r   r   getattrsetattr)r"   r`   r  r%  r  getters         r$   r!   zSectionProxy.__init__  sZ    N
%% 	'D$,C&&txxwvs7KLFD#v&	'r%   c                 8    dj                  | j                        S )Nz<Section: {}>)r<   r  r'   s    r$   r(   zSectionProxy.__repr__  s    %%djj11r%   c                     | j                   j                  | j                  |      st        |      | j                   j	                  | j                  |      S r   )r  rA  r  r   r   rS  s     r$   rT  zSectionProxy.__getitem__  s?    ||&&tzz373-||

C00r%   c                     | j                   j                  ||       | j                   j                  | j                  ||      S r  )r  r  r  r  r;  s      r$   rW  zSectionProxy.__setitem__  s6    **#U*C||

C77r%   c                     | j                   j                  | j                  |      r&| j                   j                  | j                  |      st	        |      y r   )r  rA  r  rO  r   rS  s     r$   rY  zSectionProxy.__delitem__  sA    ''

C8**4::s;3- <r%   c                 N    | j                   j                  | j                  |      S r   )r  rA  r  rS  s     r$   r[  zSectionProxy.__contains__  s    ||&&tzz377r%   c                 4    t        | j                               S r   )r   _optionsr'   s    r$   r]  zSectionProxy.__len__  s    4==?##r%   c                 >    | j                         j                         S r   )r  ra  r'   s    r$   ra  zSectionProxy.__iter__  s    }}''))r%   c                     | j                   | j                  j                  k7  r%| j                  j                  | j                         S | j                  j	                         S r   )r  r  r   r   rb   r'   s    r$   r  zSectionProxy._options  sD    ::555<<''

33<<((**r%   c                     | j                   S r   )r  r'   s    r$   r`   zSectionProxy.parser  s     ||r%   c                     | j                   S r   )r  r'   s    r$   r  zSectionProxy.name  s     zzr%   NF)r   r   r  c                d    	 |s| j                   j                  } || j                  |f|||d|S r*  )r  r   r  )r"   rE   r   r   r   r  r   s          r$   r   zSectionProxy.get  sD    	 LL$$ETZZ 2St&2*02 	2r%   r   )r*   r+   r,   r!   r(   rT  rW  rY  r[  r]  ra  r  r  r`   r  r   r.   r%   r$   r   r     sk    5'21
8 
8$*+    2D2r%   r   c                   V    e Zd Z	  ej                  d      Zd Zd Zd Zd Z	d Z
d Zy)	r   z^get(?P<name>.+)$c                 
   || _         i | _        t        | j                         D ]]  }| j                  j	                  |      }|rt        t        | j                   |            s@d | j                  |j                  d      <   _ y )Nr  )r  _datadir	GETTERCREr   callabler  r   )r"   r`   r  r   s       r$   r!   zConverterMapping.__init__  sj    
$,,' 	/F$$V,AHWT\\6%BC*.DJJqwwv'		/r%   c                      | j                   |   S r   )r  rS  s     r$   rT  zConverterMapping.__getitem__  s    zz#r%   c           	         	 d|z   }|dk(  rt        d      || j                  |<   t        j                  | j                  j                  |      }||_	        t        | j                  ||       | j                  j                         D ]0  }t        j                  |j                  |      }t        |||       2 y # t         $ r% t        dj                  |t        |                  w xY w)Nr   zIncompatible key: {} (type: {})z)Incompatible key: cannot use "" as a name)r%  r  )r   r|   r<   r   r  r   r   r  r(  	converterr  valuesr   )r"   r  ra   kfuncproxyr  s          r$   rW  zConverterMapping.__setitem__  s    	8A :HII

3  !7!7eDa&\\((* 	&E&&uyy=FE1f%	&  	8   &sDI 68 8	8s   B= =.C+c                    	 d|xs d z   }| j                  |= t        j                  | j
                  f| j
                  j                               D ]  }	 t        ||        y # t         $ r t        |      w xY w# t        $ r Y 6w xY w)Nr   )	r   r   r  r_  r`  r  r  delattrr  )r"   r  r  insts       r$   rY  zConverterMapping.__delitem__!  s    	 %A JJsOOOT\\OT\\5H5H5JK 	Da 	  	 3-	  "  s   	A$ A<$A9<	BBc                 ,    t        | j                        S r   )iterr  r'   s    r$   ra  zConverterMapping.__iter__/  s    DJJr%   c                 ,    t        | j                        S r   )r   r  r'   s    r$   r]  zConverterMapping.__len__2  s    4::r%   N)r*   r+   r,   r   r   r  r!   rT  rW  rY  ra  r]  r.   r%   r$   r   r     s8     

/0I/&  r%   r   )'collections.abcr   collectionsr   r  r   r  r_  r  r   rh  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$   <module>r     s>  KZ + -  	  	 	 
 5  

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