o
    IAfS                     @   s  	 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 deZG d	d
 d
eZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZe ZG dd dZG dd  d eZ G d!d" d"eZ!G d#d$ d$eZ"G d%d& d&eZ#G d'd( d(e#Z$G d)d* d*e$Z%G d+d, d,eZ&G d-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_DEPTHZDEFAULT
   c                   @   s$   e Zd Z	 dddZdd ZeZdS )Error c                 C   s   || _ t| | d S N)message	Exception__init__)selfmsg r"   #/usr/lib/python3.10/configparser.pyr      s   zError.__init__c                 C      | j S r   )r   r    r"   r"   r#   __repr__      zError.__repr__N)r   )__name__
__module____qualname__r   r&   __str__r"   r"   r"   r#   r      s
    
r   c                   @      e Zd Z	 dd ZdS )r   c                 C   s$   t | d|f  || _|f| _d S )NzNo section: %r)r   r   sectionargsr    r-   r"   r"   r#   r      s   zNoSectionError.__init__Nr(   r)   r*   r   r"   r"   r"   r#   r          r   c                   @      e Zd Z	 dddZdS )r   Nc                 C   s   t |dg}|d ur)dt |g}|d ur|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   joinr-   sourcelinenor.   )r    r-   r<   r=   r!   r   r"   r"   r#   r      s   

zDuplicateSectionError.__init__NNr0   r"   r"   r"   r#   r      s    r   c                   @   r2   )r   Nc                 C   s   t |dt |dg}|d ur-dt |g}|d ur |d| |d || |}n|dd t| d| || _|| _	|| _
|| _||||f| _d S )	Nz in section r3   r4   r5   z	: option r   zOption r   )r6   r7   r8   r9   r:   r   r   r;   r-   optionr<   r=   r.   )r    r-   r?   r<   r=   r!   r   r"   r"   r#   r      s"   

zDuplicateOptionError.__init__r>   r0   r"   r"   r"   r#   r      s    r   c                   @   r,   )r   c                 C   s.   t | d||f  || _|| _||f| _d S )NzNo option %r in section: %rr   r   r?   r-   r.   )r    r?   r-   r"   r"   r#   r      s   zNoOptionError.__init__Nr0   r"   r"   r"   r#   r      r1   r   c                   @   r,   )r   c                 C   s(   t | | || _|| _|||f| _d S r   r@   )r    r?   r-   r!   r"   r"   r#   r     s   zInterpolationError.__init__Nr0   r"   r"   r"   r#   r      r1   r   c                   @   r,   )r
   c                 C   s8   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})r8   r   r   	referencer.   )r    r?   r-   rawvalrA   r!   r"   r"   r#   r     s   z(InterpolationMissingOptionError.__init__Nr0   r"   r"   r"   r#   r
     r1   r
   c                   @   s   e Zd ZdS )r   N)r(   r)   r*   r"   r"   r"   r#   r     s    r   c                   @   r,   )r	   c                 C   s0   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})r8   r   r   r   r.   )r    r?   r-   rB   r!   r"   r"   r#   r     s   z InterpolationDepthError.__init__Nr0   r"   r"   r"   r#   r	     r1   r	   c                   @   s:   e Zd Z	 d	ddZedd Zejdd Zdd ZdS )
r   Nc                 C   sP   |r|rt d|s|st d|r|}t| d|  || _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   r<   errorsr.   )r    r<   filenamer"   r"   r#   r   ,  s   zParsingError.__init__c                 C   s   	 t jdtdd | jS NzNThe 'filename' attribute will be removed in Python 3.12. Use 'source' instead.   
stacklevelwarningswarnDeprecationWarningr<   r%   r"   r"   r#   rE   ;  s   zParsingError.filenamec                 C   s   	 t jdtdd || _d S rF   rJ   r    valuer"   r"   r#   rE   E  s   
c                 C   s*   | j ||f |  jd||f 7  _d S )Nz
	[line %2d]: %s)rD   r7   r   )r    r=   liner"   r"   r#   r7   O  s   zParsingError.appendr>   )r(   r)   r*   r   propertyrE   setterr7   r"   r"   r"   r#   r   )  s    

	
	r   c                   @   r,   )r   c                 C   s8   t | d|||f  || _|| _|| _|||f| _d S )Nz7File contains no section headers.
file: %r, line: %d
%r)r   r   r<   r=   rP   r.   )r    rE   r=   rP   r"   r"   r#   r   W  s   z"MissingSectionHeaderError.__init__Nr0   r"   r"   r"   r#   r   T  r1   r   c                   @   s.   e Zd Z	 dd Zdd Zdd Zdd Zd	S )
r   c                 C      |S r   r"   )r    parserr-   r?   rO   defaultsr"   r"   r#   
before_getk     zInterpolation.before_getc                 C   rS   r   r"   r    rT   r-   r?   rO   r"   r"   r#   
before_setn  rW   zInterpolation.before_setc                 C   rS   r   r"   rX   r"   r"   r#   before_readq  rW   zInterpolation.before_readc                 C   rS   r   r"   rX   r"   r"   r#   before_writet  rW   zInterpolation.before_writeN)r(   r)   r*   rV   rY   rZ   r[   r"   r"   r"   r#   r   h  s    r   c                   @   0   e Zd Z	 edZdd Zdd Zdd ZdS )	r   z%\(([^)]+)\)sc              	   C   $   g }|  ||||||d d|S N   r   _interpolate_somer;   r    rT   r-   r?   rO   rU   Lr"   r"   r#   rV        
zBasicInterpolation.before_getc                 C   <   | dd}| jd|}d|v rtd||df |S )Nz%%r   %1invalid interpolation syntax in %r at position %dreplace_KEYCREsubrC   findr    rT   r-   r?   rO   Z	tmp_valuer"   r"   r#   rY        zBasicInterpolation.before_setc              
   C   sb  |j ||d|d}|tkrt||||r|d}	|	dk r%|| d S |	dkr8||d |	  ||	d  }|dd }
|
dkrN|d |dd  }n]|
dkr| j|}|d u rdt||d| ||	d}||
 d  }z|| }W n ty   t||||d w d|v r| |||||||d  n|| n	t||d	|f |sd S d S )
NTrawfallbackrf   r   r_   rG   ('bad interpolation variable reference %rz/'%%' must be followed by '%%' or '(', found: %r)getr   r	   rl   r7   rj   matchr   optionxformgroupendKeyErrorr
   ra   )r    rT   r?   accumrestr-   mapdepthrB   pcmvarvr"   r"   r#   ra     sX   



z$BasicInterpolation._interpolate_someN	r(   r)   r*   recompilerj   rV   rY   ra   r"   r"   r"   r#   r   x  s    
r   c                   @   r\   )	r   z\$\{([^}]+)\}c              	   C   r]   r^   r`   rb   r"   r"   r#   rV     rd   z ExtendedInterpolation.before_getc                 C   re   )Nz$$r   $rg   rh   rm   r"   r"   r#   rY     rn   z ExtendedInterpolation.before_setc                 C   s  |j ||d|d}|tkrt||||r|d}	|	dk r%|| d S |	dkr8||d |	  ||	d  }|dd }
|
dkrN|d |dd  }n|
dkr| j|}|d u rdt||d| |d	d	}||
 d  }|}|}z7t|dkr||d }|| }n#t|dkr|d }||d }|j ||dd
}n	t||d|f W n tttfy   t|||d	|d w d|v r| |||||t|j|dd
|d  n|| n	t||d|f |sd S d S )NTro   r   r   r_   rG   {rs   :)rp   zMore than one ':' found: %rz-'$' must be followed by '$' or '{', found: %r)rt   r   r	   rl   r7   rj   ru   r   rw   splitrx   lenrv   ry   r   r   r
   r;   ra   dictitems)r    rT   r?   rz   r{   r-   r|   r}   rB   r~   r   r   pathZsectoptr   r"   r"   r#   ra     st   



z'ExtendedInterpolation._interpolate_someNr   r"   r"   r"   r#   r     s    
r   c                   @   s4   e Zd Z	 edZdd Zdd Zedd Z	dS )	r   z%\(([^)]*)\)s|.c           
   
   C   s   |}t }|r@|d8 }|r=d|v r=tj| j|d}| j||}z|| }W n ty< }	 zt||||	jd d d }	~	ww n|s|rLd|v rLt	||||S )Nr_   z%()rT   r   )
r   	functoolspartial_interpolation_replacerj   rk   ry   r
   r.   r	   )
r    rT   r-   r?   rO   varsrB   r}   ri   er"   r"   r#   rV     s0   zLegacyInterpolation.before_getc                 C   rS   r   r"   rX   r"   r"   r#   rY   $  rW   zLegacyInterpolation.before_setc                 C   s(   |  d}|d u r|   S d|| S )Nr_   z%%(%s)s)rw   rv   )ru   rT   sr"   r"   r#   r   '  s   
z*LegacyInterpolation._interpolation_replaceN)
r(   r)   r*   r   r   rj   rV   rY   staticmethodr   r"   r"   r"   r#   r   
  s    
r   c                
       s4  e Zd Z	 dZdZdZe Ze	eej
Ze	ejddej
Ze	ejddej
Ze	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dZdd Zdd Zdd Zdd Zdd ZdcddZdcddZdddd Zded"d#Zdcd$d%Zdd
ed&d'd(Zd)d* Z dd
ed&d+d,Z!dd
ed&d-d.Z"dd
ed&d/d0Z#dd
ed&d1d2Z$edd
f fd3d4	Z%d5d6 Z&d7d8 Z'd9d: Z(dcd;d<Z)dfd=d>Z*d?d@ Z+dAdB Z,dCdD Z-dEdF Z.dGdH Z/dIdJ Z0dKdL Z1dMdN Z2dOdP Z3dQdR Z4dSdT Z5dUdV Z6dWdX Z7dYdZ Z8d[d\ Z9d]d]d]d^d_d`Z:e;dadb Z<  Z=S )gr   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)1ZyestrueZon0noZfalseZoffN=r   )#;)
delimiterscomment_prefixesinline_comment_prefixesstrictempty_lines_in_valuesdefault_sectioninterpolation
convertersc                C   s:  || _ |   | _|   | _t| | _|   | _t| |	| j|	< t|| _|dkr2|r-| j	n| j
| _n'ddd |D }|rLt| jj|dtj| _nt| jj|dtj| _t|p]d| _t|pdd| _|| _|| _|| _|	| _|
| _| jtu r| j| _| jd u rt | _|tur| j| |r| | d S d S )Nr   |c                 s   s    | ]}t |V  qd S r   )r   escape).0dr"   r"   r#   	<genexpr>j  s    z+RawConfigParser.__init__.<locals>.<genexpr>r   r"   )_dict	_sections	_defaultsr   _converters_proxiesr   tuple_delimiters	OPTCRE_NVOPTCRE_optcrer;   r   r   _OPT_NV_TMPLr8   VERBOSE	_OPT_TMPL_comment_prefixes_inline_comment_prefixes_strict_allow_no_value_empty_lines_in_valuesr   _interpolation_UNSET_DEFAULT_INTERPOLATIONr   update_read_defaults)r    rU   Z	dict_typeZallow_no_valuer   r   r   r   r   r   r   r   r   r"   r"   r#   r   Y  sB   






zRawConfigParser.__init__c                 C   r$   r   )r   r%   r"   r"   r#   rU     r'   zRawConfigParser.defaultsc                 C   s   	 t | j S r   )listr   keysr%   r"   r"   r#   sections  s   zRawConfigParser.sectionsc                 C   sL   	 || j krtd| || jv rt||  | j|< t| || j|< d S )NzInvalid section name: %r)r   rC   r   r   r   r   r   r/   r"   r"   r#   add_section  s   

zRawConfigParser.add_sectionc                 C   s   	 || j v S r   )r   r/   r"   r"   r#   has_section  s   
zRawConfigParser.has_sectionc                 C   sF   	 z	| j |  }W n ty   t|d w || j t| S r   )r   copyry   r   r   r   r   r   )r    r-   Zoptsr"   r"   r#   options  s   
zRawConfigParser.optionsc              	   C   s   	 t |tttjfr|g}t|}g }|D ]:}zt||d}| || W d    n1 s0w   Y  W n	 t	y?   Y qw t |tjrKt
|}|| q|S )N)encoding)
isinstancestrbytesosPathLikeiotext_encodingopen_readOSErrorfspathr7   )r    	filenamesr   Zread_okrE   fpr"   r"   r#   read  s$   

zRawConfigParser.readc                 C   s<   	 |d u rz|j }W n ty   d}Y nw | || d S )Nz<???>)nameAttributeErrorr   )r    fr<   r"   r"   r#   	read_file  s   
zRawConfigParser.read_file<string>c                 C   s   	 t |}| || d S r   )r   StringIOr   )r    stringr<   Zsfiler"   r"   r#   read_string  s   
zRawConfigParser.read_string<dict>c              
   C   s   	 t  }| D ]]\}}t|}z| | W n ttfy*   | jr(||v r( Y nw || | D ]0\}}| t|}|d urGt|}| jrV||f|v rVt	||||||f |  ||| q4qd S r   )
setr   r   r   r   rC   r   addrv   r   )r    Z
dictionaryr<   elements_addedr-   r   keyrO   r"   r"   r#   	read_dict  s,   
zRawConfigParser.read_dictc                 C   s$   	 t jdtdd | j||d d S )NzMThis method will be removed in Python 3.12. Use 'parser.read_file()' instead.rG   rH   )r<   )rK   rL   rM   r   )r    r   rE   r"   r"   r#   readfp  s   zRawConfigParser.readfprp   r   rq   c                C   s   	 z|  ||}W n ty   |tu r | Y S w | |}z|| }W n ty9   |tu r5t||| Y S w |s@|d u rB|S | j| ||||S r   )_unify_valuesr   r   rv   ry   r   r   rV   )r    r-   r?   rp   r   rq   r   rO   r"   r"   r#   rt     s*   

zRawConfigParser.getc                 K   s   || j ||fi |S r   )rt   )r    r-   convr?   kwargsr"   r"   r#   _get#  s   zRawConfigParser._getc             	   K   sD   z| j |||f||d|W S  ttfy!   |tu r | Y S w )N)rp   r   )r   r   r   r   )r    r-   r?   r   rp   r   rq   r   r"   r"   r#   	_get_conv&  s   zRawConfigParser._get_convc                K      | j ||tf|||d|S Nr   )r   intr    r-   r?   rp   r   rq   r   r"   r"   r#   getint1  
   zRawConfigParser.getintc                K   r   r   )r   floatr   r"   r"   r#   getfloat6  r   zRawConfigParser.getfloatc                K   s    | j ||| jf|||d|S r   )r   _convert_to_booleanr   r"   r"   r#   
getboolean;  s
   zRawConfigParser.getbooleanc                    s   	 t u r
t  S j  z
 j  W n ty+   jkr)t	Y nw t
  }|rD| D ]\}}| |< q8 fdd|rT fddfdd|D S )Nc                    s   j |  |   S r   )r   rV   r?   )r   r-   r    r"   r#   <lambda>X  s    z'RawConfigParser.items.<locals>.<lambda>c                    s    |  S r   r"   r   )r   r"   r#   r   [  s    c                    s   g | ]}| |fqS r"   r"   )r   r?   )value_getterr"   r#   
<listcomp>\  s    z)RawConfigParser.items.<locals>.<listcomp>)r   superr   r   r   r   r   ry   r   r   r   r   rv   )r    r-   rp   r   Z	orig_keysr   rO   	__class__)r   r-   r    r   r#   r   @  s&   



zRawConfigParser.itemsc                 C   s,   	 |   D ]}| | }| |= ||f  S tr   )r   ry   r    r   rO   r"   r"   r#   popitem^  s   zRawConfigParser.popitemc                 C   s   |  S r   )lower)r    Z	optionstrr"   r"   r#   rv   k  s   zRawConfigParser.optionxformc                 C   sT   	 |r|| j kr| |}|| jv S || jvrdS | |}|| j| v p)|| jv S )NF)r   rv   r   r   )r    r-   r?   r"   r"   r#   
has_optionn  s   



zRawConfigParser.has_optionc                 C   sh   	 |r| j | |||}|r|| jkr| j}nz| j| }W n ty*   t|d w ||| |< d S r   )r   rY   r   r   r   ry   r   rv   )r    r-   r?   rO   sectdictr"   r"   r#   r   |  s   
zRawConfigParser.setc                 C   sj   	 |rd | jd }n| jd }| jr | || j| j | | jD ]}| ||| j|  | q#d S )Nz {} r   )r8   r   r   _write_sectionr   r   r   )r    r   Zspace_around_delimitersr   r-   r"   r"   r#   write  s   



zRawConfigParser.writec                 C   sz   	 | d| |D ]*\}}| j| |||}|d us| js*|t|dd }nd}| d|| q| d d S )Nz[{}]

z
	r   z{}{}
)r  r8   r   r[   r   r   ri   )r    r   Zsection_nameZsection_items	delimiterr   rO   r"   r"   r#   r    s   zRawConfigParser._write_sectionc                 C   s`   	 |r|| j kr| j}nz| j| }W n ty   t|d w | |}||v }|r.||= |S r   )r   r   r   ry   r   rv   )r    r-   r?   r  existedr"   r"   r#   remove_option  s   

zRawConfigParser.remove_optionc                 C   s$   	 || j v }|r| j |= | j|= |S r   )r   r   )r    r-   r	  r"   r"   r#   remove_section  s   
zRawConfigParser.remove_sectionc                 C   s&   || j kr| |st|| j| S r   )r   r   ry   r   r    r   r"   r"   r#   __getitem__  s   
zRawConfigParser.__getitem__c                 C   sX   || v r| | |u rd S || j kr| j  n|| jv r#| j|   | ||i d S r   )r   r   clearr   r   r   r"   r"   r#   __setitem__  s   

zRawConfigParser.__setitem__c                 C   s2   || j kr	td| |st|| | d S )Nz"Cannot remove the default section.)r   rC   r   ry   r  r  r"   r"   r#   __delitem__  s
   

zRawConfigParser.__delitem__c                 C   s   || j kp	| |S r   )r   r   r  r"   r"   r#   __contains__  s   zRawConfigParser.__contains__c                 C   s   t | jd S )Nr_   )r   r   r%   r"   r"   r#   __len__  s   zRawConfigParser.__len__c                 C   s   t | jf| j S r   )	itertoolschainr   r   r   r%   r"   r"   r#   __iter__  s   zRawConfigParser.__iter__c                 C   s  	 t  }d }d }d }d}d}d }	t|ddD ]e\}}
tj}dd | jD }|tjkrg|rgi }| D ]*\}}|
||d }|dkrDq3|||< |dksX|dkr]|
|d   r]t||}q3|}|tjkrg|s-| j	D ]}|

 |rwd} nqj|tjkrd }|
d | 
 }|s| jr|d u r|d ur|r|| d ur|| d ntj}q| j|
}|r| nd}|d ur|r||kr|| | q|}| j|}|r|d}|| jv r| jr||v rt|||| j| }|| n|| jkr| j}n|  }|| j|< t| || j|< || d }q|d u r"t|||
| j|}|rt|d	d
d\}}}|s@| |	|||
}	|  |! }| jrY||f|v rYt"|||||||f |d uro|
 }|g||< qd ||< q| |	|||
}	q| #  |	r|	d S )Nr   r_   )startc                 S   s   i | ]}|d qS )r"   )r   r~   r"   r"   r#   
<dictcomp>   s    z)RawConfigParser._read.<locals>.<dictcomp>r  r   headerr?   virO   )$r   	enumeratesysmaxsizer   r   rl   isspaceminr   strip
startswithr   r7   NONSPACECREsearchr  SECTCREru   rw   r   r   r   r   r   r   r   r   r   r   r   _handle_errorrv   rstripr   _join_multiline_values)r    r   fpnamer   ZcursectZsectnameZoptnamer=   Zindent_levelr   rP   Zcomment_startZinline_prefixesZnext_prefixesprefixindexrO   Zfirst_nonspaceZcur_indent_levelmor  Zoptvalr"   r"   r#   r     s    











zRawConfigParser._readc                 C   sr   | j | jf}t|f| j }|D ]$\}}| D ]\}}t|tr*d|	 }| j
| |||||< qqd S )Nr  )r   r   r  r  r   r   r   r   r;   r&  r   rZ   )r    rU   Zall_sectionsr-   r   r   valr"   r"   r#   r'  _  s   

z&RawConfigParser._join_multiline_valuesc                 C   s(   	 |  D ]\}}|| j| |< qd S r   )r   r   rv   )r    rU   r   rO   r"   r"   r#   r   k  s   zRawConfigParser._read_defaultsc                 C   s    |st |}||t| |S r   )r   r7   r6   )r    excr(  r=   rP   r"   r"   r#   r%  q  s   zRawConfigParser._handle_errorc                 C   s   	 i }z| j | }W n ty   || jkrt|d Y nw i }|r:| D ]\}}|d ur2t|}||| |< q&t||| jS r   )	r   ry   r   r   r   r   rv   	_ChainMapr   )r    r-   r   ZsectiondictZvardictr   rO   r"   r"   r#   r   w  s    

zRawConfigParser._unify_valuesc                 C   s*   	 |  | jvrtd| | j|   S )NzNot a boolean: %s)r  BOOLEAN_STATESrC   rN   r"   r"   r#   r     s   z#RawConfigParser._convert_to_booleanr   )r-   r?   rO   c                C   sJ   	 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   	TypeErrorr   r    r-   r?   rO   r"   r"   r#   _validate_value_types  s   



z%RawConfigParser._validate_value_typesc                 C   r$   r   )r   r%   r"   r"   r#   r     s   zRawConfigParser.convertersr   )r   )r   )T)>r(   r)   r*   Z
_SECT_TMPLr   r   r   r   r   r   r   r$  r8   r   r   r"  r/  _default_dictr   r   r   rU   r   r   r   r   r   r   r   r   r   rt   r   r   r   r   r   r   r  rv   r  r   r  r  r
  r  r  r  r  r  r  r  r   r'  r   r%  r   r   r2  rQ   r   __classcell__r"   r"   r   r#   r   0  s    

(
	



	%

zr   c                       s:   e Zd Z	 e Zd fdd	Z fddZdd Z  ZS )	r   Nc                    s$   	 | j ||d t ||| d S N)r?   rO   )r2  r   r   r1  r   r"   r#   r     s   zConfigParser.setc                    s   	 | j |d t | d S )N)r-   )r2  r   r   r/   r   r"   r#   r     s   zConfigParser.add_sectionc                 C   s6   	 z| j }t | _ | | j|i W || _ d S || _ w r   )r   r   r   r   )r    rU   Zhold_interpolationr"   r"   r#   r     s   zConfigParser._read_defaultsr   )	r(   r)   r*   r   r   r   r   r   r4  r"   r"   r   r#   r     s    r   c                       s   e Zd Z	  fddZ  ZS )r   c                    s&   t  j|i | tjdtd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.rG   rH   )r   r   rK   rL   rM   )r    r.   r   r   r"   r#   r     s
   
zSafeConfigParser.__init__)r(   r)   r*   r   r4  r"   r"   r   r#   r     s    r   c                   @   s   e Zd Z	 dd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zedd Zedd ZdddddddZdS )r   c                 C   sH   	 || _ || _|jD ]}d| }tj| jt||d}t| || q
d S )Nrt   _impl)_parser_namer   r   r   rt   getattrsetattr)r    rT   r   r   r   getterr"   r"   r#   r     s   
zSectionProxy.__init__c                 C   s   d | jS )Nz<Section: {}>)r8   r9  r%   r"   r"   r#   r&        zSectionProxy.__repr__c                 C   s(   | j | j|st|| j | j|S r   )r8  r  r9  ry   rt   r  r"   r"   r#   r    s   zSectionProxy.__getitem__c                 C   s"   | j j||d | j | j||S r5  )r8  r2  r   r9  r   r"   r"   r#   r    s   zSectionProxy.__setitem__c                 C   s,   | j | j|r| j | j|st|d S r   )r8  r  r9  r
  ry   r  r"   r"   r#   r    s
   zSectionProxy.__delitem__c                 C   s   | j | j|S r   )r8  r  r9  r  r"   r"   r#   r    s   zSectionProxy.__contains__c                 C   s   t |  S r   )r   _optionsr%   r"   r"   r#   r    r=  zSectionProxy.__len__c                 C   s   |    S r   )r>  r  r%   r"   r"   r#   r    r=  zSectionProxy.__iter__c                 C   s&   | j | jjkr| j| j S | j S r   )r9  r8  r   r   rU   r%   r"   r"   r#   r>    s   
zSectionProxy._optionsc                 C   r$   r   )r8  r%   r"   r"   r#   rT        zSectionProxy.parserc                 C   r$   r   )r9  r%   r"   r"   r#   r   
  r?  zSectionProxy.nameNF)rp   r   r7  c                K   s*   	 |s| j j}|| j|f|||d|S r   )r8  rt   r9  )r    r?   rq   rp   r   r7  r   r"   r"   r#   rt     s   zSectionProxy.getr   )r(   r)   r*   r   r&   r  r  r  r  r  r  r>  rQ   rT   r   rt   r"   r"   r"   r#   r     s$    	

r   c                   @   sH   e Zd Z	 edZdd Zdd Zdd Zdd	 Z	d
d Z
dd ZdS )r   z^get(?P<name>.+)$c                 C   sR   || _ i | _t| j D ]}| j|}|rtt| j |sqd | j|d< qd S )Nr   )r8  _datadir	GETTERCREru   callabler:  rw   )r    rT   r<  r   r"   r"   r#   r   )  s   zConverterMapping.__init__c                 C   s
   | j | S r   )r@  r  r"   r"   r#   r  2     
zConverterMapping.__getitem__c              	   C   s   zd| }W n t y   td|t|w |dkr td|| j|< tj| jj|d}||_	t
| j|| | j D ]}tj|j|d}t
||| q=d S )Nrt   zIncompatible key: {} (type: {})z)Incompatible key: cannot use "" as a name)r   r6  )r0  rC   r8   typer@  r   r   r8  r   	converterr;  valuesrt   )r    r   rO   kfuncproxyr<  r"   r"   r#   r  5  s"   
zConverterMapping.__setitem__c              	   C   sp   zd|pd  }W n t y   t|w | j|= t| jf| j D ]}zt|| W q# ty5   Y q#w d S )Nrt   )	r0  ry   r@  r  r  r8  rG  delattrr   )r    r   rH  instr"   r"   r#   r  E  s   zConverterMapping.__delitem__c                 C   
   t | jS r   )iterr@  r%   r"   r"   r#   r  S  rD  zConverterMapping.__iter__c                 C   rM  r   )r   r@  r%   r"   r"   r#   r  V  rD  zConverterMapping.__len__N)r(   r)   r*   r   r   rB  r   r  r  r  r  r  r"   r"   r"   r#   r     s    
	r   )(collections.abcr   collectionsr   r.  r   r   r  r   r   r  rK   __all__r   r3  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"   r#   <module>   sR     		
+HJ&      F