a
    ze8                     @   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.9/configparser.pyr      s    zError.__init__c                 C   s   | j S r   )r   r    r"   r"   r#   __repr__   s    zError.__repr__N)r   )__name__
__module____qualname__r   r%   __str__r"   r"   r"   r#   r      s   
r   c                   @   s   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      s   r   c                   @   s   e Zd ZdddZdS )r   Nc                 C   s   t |dg}|d urRdt |g}|d ur8|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*   r7   r8   r!   r   r"   r"   r#   r      s    

zDuplicateSectionError.__init__)NNr-   r"   r"   r"   r#   r      s   r   c                   @   s   e Zd ZdddZdS )r   Nc                 C   s   t |dt |dg}|d urZdt |g}|d ur@|d| |d || |}n|dd t| d| || _|| _	|| _
|| _||||f| _d S )	Nz in section r.   r/   r0   z	: option r   zOption r   )r1   r2   r3   r4   r5   r   r   r6   r*   optionr7   r8   r+   )r    r*   r9   r7   r8   r!   r   r"   r"   r#   r      s"    

zDuplicateOptionError.__init__)NNr-   r"   r"   r"   r#   r      s   r   c                   @   s   e Zd Zdd ZdS )r   c                 C   s.   t | d||f  || _|| _||f| _d S )NzNo option %r in section: %rr   r   r9   r*   r+   )r    r9   r*   r"   r"   r#   r      s    zNoOptionError.__init__Nr-   r"   r"   r"   r#   r      s   r   c                   @   s   e Zd Zdd ZdS )r   c                 C   s(   t | | || _|| _|||f| _d S r   r:   )r    r9   r*   r!   r"   r"   r#   r     s    zInterpolationError.__init__Nr-   r"   r"   r"   r#   r      s   r   c                   @   s   e Zd Zdd ZdS )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})r3   r   r   	referencer+   )r    r9   r*   rawvalr;   r!   r"   r"   r#   r     s    z(InterpolationMissingOptionError.__init__Nr-   r"   r"   r"   r#   r
     s   r
   c                   @   s   e Zd ZdS )r   N)r&   r'   r(   r"   r"   r"   r#   r     s   r   c                   @   s   e Zd Zdd ZdS )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})r3   r   r   r   r+   )r    r9   r*   r<   r!   r"   r"   r#   r     s    z InterpolationDepthError.__init__Nr-   r"   r"   r"   r#   r	     s   r	   c                   @   s8   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   sT   |r|rt dn|s$|s$t dn|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   r7   errorsr+   )r    r7   filenamer"   r"   r#   r   ,  s    

zParsingError.__init__c                 C   s   t jdtdd | jS NzSThe 'filename' attribute will be removed in future versions.  Use 'source' instead.   
stacklevelwarningswarnDeprecationWarningr7   r$   r"   r"   r#   r?   ;  s
    zParsingError.filenamec                 C   s   t jdtdd || _d S r@   rD   r    valuer"   r"   r#   r?   E  s
    c                 C   s*   | j ||f |  jd||f 7  _d S )Nz
	[line %2d]: %s)r>   r2   r   )r    r8   liner"   r"   r#   r2   O  s    zParsingError.append)NN)r&   r'   r(   r   propertyr?   setterr2   r"   r"   r"   r#   r   )  s   

	
	r   c                   @   s   e Zd Zdd ZdS )r   c                 C   s8   t | d|||f  || _|| _|| _|||f| _d S )Nz7File contains no section headers.
file: %r, line: %d
%r)r   r   r7   r8   rJ   r+   )r    r?   r8   rJ   r"   r"   r#   r   W  s    z"MissingSectionHeaderError.__init__Nr-   r"   r"   r"   r#   r   T  s   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   |S r   r"   )r    parserr*   r9   rI   defaultsr"   r"   r#   
before_getk  s    zInterpolation.before_getc                 C   s   |S r   r"   r    rM   r*   r9   rI   r"   r"   r#   
before_setn  s    zInterpolation.before_setc                 C   s   |S r   r"   rP   r"   r"   r#   before_readq  s    zInterpolation.before_readc                 C   s   |S r   r"   rP   r"   r"   r#   before_writet  s    zInterpolation.before_writeN)r&   r'   r(   rO   rQ   rR   rS   r"   r"   r"   r#   r   h  s   r   c                   @   s.   e Zd ZedZdd Zdd Zdd ZdS )	r   z%\(([^)]+)\)sc              	   C   s$   g }|  ||||||d d|S N   r   _interpolate_somer6   r    rM   r*   r9   rI   rN   Lr"   r"   r#   rO     s    zBasicInterpolation.before_getc                 C   s<   | dd}| jd|}d|v r8td||df |S )Nz%%r   %1invalid interpolation syntax in %r at position %dreplace_KEYCREsubr=   findr    rM   r*   r9   rI   Z	tmp_valuer"   r"   r#   rQ     s    zBasicInterpolation.before_setc              
   C   sh  |j ||d|d}|tkr&t||||rd|d}	|	dk rL|| d S |	dkrr||d |	  ||	d  }|dd }
|
dkr|d |dd  }q&|
dkrP| j|}|d u rt||d| ||	d}||
 d  }z|| }W n$ ty   t||||d Y n0 d|v rD| |||||||d  n
|| q&t||d	|f q&d S )
NTrawfallbackrZ   r   rU   rA   ('bad interpolation variable reference %rz/'%%' must be followed by '%%' or '(', found: %r)getr   r	   r`   r2   r^   matchr   optionxformgroupendKeyErrorr
   rW   )r    rM   r9   accumrestr*   mapdepthr<   pcmvarvr"   r"   r#   rW     sT    





z$BasicInterpolation._interpolate_someN	r&   r'   r(   recompiler^   rO   rQ   rW   r"   r"   r"   r#   r   x  s   
r   c                   @   s.   e Zd ZedZdd Zdd Zdd ZdS )	r   z\$\{([^}]+)\}c              	   C   s$   g }|  ||||||d d|S rT   rV   rX   r"   r"   r#   rO     s    z ExtendedInterpolation.before_getc                 C   s<   | dd}| jd|}d|v r8td||df |S )Nz$$r   $r[   r\   ra   r"   r"   r#   rQ     s    z ExtendedInterpolation.before_setc                 C   s  |j ||d|d}|tkr&t||||r|d}	|	dk rL|| d S |	dkrr||d |	  ||	d  }|dd }
|
dkr|d |dd  }q&|
dkr| j|}|d u rt||d| |d	d	}||
 d  }|}|}zrt|dkr||d }|| }nHt|dkrR|d }||d }|j ||dd
}nt||d|f W n0 tttfy   t|||d	|d Y n0 d|v r| |||||t|j|dd
|d  n
|| q&t||d|f q&d S )NTrb   ry   r   rU   rA   {rf   :)rc   zMore than one ':' found: %rz-'$' must be followed by '$' or '{', found: %r)rg   r   r	   r`   r2   r^   rh   r   rj   splitrk   lenri   rl   r   r   r
   r6   rW   dictitems)r    rM   r9   rm   rn   r*   ro   rp   r<   rq   rr   rs   pathZsectoptru   r"   r"   r#   rW     sn    





z'ExtendedInterpolation._interpolate_someNrv   r"   r"   r"   r#   r     s   
r   c                   @   s2   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 }|rd|v rtj| j|d}| j||}z|| }W q ty }	 z"t||||	jd d W Y d }	~	qd }	~	0 0 qqq|rd|v rt	||||S )NrU   z%()rM   r   )
r   	functoolspartial_interpolation_replacer^   r_   rl   r
   r+   r	   )
r    rM   r*   r9   rI   varsr<   rp   r]   er"   r"   r#   rO     s*    zLegacyInterpolation.before_getc                 C   s   |S r   r"   rP   r"   r"   r#   rQ   $  s    zLegacyInterpolation.before_setc                 C   s,   |  d}|d u r|   S d|| S d S )NrU   z%%(%s)s)rj   ri   )rh   rM   sr"   r"   r#   r   '  s    
z*LegacyInterpolation._interpolation_replaceN)
r&   r'   r(   rw   rx   r^   rO   rQ   staticmethodr   r"   r"   r"   r#   r   
  s
   
r   c                
       s2  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ddddZdedd Zdfd"d#Zdgd$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(dhd;d<Z)did=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 )jr   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rd|rZ| j	n| j
| _nNddd |D }|rt| jj|dtj| _nt| jj|dtj| _t|pd| _t|pd| _|| _|| _|| _|	| _|
| _| jtu r| j| _| jd u rt | _|tur(| j| |r8| | d S )Nr   |c                 s   s   | ]}t |V  qd S r   )rw   escape).0dr"   r"   r#   	<genexpr>j      z+RawConfigParser.__init__.<locals>.<genexpr>r   r"   )_dict	_sections	_defaultsr   _converters_proxiesr   tuple_delimiters	OPTCRE_NVOPTCRE_optcrer6   rw   rx   _OPT_NV_TMPLr3   VERBOSE	_OPT_TMPL_comment_prefixes_inline_comment_prefixes_strict_allow_no_value_empty_lines_in_valuesr   _interpolation_UNSET_DEFAULT_INTERPOLATIONr   update_read_defaults)r    rN   Z	dict_typeZallow_no_valuer   r   r   r   r   r   r   r   r   r"   r"   r#   r   Y  s@    






zRawConfigParser.__init__c                 C   s   | j S r   )r   r$   r"   r"   r#   rN     s    zRawConfigParser.defaultsc                 C   s   t | j S r   )listr   keysr$   r"   r"   r#   sections  s    zRawConfigParser.sectionsc                 C   sJ   || j krtd| || jv r(t||  | j|< t| || j|< d S )NzInvalid section name: %r)r   r=   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   sH   z| j |  }W n ty.   t|d Y n0 || j t| S r   )r   copyrl   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}g }|D ]x}z<t||d}| || W d    n1 sT0    Y  W n tyv   Y q Y n0 t |tjrt|}|	| q |S )N)encoding)

isinstancestrbytesosPathLikeopen_readOSErrorfspathr2   )r    	filenamesr   Zread_okr?   fpr"   r"   r#   read  s    .

zRawConfigParser.readc                 C   s:   |d u r*z
|j }W n ty(   d}Y n0 | || d S )Nz<???>)nameAttributeErrorr   )r    fr7   r"   r"   r#   	read_file  s    

zRawConfigParser.read_file<string>c                 C   s   t |}| || d S r   )ioStringIOr   )r    stringr7   Zsfiler"   r"   r#   read_string  s    
zRawConfigParser.read_string<dict>c              
   C   s   t  }| D ]\}}t|}z| | W n& ttfyR   | jrN||v rN Y n0 || | D ]`\}}| t|}|d urt|}| jr||f|v rt	||||||f |  ||| qfqd S r   )
setr   r   r   r   r=   r   addri   r   )r    Z
dictionaryr7   elements_addedr*   r   keyrI   r"   r"   r#   	read_dict  s"    
zRawConfigParser.read_dictc                 C   s"   t jdtdd | j||d d S )NzRThis method will be removed in future versions.  Use 'parser.read_file()' instead.rA   rB   )r7   )rE   rF   rG   r   )r    r   r?   r"   r"   r#   readfp  s
    zRawConfigParser.readfprc   r   rd   c                C   s   z|  ||}W n& ty6   |tu r* n| Y S Y n0 | |}z|| }W n. ty|   |tu rpt||n| Y S Y n0 |s|d u r|S | j| ||||S d S r   )_unify_valuesr   r   ri   rl   r   r   rO   )r    r*   r9   rc   r   rd   r   rI   r"   r"   r#   rg     s$    
zRawConfigParser.getc                 K   s   || j ||fi |S r   )rg   )r    r*   convr9   kwargsr"   r"   r#   _get"  s    zRawConfigParser._getc             	   K   sH   z| j |||f||d|W S  ttfyB   |tu r: | Y S 0 d S )N)rc   r   )r   r   r   r   )r    r*   r9   r   rc   r   rd   r   r"   r"   r#   	_get_conv%  s    zRawConfigParser._get_convc                K   s   | j ||tf|||d|S Nr   )r   intr    r*   r9   rc   r   rd   r   r"   r"   r#   getint0  s
    zRawConfigParser.getintc                K   s   | j ||tf|||d|S r   )r   floatr   r"   r"   r#   getfloat5  s
    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yT   jkrPt	Y n0 t
  }|r| D ]\}}| |< qn fdd|r fddfdd|D S )Nc                    s   j |  |   S r   )r   rO   r9   )r   r*   r    r"   r#   <lambda>W  s   z'RawConfigParser.items.<locals>.<lambda>c                    s    |  S r   r"   r   )r   r"   r#   r   Z  r   c                    s   g | ]}| |fqS r"   r"   )r   r9   )value_getterr"   r#   
<listcomp>[  r   z)RawConfigParser.items.<locals>.<listcomp>)r   superr   r   r   r   r   rl   r   r   r   r   ri   )r    r*   rc   r   Z	orig_keysr   rI   	__class__)r   r*   r    r   r#   r   ?  s     


zRawConfigParser.itemsc                 C   s.   |   D ]}| | }| |= ||f  S td S r   )r   rl   r    r   rI   r"   r"   r#   popitem]  s
    zRawConfigParser.popitemc                 C   s   |  S r   )lower)r    Z	optionstrr"   r"   r#   ri   j  s    zRawConfigParser.optionxformc                 C   sV   |r|| j kr"| |}|| jv S || jvr0dS | |}|| j| v pP|| jv S d S )NF)r   ri   r   r   )r    r*   r9   r"   r"   r#   
has_optionm  s    



zRawConfigParser.has_optionc                 C   sj   |r| j | |||}|r$|| jkr,| j}n,z| j| }W n tyV   t|d Y n0 ||| |< d S r   )r   rQ   r   r   r   rl   r   ri   )r    r*   r9   rI   sectdictr"   r"   r#   r   {  s    zRawConfigParser.setc                 C   sh   |rd | jd }n
| jd }| jr>| || j| j | | jD ]}| ||| j|  | qDd S )Nz {} r   )r3   r   r   _write_sectionr   r   r   )r    r   Zspace_around_delimitersr   r*   r"   r"   r#   write  s    	



zRawConfigParser.writec                 C   sx   | d| |D ]T\}}| j| |||}|d us<| jsR|t|dd }nd}| d|| q| d d S )Nz[{}]

z
	r   z{}{}
)r   r3   r   rS   r   r   r]   )r    r   Zsection_nameZsection_items	delimiterr   rI   r"   r"   r#   r     s    zRawConfigParser._write_sectionc                 C   sb   |r|| j kr| j}n,z| j| }W n ty@   t|d Y n0 | |}||v }|r^||= |S r   )r   r   r   rl   r   ri   )r    r*   r9   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   rl   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 rF| 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   r=   r   rl   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 )NrU   )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 ]\}}
tj}dd | jD }|tjkr|ri }| D ]T\}}|
||d }|dkrqd|||< |dks|dkrd|
|d   rdt||}qd|}qJ| j	D ]}|

 |rd} qq|tjkrd }|
d | 
 }|sN| jrF|d u rL|d urL|rL|| d urL|| d q*tj}q*| j|
}|rh| 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 rTt|||
q*| j|}|r|d	d
d\}}}|s| |	|||
}	|  |! }| jr||f|v rt"|||||||f |d ur|
 }|g||< nd ||< q*| |	|||
}	q*| #  |	r|	d S )Nr   rU   )startc                 S   s   i | ]
}|d qS )r"   )r   rq   r"   r"   r#   
<dictcomp>  r   z)RawConfigParser._read.<locals>.<dictcomp>r  r   headerr9   virI   )$r   	enumeratesysmaxsizer   r   r`   isspaceminr   strip
startswithr   r2   NONSPACECREsearchr  SECTCRErh   rj   r   r   r   r   r   r   r   r   r   r   r   _handle_errorri   rstripr   _join_multiline_values)r    r   fpnamer   ZcursectZsectnameZoptnamer8   Zindent_levelr   rJ   Zcomment_startZinline_prefixesZnext_prefixesprefixindexrI   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 ]H\}}| D ]6\}}t|trTd|	 }| j
| |||||< q4q$d S )Nr   )r   r   r  r  r   r   r   r   r6   r  r   rR   )r    rN   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   ri   )r    rN   r   rI   r"   r"   r#   r   j  s    zRawConfigParser._read_defaultsc                 C   s    |st |}||t| |S r   )r   r2   r1   )r    excr  r8   rJ   r"   r"   r#   r  p  s    zRawConfigParser._handle_errorc                 C   s   i }z| j | }W n& ty8   || jkr4t|d Y n0 i }|rr| D ]&\}}|d urbt|}||| |< qJt||| jS r   )	r   rl   r   r   r   r   ri   	_ChainMapr   )r    r*   r   ZsectiondictZvardictr   rI   r"   r"   r#   r   v  s    
zRawConfigParser._unify_valuesc                 C   s(   |  | jvrtd| | j|   S )NzNot a boolean: %s)r   BOOLEAN_STATESr=   rH   r"   r"   r#   r     s    z#RawConfigParser._convert_to_booleanr   )r*   r9   rI   c                C   sD   t |tstdt |ts$td| jr.|r@t |ts@tdd S )Nzsection names must be stringszoption keys must be stringszoption values must be strings)r   r   	TypeErrorr   r    r*   r9   rI   r"   r"   r#   _validate_value_types  s    



z%RawConfigParser._validate_value_typesc                 C   s   | j S r   )r   r$   r"   r"   r#   r     s    zRawConfigParser.converters)N)N)r   )r   )N)N)T)>r&   r'   r(   Z
_SECT_TMPLr   r   r   r   rw   rx   r   r  r3   r   r   r  r   _default_dictr   r   r   rN   r   r   r   r   r   r   r   r   r   rg   r   r   r   r   r   r   r   ri   r   r   r   r   r   r   r   r   r  r  r  r  r   r  r   r  r   r   r#  rK   r   __classcell__r"   r"   r   r#   r   0  s   

(	




	%

zr   c                       s8   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)r9   rI   )r#  r   r   r"  r   r"   r#   r     s    zConfigParser.setc                    s   | j |d t | d S )N)r*   )r#  r   r   r,   r   r"   r#   r     s    zConfigParser.add_sectionc                 C   s6   z(| j }t | _ | | j|i W || _ n|| _ 0 d S r   )r   r   r   r   )r    rN   Zhold_interpolationr"   r"   r#   r     s
    zConfigParser._read_defaults)N)	r&   r'   r(   r   r   r   r   r   r%  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 future versions. Use ConfigParser directly instead.rA   rB   )r   r   rE   rF   rG   )r    r+   r   r   r"   r#   r     s
    zSafeConfigParser.__init__)r&   r'   r(   r   r%  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   sF   || _ || _|jD ].}d| }tj| jt||d}t| || qd S )Nrg   _impl)_parser_namer   r   r   rg   getattrsetattr)r    rM   r   r   r   getterr"   r"   r#   r     s    
zSectionProxy.__init__c                 C   s   d | jS )Nz<Section: {}>)r3   r*  r$   r"   r"   r#   r%     s    zSectionProxy.__repr__c                 C   s(   | j | j|st|| j | j|S r   )r)  r   r*  rl   rg   r   r"   r"   r#   r     s    zSectionProxy.__getitem__c                 C   s"   | j j||d | j | j||S r&  )r)  r#  r   r*  r   r"   r"   r#   r     s    zSectionProxy.__setitem__c                 C   s,   | j | j|r | j | j|s(t|d S r   )r)  r   r*  r   rl   r   r"   r"   r#   r    s    zSectionProxy.__delitem__c                 C   s   | j | j|S r   )r)  r   r*  r   r"   r"   r#   r    s    zSectionProxy.__contains__c                 C   s   t |  S r   )r}   _optionsr$   r"   r"   r#   r    s    zSectionProxy.__len__c                 C   s   |    S r   )r.  r  r$   r"   r"   r#   r    s    zSectionProxy.__iter__c                 C   s*   | j | jjkr| j| j S | j S d S r   )r*  r)  r   r   rN   r$   r"   r"   r#   r.    s    zSectionProxy._optionsc                 C   s   | j S r   )r)  r$   r"   r"   r#   rM     s    zSectionProxy.parserc                 C   s   | j S r   )r*  r$   r"   r"   r#   r   	  s    zSectionProxy.nameNF)rc   r   r(  c                K   s(   |s| j j}|| j|f|||d|S r   )r)  rg   r*  )r    r9   rd   rc   r   r(  r   r"   r"   r#   rg     s    
zSectionProxy.get)N)r&   r'   r(   r   r%   r   r   r  r  r  r  r.  rK   rM   r   rg   r"   r"   r"   r#   r     s    	

r   c                   @   sF   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 ]6}| j|}|rtt| j |s<qd | j|d< qd S )Nr   )r)  _datadir	GETTERCRErh   callabler+  rj   )r    rM   r-  rs   r"   r"   r#   r   (  s    zConverterMapping.__init__c                 C   s
   | j | S r   )r/  r   r"   r"   r#   r   1  s    zConverterMapping.__getitem__c              	   C   s   zd| }W n& t y2   td|t|Y n0 |dkrDtd|| j|< tj| jj|d}||_	t
| j|| | j D ] }tj|j|d}t
||| q~d S )Nrg   zIncompatible key: {} (type: {})z)Incompatible key: cannot use "" as a name)r   r'  )r!  r=   r3   typer/  r   r   r)  r   	converterr,  valuesrg   )r    r   rI   kfuncproxyr-  r"   r"   r#   r   4  s    
zConverterMapping.__setitem__c              	   C   sz   zd|p
d  }W n t y*   t|Y n0 | j|= t| jf| j D ]*}zt|| W qJ tyr   Y qJY qJ0 qJd S )Nrg   )	r!  rl   r/  r  r  r)  r5  delattrr   )r    r   r6  instr"   r"   r#   r  D  s    zConverterMapping.__delitem__c                 C   s
   t | jS r   )iterr/  r$   r"   r"   r#   r  R  s    zConverterMapping.__iter__c                 C   s
   t | jS r   )r}   r/  r$   r"   r"   r#   r  U  s    zConverterMapping.__len__N)r&   r'   r(   rw   rx   r1  r   r   r   r  r  r  r"   r"   r"   r#   r     s   
	r   )(collections.abcr   collectionsr   r  r   r   r  r   rw   r  rE   __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"   r#   <module>   sL   		
+HJ&       F