???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................U
    e5df                     @   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dddddd	d
ddddddddddddddg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 )0    )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/lib64/python3.8/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   c                   @   s   e Zd ZdddZdS )r   Nc                 C   s   t |dg}|d k	rRdt |g}|d k	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   c                   @   s   e Zd ZdddZdS )r   Nc                 C   s   t |dt |dg}|d k	rZdt |g}|d k	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   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   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   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   c                   @   s   e Zd ZdS )r   N)r&   r'   r(   r"   r"   r"   r#   r     s   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   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   

	
	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   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   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|k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   sj  |j ||d|d}|tkr&t||||rf|d}	|	dk rL|| d S |	dkrr||d |	  ||	d  }|dd }
|
dkr|d |dd  }q&|
dkrR| j|}|d krt||d| ||	d}||
 d  }z|| }W n& tk
r   t||||d Y nX d|krF| |||||||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     s`    



   
   z$BasicInterpolation._interpolate_someN	r&   r'   r(   recompiler^   rO   rQ   rW   r"   r"   r"   r#   r   x  s   
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|k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 krt||d| |d	d	}||
 d  }|}|}zrt|dkr||d }|| }nHt|dkrR|d }||d }|j ||dd
}nt||d|f W n2 tttfk
r   t|||d	|d Y nX d|k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     sx    




    
 z'ExtendedInterpolation._interpolate_someNrv   r"   r"   r"   r#   r     s   
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|krtj| j|d}| j||}z|| }W q tk
r }	 zt||||	jd d W 5 d }	~	X Y qX qqq|rd|k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     s0       zLegacyInterpolation.before_getc                 C   s   |S r   r"   rP   r"   r"   r#   rQ   $  s    zLegacyInterpolation.before_setc                 C   s,   |  d}|d k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
   
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=|:Zdelimz\STF)1ZyestrueZon0Z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kr| j| _| jd krt | _|tk	r(| j| |r8| | d S )Nr   |c                 s   s   | ]}t |V  qd S r   )rw   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_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k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 kS r   )r   r,   r"   r"   r#   has_section  s    zRawConfigParser.has_sectionc                 C   sJ   z| j |  }W n tk
r0   t|d Y nX || 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 ]f}z(t||d}| || W 5 Q R X W n tk
rd   Y q Y nX t |tjr|t|}|	| 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 kr,z
|j }W n tk
r*   d}Y nX | || 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k
rT   | jrP||krP Y nX || | D ]`\}}| t|}|d k	rt|}| jr||f|krt	||||||f |  ||| qhq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k
r8   |tkr, n| Y S Y nX | |}z|| }W n0 tk
r   |tkrtt||n| Y S Y nX |s|d k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|S r   )rg   )r    r*   convr9   kwargsr"   r"   r#   _get"  s    zRawConfigParser._getc             	   K   sJ   z| j |||f||d|W S  ttfk
rD   |tkr< | Y S X 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 krt  S j  z j  W n& tk
rV   jkrRt	Y nX t
  }|r| D ]\}}| |< qp 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      c                    s   g | ]}| |fqS r"   r"   )r   r9   )value_getterr"   r#   
<listcomp>[  s     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kS || jkr0dS | |}|| j| kpP|| jkS d S )NF)r   ri   r   r   )r    r*   r9   r"   r"   r#   
has_optionm  s    



zRawConfigParser.has_optionc                 C   sl   |r| j | |||}|r$|| jkr,| j}n.z| j| }W n tk
rX   t|d Y nX ||| |< 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 k	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_itemsZ	delimiterr   rI   r"   r"   r#   r     s    zRawConfigParser._write_sectionc                 C   sd   |r|| j kr| j}n.z| j| }W n tk
rB   t|d Y nX | |}||k}|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 k}|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   || kr| | |krd S || j kr.| j  n|| jk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 krL|d k	rL|rL|| d k	rL|| d q*tj}q*| j|
}|rh| nd}|d k	r|r||kr|| | q*|}| j|}|r<|d}|| jkr| jr||krt|||| j| }|| n@|| jkr
| j}n,|  }|| j|< t| || j|< || d }q*|d krTt|||
q*| j|}|r|d	d
d\}}}|s| |	|||
}	|  |! }| jr||f|krt"|||||||f |d k	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>  s      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_levelZ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   g  s    zRawConfigParser._read_defaultsc                 C   s    |st |}||t| |S r   )r   r2   r1   )r    excr  r8   rJ   r"   r"   r#   r  m  s    zRawConfigParser._handle_errorc                 C   s   i }z| j | }W n( tk
r:   || jkr6t|d Y nX i }|rt| D ]&\}}|d k	rdt|}||| |< qLt||| jS r   )	r   rl   r   r   r   r   ri   	_ChainMapr   )r    r*   r   ZsectiondictZvardictr   rI   r"   r"   r#   r   s  s    
zRawConfigParser._unify_valuesc                 C   s(   |  | jk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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   s0   z"| j }t | _ | | j|i W 5 || _ X 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   c                       s   e Zd Z fddZ  ZS )r   c                    s"   t  j|| 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   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    	

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   .  s    zConverterMapping.__getitem__c              	   C   s   zd| }W n( t k
r4   td|t|Y nX |dkrFtd|| j|< tj| jj|d}||_	t
| j|| | j D ] }tj|j|d}t
||| qd S )Nrg   zIncompatible key: {} (type: {})z)Incompatible key: cannot use "" as a name)r   r#  )r  r=   r3   typer+  r   r   r%  r   Z	converterr(  valuesrg   )r    r   rI   kfuncproxyr)  r"   r"   r#   r   1  s      
zConverterMapping.__setitem__c              	   C   s~   zd|p
d  }W n t k
r,   t|Y nX | j|= t| jf| j D ],}zt|| W qL tk
rv   Y qLY qLX qLd S )Nrg   )	r  rl   r+  r  r  r%  r0  delattrr   )r    r   r1  instr"   r"   r#   r   A  s    zConverterMapping.__delitem__c                 C   s
   t | jS r   )iterr+  r$   r"   r"   r#   r  O  s    zConverterMapping.__iter__c                 C   s
   t | jS r   )r}   r+  r$   r"   r"   r#   r   R  s    zConverterMapping.__len__N)r&   r'   r(   rw   rx   r-  r   r   r   r   r  r   r"   r"   r"   r#   r     s   
	)(Z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>   sp              		
+HJ&    | F