
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \XÑ  ã               @   sÒ  d dl mZ d dlmZ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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)ÚOrderedDictÚ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j| |ƒ d S )N)ÚmessageÚ	ExceptionÚ__init__)ÚselfÚmsg© r"   ú$/usr/lib64/python3.6/configparser.pyr   ª   s    zError.__init__c             C   s   | j S )N)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 j| 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|jdj|ƒƒ |jdƒ |j|ƒ |}n|jddƒ tj| dj|ƒƒ || _|| _	|| _
|||f| _d S )Nz already existszWhile reading from z [line {0:2d}]z
: section r   zSection r   )ÚreprÚappendÚformatÚextendÚinsertr   r   Újoinr)   ÚsourceÚlinenor*   )r    r)   r1   r2   r!   r   r"   r"   r#   r   Å   s    

zDuplicateSectionError.__init__)NN)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t |ƒdg}|d k	rZdt |ƒg}|d k	r@|jdj|ƒƒ |jdƒ |j|ƒ |}n|jddƒ tj| dj|ƒƒ || _|| _	|| _
|| _||||f| _d S )	Nz in section z already existszWhile reading from z [line {0:2d}]z	: option r   zOption r   )r+   r,   r-   r.   r/   r   r   r0   r)   Úoptionr1   r2   r*   )r    r)   r3   r1   r2   r!   r   r"   r"   r#   r   Þ   s     

zDuplicateOptionError.__init__)NN)r%   r&   r'   r   r"   r"   r"   r#   r   ×   s   c               @   s   e Zd Zdd„ ZdS )r   c             C   s.   t j| d||f ƒ || _|| _||f| _d S )NzNo option %r in section: %r)r   r   r3   r)   r*   )r    r3   r)   r"   r"   r#   r   õ   s
    zNoOptionError.__init__N)r%   r&   r'   r   r"   r"   r"   r#   r   ò   s   c               @   s   e Zd Zdd„ ZdS )r	   c             C   s(   t j| |ƒ || _|| _|||f| _d S )N)r   r   r3   r)   r*   )r    r3   r)   r!   r"   r"   r#   r      s    zInterpolationError.__init__N)r%   r&   r'   r   r"   r"   r"   r#   r	   ý   s   c               @   s   e Zd Zdd„ ZdS )r   c             C   s8   dj ||||ƒ}tj| |||ƒ || _||||f| _d S )NzˆBad 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   Ú	referencer*   )r    r3   r)   Úrawvalr4   r!   r"   r"   r#   r   
  s
    z(InterpolationMissingOptionError.__init__N)r%   r&   r'   r   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j ||t|ƒ}tj| |||ƒ |||f| _d S )Nz¢Recursion 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   r*   )r    r3   r)   r5   r!   r"   r"   r#   r     s
    z InterpolationDepthError.__init__N)r%   r&   r'   r   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   sX   |r|rt dƒ‚n| r(| r(t dƒ‚n|r0|}tj| 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   r1   Úerrorsr*   )r    r1   Ú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ÚDeprecationWarningr1   )r    r"   r"   r#   r8   :  s    
zParsingError.filenamec             C   s   t jdtdd� || _d S )NzSThe 'filename' attribute will be removed in future versions.  Use 'source' instead.r9   )r:   )r;   r<   r=   r1   )r    Úvaluer"   r"   r#   r8   D  s    
c             C   s*   | j j||fƒ |  jd||f 7  _d S )Nz
	[line %2d]: %s)r7   r,   r   )r    r2   Úliner"   r"   r#   r,   N  s    zParsingError.append)NN)r%   r&   r'   r   Úpropertyr8   Úsetterr,   r"   r"   r"   r#   r   (  s   


c               @   s   e Zd Zdd„ ZdS )r   c             C   s8   t j| d|||f ƒ || _|| _|| _|||f| _d S )Nz7File contains no section headers.
file: %r, line: %d
%r)r   r   r1   r2   r?   r*   )r    r8   r2   r?   r"   r"   r#   r   V  s    z"MissingSectionHeaderError.__init__N)r%   r&   r'   r   r"   r"   r"   r#   r   S  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 )Nr"   )r    Úparserr)   r3   r>   Údefaultsr"   r"   r#   Ú
before_getj  s    zInterpolation.before_getc             C   s   |S )Nr"   )r    rB   r)   r3   r>   r"   r"   r#   Ú
before_setm  s    zInterpolation.before_setc             C   s   |S )Nr"   )r    rB   r)   r3   r>   r"   r"   r#   Úbefore_readp  s    zInterpolation.before_readc             C   s   |S )Nr"   )r    rB   r)   r3   r>   r"   r"   r#   Úbefore_writes  s    zInterpolation.before_writeN)r%   r&   r'   rD   rE   rF   rG   r"   r"   r"   r#   r   g  s   c               @   s.   e Zd ZejdƒZdd„ Zdd„ Zdd„ ZdS )	r   z%\(([^)]+)\)sc             C   s$   g }| j ||||||dƒ dj|ƒS )Né   r   )Ú_interpolate_somer0   )r    rB   r)   r3   r>   rC   ÚLr"   r"   r#   rD   ˆ  s    zBasicInterpolation.before_getc             C   s<   |j ddƒ}| jjd|ƒ}d|kr8td||jdƒf ƒ‚|S )Nz%%r   ú%z1invalid interpolation syntax in %r at position %d)ÚreplaceÚ_KEYCREÚsubr6   Úfind)r    rB   r)   r3   r>   Ú	tmp_valuer"   r"   r#   rE   �  s    zBasicInterpolation.before_setc             C   sp  |j ||d|d�}|tkr&t|||ƒ‚�xB|�rj|jdƒ}	|	dk rP|j|ƒ d S |	dkrv|j|d |	… ƒ ||	d … }|dd… }
|
dkr¢|jdƒ |dd … }q*|
dk�rV| jj|ƒ}|d krÐt||d| ƒ‚|j|j	dƒƒ}||j
ƒ d … }y|| }W n& tk
�r"   t||||ƒd ‚Y nX d|k�rJ| j|||||||d ƒ n
|j|ƒ q*t||d	|f ƒ‚q*W d S )
NT)ÚrawÚfallbackrK   r   rH   r9   ú(z'bad interpolation variable reference %rz/'%%' must be followed by '%%' or '(', found: %r)Úgetr   r
   rO   r,   rM   Úmatchr   ÚoptionxformÚgroupÚendÚKeyErrorr   rI   )r    rB   r3   ÚaccumÚrestr)   ÚmapÚdepthr5   ÚpÚcÚmÚvarÚvr"   r"   r#   rI   •  sF    






z$BasicInterpolation._interpolate_someN)	r%   r&   r'   ÚreÚcompilerM   rD   rE   rI   r"   r"   r"   r#   r   w  s   
c               @   s.   e Zd ZejdƒZdd„ Zdd„ Zdd„ ZdS )	r   z\$\{([^}]+)\}c             C   s$   g }| j ||||||dƒ dj|ƒS )NrH   r   )rI   r0   )r    rB   r)   r3   r>   rC   rJ   r"   r"   r#   rD   Å  s    z ExtendedInterpolation.before_getc             C   s<   |j ddƒ}| jjd|ƒ}d|kr8td||jdƒf ƒ‚|S )Nz$$r   ú$z1invalid interpolation syntax in %r at position %d)rL   rM   rN   r6   rO   )r    rB   r)   r3   r>   rP   r"   r"   r#   rE   Ê  s    z ExtendedInterpolation.before_setc             C   sø  |j ||d|d�}|tkr&t|||ƒ‚�xÊ|�rò|jdƒ}	|	dk rP|j|ƒ d S |	dkrv|j|d |	… ƒ ||	d … }|dd… }
|
dkr¢|jdƒ |dd … }q*|
dk�rÞ| jj|ƒ}|d krÐt||d| ƒ‚|jdƒj	d	ƒ}||j
ƒ d … }|}|}yrt|ƒdk�r |j|d ƒ}|| }nHt|ƒdk�rV|d }|j|d ƒ}|j ||dd
�}nt||d|f ƒ‚W n2 tttfk
�rœ   t|||d	j|ƒƒd ‚Y nX d|k�rÒ| j|||||t|j|dd
�ƒ|d ƒ n
|j|ƒ q*t||d|f ƒ‚q*W d S )NT)rQ   rR   re   r   rH   r9   ú{z'bad interpolation variable reference %rú:)rQ   zMore than one ':' found: %rz-'$' must be followed by '$' or '{', found: %r)rT   r   r
   rO   r,   rM   rU   r   rW   ÚsplitrX   ÚlenrV   rY   r   r   r   r0   rI   ÚdictÚitems)r    rB   r3   rZ   r[   r)   r\   r]   r5   r^   r_   r`   ÚpathZsectÚoptrb   r"   r"   r#   rI   Ò  s^    







z'ExtendedInterpolation._interpolate_someN)	r%   r&   r'   rc   rd   rM   rD   rE   rI   r"   r"   r"   r#   r   ¿  s   
c               @   s2   e Zd ZejdƒZdd„ Zdd„ Zedd„ ƒZ	dS )	r   z%\(([^)]*)\)s|.c       
      C   sª   |}t }x„|rŒ|d8 }|rˆd|krˆtj| j|d�}| jj||ƒ}y|| }W qŠ tk
r„ }	 zt||||	jd ƒd ‚W Y d d }	~	X qŠX q
P q
W |r¦d|kr¦t	|||ƒ‚|S )NrH   z%()rB   r   )
r   Ú	functoolsÚpartialÚ_interpolation_replacerM   rN   rY   r   r*   r
   )
r    rB   r)   r3   r>   Úvarsr5   r]   rL   Úer"   r"   r#   rD     s"    (zLegacyInterpolation.before_getc             C   s   |S )Nr"   )r    rB   r)   r3   r>   r"   r"   r#   rE   #  s    zLegacyInterpolation.before_setc             C   s,   | j dƒ}|d kr| j ƒ S d|j|ƒ S d S )NrH   z%%(%s)s)rW   rV   )rU   rB   Úsr"   r"   r#   rp   &  s    
z*LegacyInterpolation._interpolation_replaceN)
r%   r&   r'   rc   rd   rM   rD   rE   Ústaticmethodrp   r"   r"   r"   r#   r   	  s   
c            
       s*  e Zd ZdZdZdZeƒ Zej	eej
ƒZej	ejdd�ej
ƒZej	ejdd�ej
ƒZej	dƒZddddddddd	œZd
edfdcddd
ddeeedœdd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdedd„Zdfdd„Zdgd!d"„Zdhd$d%„Zdid&d'„Zdd
ed(œd)d*„Zd+d,„ Z dd
ed(œd-d.„Z!dd
ed(œd/d0„Z"dd
ed(œd1d2„Z#dd
ed(œd3d4„Z$edd
f‡ fd5d6„	Z%d7d8„ Z&d9d:„ Z'd;d<„ Z(djd=d>„Z)dkd?d@„Z*dAdB„ Z+dCdD„ Z,dEdF„ Z-dGdH„ Z.dIdJ„ Z/dKdL„ Z0dMdN„ Z1dOdP„ Z2dQdR„ Z3dSdT„ Z4dUdV„ Z5dWdX„ Z6dYdZ„ Z7d[d\„ Z8d]d]d]d^œd_d`„Z9e:dadb„ ƒZ;‡  Z<S )lr   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ÚtrueZonÚ0ÚnoZfalseZoffNú=rg   ú#ú;)Ú
delimitersÚcomment_prefixesÚinline_comment_prefixesÚstrictÚempty_lines_in_valuesÚdefault_sectionÚinterpolationÚ
convertersc            C   sX  || _ | j ƒ | _| j ƒ | _t| ƒ| _| j ƒ | _t| |	ƒ| j|	< |rhx$|jƒ D ]\}}|| j| j|ƒ< qLW t	|ƒ| _
|dkrŽ|r„| jn| j| _nNdjdd„ |D ƒƒ}|rÂtj| jj|d�tjƒ| _ntj| jj|d�tjƒ| _t	|päf ƒ| _t	|pòf ƒ| _|| _|| _|| _|	| _|
| _| jtk�r*| j| _| jd k�r>tƒ | _|tk	�rT| jj|ƒ d S )Nr{   rg   ú|c             s   s   | ]}t j|ƒV  qd S )N)rc   Úescape)Ú.0Údr"   r"   r#   ú	<genexpr>l  s    z+RawConfigParser.__init__.<locals>.<genexpr>)ru   )r{   rg   ) Ú_dictÚ	_sectionsÚ	_defaultsr   Ú_convertersÚ_proxiesr   rk   rV   ÚtupleÚ_delimitersÚ	OPTCRE_NVÚOPTCREÚ_optcrer0   rc   rd   Ú_OPT_NV_TMPLr-   ÚVERBOSEÚ	_OPT_TMPLÚ_comment_prefixesÚ_inline_comment_prefixesÚ_strictÚ_allow_no_valueÚ_empty_lines_in_valuesrƒ   Ú_interpolationÚ_UNSETÚ_DEFAULT_INTERPOLATIONr   Úupdate)r    rC   Z	dict_typeZallow_no_valuer~   r   r€   r�   r‚   rƒ   r„   r…   Úkeyr>   r‰   r"   r"   r#   r   X  s>    






zRawConfigParser.__init__c             C   s   | j S )N)r�   )r    r"   r"   r#   rC   �  s    zRawConfigParser.defaultsc             C   s   t | jjƒ ƒS )N)ÚlistrŒ   Úkeys)r    r"   r"   r#   Úsections„  s    zRawConfigParser.sectionsc             C   sJ   || j krtd| ƒ‚|| jkr(t|ƒ‚| jƒ | j|< t| |ƒ| j|< d S )NzInvalid section name: %r)rƒ   r6   rŒ   r   r‹   r   r�   )r    r)   r"   r"   r#   Úadd_section‰  s    

zRawConfigParser.add_sectionc             C   s
   || j kS )N)rŒ   )r    r)   r"   r"   r#   Úhas_section—  s    zRawConfigParser.has_sectionc             C   sJ   y| j | jƒ }W n tk
r0   t|ƒd ‚Y nX |j| jƒ t|jƒ ƒS )N)rŒ   ÚcopyrY   r   r    r�   r¢   r£   )r    r)   Zoptsr"   r"   r#   Úoptionsž  s    zRawConfigParser.optionsc             C   sŒ   t |ttjfƒr|g}g }xl|D ]d}y(t||d��}| j||ƒ W d Q R X W n tk
rb   w Y nX t |tjƒrztj|ƒ}|j|ƒ q W |S )N)Úencoding)	Ú
isinstanceÚstrÚosÚPathLikeÚopenÚ_readÚOSErrorÚfspathr,   )r    Ú	filenamesr©   Zread_okr8   Úfpr"   r"   r#   Úread§  s    

zRawConfigParser.readc             C   s<   |d kr,y
|j }W n tk
r*   d}Y nX | j||ƒ d S )Nz<???>)ÚnameÚAttributeErrorr¯   )r    Úfr1   r"   r"   r#   Ú	read_fileÁ  s    

zRawConfigParser.read_fileú<string>c             C   s   t j|ƒ}| j||ƒ d S )N)ÚioÚStringIOr¸   )r    Ústringr1   Zsfiler"   r"   r#   Úread_stringÐ  s    
zRawConfigParser.read_stringú<dict>c             C   sØ   t ƒ }xÌ|jƒ D ]À\}}t|ƒ}y| j|ƒ W n( ttfk
rV   | jrR||krR‚ Y nX |j|ƒ xl|jƒ D ]`\}}| jt|ƒƒ}|d k	r’t|ƒ}| jr°||f|kr°t	|||ƒ‚|j||fƒ | j |||ƒ qlW qW d S )N)
Úsetrk   r«   r¥   r   r6   rš   ÚaddrV   r   )r    Z
dictionaryr1   Úelements_addedr)   r£   r¡   r>   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.r9   )r:   )r1   )r;   r<   r=   r¸   )r    r³   r8   r"   r"   r#   Úreadfpô  s    
zRawConfigParser.readfp)rQ   rq   rR   c            C   s¢   y| j ||ƒ}W n$ tk
r4   |tkr,‚ n|S Y nX | j|ƒ}y|| }W n, tk
rx   |tkrpt||ƒ‚n|S Y nX |s†|d krŠ|S | jj| ||||ƒS d S )N)Ú_unify_valuesr   rž   rV   rY   r   r�   rD   )r    r)   r3   rQ   rq   rR   r‰   r>   r"   r"   r#   rT   ý  s"    


zRawConfigParser.getc             K   s   || j ||f|ŽƒS )N)rT   )r    r)   Úconvr3   Úkwargsr"   r"   r#   Ú_get"  s    zRawConfigParser._getc            K   sD   y| j |||f||dœ|—ŽS  ttfk
r>   |tkr:‚ |S X d S )N)rQ   rq   )rÇ   r   r   rž   )r    r)   r3   rÅ   rQ   rq   rR   rÆ   r"   r"   r#   Ú	_get_conv%  s    zRawConfigParser._get_convc            K   s   | j ||tf|||dœ|—ŽS )N)rQ   rq   rR   )rÈ   Úint)r    r)   r3   rQ   rq   rR   rÆ   r"   r"   r#   Úgetint0  s    zRawConfigParser.getintc            K   s   | j ||tf|||dœ|—ŽS )N)rQ   rq   rR   )rÈ   Úfloat)r    r)   r3   rQ   rq   rR   rÆ   r"   r"   r#   Úgetfloat5  s    zRawConfigParser.getfloatc            K   s    | j ||| jf|||dœ|—ŽS )N)rQ   rq   rR   )rÈ   Ú_convert_to_boolean)r    r)   r3   rQ   rq   rR   rÆ   r"   r"   r#   Ú
getboolean:  s    zRawConfigParser.getbooleanc                s¶   ˆt krtƒ jƒ S ˆjjƒ ‰ yˆ jˆjˆ ƒ W n& tk
rV   ˆˆjkrRt	ˆƒ‚Y nX |r€x"|jƒ D ]\}}|ˆ ˆj
|ƒ< qfW ‡ ‡‡fdd„‰|r ‡ fdd„‰‡fdd„ˆ jƒ D ƒS )Nc                s   ˆj jˆˆ| ˆ |  ˆ ƒS )N)r�   rD   )r3   )r‰   r)   r    r"   r#   Ú<lambda>V  s   z'RawConfigParser.items.<locals>.<lambda>c                s   ˆ |  S )Nr"   )r3   )r‰   r"   r#   rÏ   Y  s    c                s   g | ]}|ˆ |ƒf‘qS r"   r"   )rˆ   r3   )Úvalue_getterr"   r#   ú
<listcomp>Z  s    z)RawConfigParser.items.<locals>.<listcomp>)rž   Úsuperrk   r�   r§   r    rŒ   rY   rƒ   r   rV   r£   )r    r)   rQ   rq   r¡   r>   )Ú	__class__)r‰   r)   r    rÐ   r#   rk   ?  s    


zRawConfigParser.itemsc             C   s.   x$| j ƒ D ]}| | }| |= ||fS W t‚d S )N)r¤   rY   )r    r¡   r>   r"   r"   r#   Úpopitem\  s
    
zRawConfigParser.popitemc             C   s   |j ƒ S )N)Úlower)r    Z	optionstrr"   r"   r#   rV   i  s    zRawConfigParser.optionxformc             C   sX   | s|| j kr$| j|ƒ}|| jkS || jkr2dS | j|ƒ}|| j| kpR|| jkS d S )NF)rƒ   rV   r�   rŒ   )r    r)   r3   r"   r"   r#   Ú
has_optionl  s    



zRawConfigParser.has_optionc             C   sn   |r| j j| |||ƒ}| s&|| jkr.| j}n.y| j| }W n tk
rZ   t|ƒd ‚Y nX ||| j|ƒ< d S )N)r�   rE   rƒ   r�   rŒ   rY   r   rV   )r    r)   r3   r>   Úsectdictr"   r"   r#   r¿   z  s    zRawConfigParser.setc             C   sl   |rdj | jd ƒ}n
| jd }| jr>| j|| j| jjƒ |ƒ x(| jD ]}| j||| j| jƒ |ƒ qFW d S )Nz {} r   )r-   r‘   r�   Ú_write_sectionrƒ   rk   rŒ   )r    r³   Zspace_around_delimitersr‰   r)   r"   r"   r#   Úwriteˆ  s    

zRawConfigParser.writec             C   s~   |j dj|ƒƒ x^|D ]V\}}| jj| |||ƒ}|d k	s@| j rV|t|ƒjddƒ }nd}|j dj||ƒƒ qW |j dƒ d S )Nz[{}]
Ú
z
	r   z{}{}
)rÙ   r-   r�   rG   r›   r«   rL   )r    r³   Zsection_nameZsection_itemsZ	delimiterr¡   r>   r"   r"   r#   rØ   ™  s    zRawConfigParser._write_sectionc             C   sf   | s|| j kr| j}n.y| j| }W n tk
rD   t|ƒd ‚Y nX | j|ƒ}||k}|rb||= |S )N)rƒ   r�   rŒ   rY   r   rV   )r    r)   r3   r×   Úexistedr"   r"   r#   Úremove_option¦  s    
zRawConfigParser.remove_optionc             C   s"   || j k}|r| j |= | j|= |S )N)rŒ   r�   )r    r)   rÛ   r"   r"   r#   Úremove_sectionµ  s
    
zRawConfigParser.remove_sectionc             C   s(   || j kr| j|ƒ rt|ƒ‚| j| S )N)rƒ   r¦   rY   r�   )r    r¡   r"   r"   r#   Ú__getitem__½  s    zRawConfigParser.__getitem__c             C   s@   || j kr| jjƒ  n|| jkr.| j| jƒ  | j||iƒ d S )N)rƒ   r�   ÚclearrŒ   rÂ   )r    r¡   r>   r"   r"   r#   Ú__setitem__Â  s
    

zRawConfigParser.__setitem__c             C   s2   || j krtdƒ‚| j|ƒs$t|ƒ‚| j|ƒ d S )Nz"Cannot remove the default section.)rƒ   r6   r¦   rY   rÝ   )r    r¡   r"   r"   r#   Ú__delitem__Î  s
    

zRawConfigParser.__delitem__c             C   s   || j kp| j|ƒS )N)rƒ   r¦   )r    r¡   r"   r"   r#   Ú__contains__Õ  s    zRawConfigParser.__contains__c             C   s   t | jƒd S )NrH   )ri   rŒ   )r    r"   r"   r#   Ú__len__Ø  s    zRawConfigParser.__len__c             C   s   t j| jf| jjƒ ƒS )N)Ú	itertoolsÚchainrƒ   rŒ   r£   )r    r"   r"   r#   Ú__iter__Û  s    zRawConfigParser.__iter__c             C   s2  t ƒ }d }d }d }d}d}d }	�xút|dd�D �]è\}}
tj}dd„ | jD ƒ}x||tjkrÊ|rÊi }x`|jƒ D ]T\}}|
j||d ƒ}|dkrŽql|||< |dks¶|dkrl|
|d  jƒ rlt||ƒ}qlW |}qPW x"| j	D ]}|
j
ƒ j|ƒrÔd}P qÔW |tjk�r d }|
d |… j
ƒ }|�s^| j�rV|d k�r\|d k	�r\|�r\|| d k	�r\|| jdƒ q.tj}q.| jj|
ƒ}|�rx|jƒ nd}|d k	�r¦|�r¦||k�r¦|| j|ƒ q.|}| jj|ƒ}|�rL|jdƒ}|| jk�r| j�rð||k�rðt|||ƒ‚| j| }|j|ƒ n@|| jk�r| j}n,| jƒ }|| j|< t| |ƒ| j|< |j|ƒ d }q.|d k�rdt|||
ƒ‚q.| jj|ƒ}|�r|jdd	d
ƒ\}}}|�s | j|	|||
ƒ}	| j |j!ƒ ƒ}| j�rÒ||f|k�rÒt"||||ƒ‚|j||fƒ |d k	�rþ|j
ƒ }|g||< nd ||< q.| j|	|||
ƒ}	q.W | j#ƒ  |	�r.|	‚d S )Nr   rH   )Ústartc             S   s   i | ]
}d|“qS )rH   éÿÿÿÿr"   )rˆ   r^   r"   r"   r#   ú
<dictcomp>ú  s    z)RawConfigParser._read.<locals>.<dictcomp>r   Úheaderr3   Úvir>   rè   )$r¿   Ú	enumerateÚsysÚmaxsizer™   rk   rO   ÚisspaceÚminr˜   ÚstripÚ
startswithrœ   r,   Ú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optnamer2   Zindent_levelrr   r?   Zcomment_startZinline_prefixesZnext_prefixesÚprefixÚindexr>   Zfirst_nonspaceZcur_indent_levelZmorë   Zoptvalr"   r"   r#   r¯   ß  sž     









zRawConfigParser._readc             C   sz   | j | jf}tj|f| jjƒ ƒ}xT|D ]L\}}xB|jƒ D ]6\}}t|tƒrXdj|ƒj	ƒ }| j
j| |||ƒ||< q8W q&W d S )NrÚ   )rƒ   r�   rä   rå   rŒ   rk   rª   r¢   r0   r÷   r�   rF   )r    rC   Zall_sectionsr)   r¨   rµ   Úvalr"   r"   r#   rø   Y  s    
z&RawConfigParser._join_multiline_valuesc             C   s    |st |ƒ}|j|t|ƒƒ |S )N)r   r,   r+   )r    Úexcrù   r2   r?   r"   r"   r#   rö   e  s    zRawConfigParser._handle_errorc             C   s„   i }y| j | }W n& tk
r8   || jkr4t|ƒ‚Y nX i }|rvx2|jƒ D ]&\}}|d k	rdt|ƒ}||| j|ƒ< qLW t||| jƒS )N)	rŒ   rY   rƒ   r   rk   r«   rV   Ú	_ChainMapr�   )r    r)   rq   ZsectiondictZvardictr¡   r>   r"   r"   r#   rÄ   k  s    
zRawConfigParser._unify_valuesc             C   s(   |j ƒ | jkrtd| ƒ‚| j|j ƒ  S )NzNot a boolean: %s)rÕ   ÚBOOLEAN_STATESr6   )r    r>   r"   r"   r#   rÍ     s    z#RawConfigParser._convert_to_booleanr   )r)   r3   r>   c            C   sF   t |tƒstdƒ‚t |tƒs$tdƒ‚| j s0|rBt |tƒsBtdƒ‚d S )Nzsection names must be stringszoption keys must be stringszoption values must be strings)rª   r«   Ú	TypeErrorr›   )r    r)   r3   r>   r"   r"   r#   Ú_validate_value_types†  s    


z%RawConfigParser._validate_value_typesc             C   s   | j S )N)rŽ   )r    r"   r"   r#   r…   ›  s    zRawConfigParser.converters)r{   rg   )r|   r}   )N)N)r¹   )r¾   )N)N)T)=r%   r&   r'   Z
_SECT_TMPLr—   r•   r   rŸ   rc   rd   r–   rõ   r-   r“   r’   ró   rÿ   Ú_default_dictr   rž   r   rC   r¤   r¥   r¦   r¨   r´   r¸   r½   rÂ   rÃ   rT   rÇ   rÈ   rÊ   rÌ   rÎ   rk   rÔ   rV   rÖ   r¿   rÙ   rØ   rÜ   rÝ   rÞ   rà   rá   râ   rã   ræ   r¯   rø   rö   rÄ   rÍ   r  r@   r…   Ú__classcell__r"   r"   )rÓ   r#   r   /  st   	
$	




	%


zc                   s0   e Zd Zeƒ Zd‡ fdd„	Z‡ fdd„Z‡  ZS )r   Nc                s"   | j ||d� tƒ j|||ƒ d S )N)r3   r>   )r  rÒ   r¿   )r    r)   r3   r>   )rÓ   r"   r#   r¿   ¥  s    zConfigParser.setc                s   | j |d� tƒ j|ƒ d S )N)r)   )r  rÒ   r¥   )r    r)   )rÓ   r"   r#   r¥   «  s    zConfigParser.add_section)N)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 )NzœThe SafeConfigParser class has been renamed to ConfigParser in Python 3.2. This alias will be removed in future versions. Use ConfigParser directly instead.r9   )r:   )rÒ   r   r;   r<   r=   )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   sJ   || _ || _x8|jD ].}d| }tj| jt||ƒd�}t| ||ƒ qW d S )NrT   )Ú_impl)Ú_parserÚ_namer…   rn   ro   rT   ÚgetattrÚsetattr)r    rB   rµ   rÅ   r¡   Úgetterr"   r"   r#   r   Ã  s    zSectionProxy.__init__c             C   s   dj | jƒS )Nz<Section: {}>)r-   r  )r    r"   r"   r#   r$   Ì  s    zSectionProxy.__repr__c             C   s(   | j j| j|ƒst|ƒ‚| j j| j|ƒS )N)r  rÖ   r  rY   rT   )r    r¡   r"   r"   r#   rÞ   Ï  s    zSectionProxy.__getitem__c             C   s"   | j j||d� | j j| j||ƒS )N)r3   r>   )r  r  r¿   r  )r    r¡   r>   r"   r"   r#   rà   Ô  s    zSectionProxy.__setitem__c             C   s,   | j j| j|ƒo| j j| j|ƒs(t|ƒ‚d S )N)r  rÖ   r  rÜ   rY   )r    r¡   r"   r"   r#   rá   Ø  s    zSectionProxy.__delitem__c             C   s   | j j| j|ƒS )N)r  rÖ   r  )r    r¡   r"   r"   r#   râ   Ý  s    zSectionProxy.__contains__c             C   s   t | jƒ ƒS )N)ri   Ú_options)r    r"   r"   r#   rã   à  s    zSectionProxy.__len__c             C   s   | j ƒ jƒ S )N)r
  ræ   )r    r"   r"   r#   ræ   ã  s    zSectionProxy.__iter__c             C   s*   | j | jjkr| jj| j ƒS | jjƒ S d S )N)r  r  rƒ   r¨   rC   )r    r"   r"   r#   r
  æ  s    zSectionProxy._optionsc             C   s   | j S )N)r  )r    r"   r"   r#   rB   ì  s    zSectionProxy.parserc             C   s   | j S )N)r  )r    r"   r"   r#   rµ   ñ  s    zSectionProxy.nameNF)rQ   rq   r  c            K   s(   |s| j j}|| j|f|||dœ|—ŽS )N)rQ   rq   rR   )r  rT   r  )r    r3   rR   rQ   rq   r  rÆ   r"   r"   r#   rT   ö  s    
zSectionProxy.get)N)r%   r&   r'   r   r$   rÞ   rà   rá   râ   rã   ræ   r
  r@   rB   rµ   rT   r"   r"   r"   r#   r   À  s   	c               @   sF   e Zd Zej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   sZ   || _ i | _xHt| j ƒD ]:}| jj|ƒ}| stt| j |ƒƒ rBqd | j|jdƒ< qW d S )Nrµ   )r  Ú_dataÚdirÚ	GETTERCRErU   Úcallabler  rW   )r    rB   r	  r`   r"   r"   r#   r     s    zConverterMapping.__init__c             C   s
   | j | S )N)r  )r    r¡   r"   r"   r#   rÞ     s    zConverterMapping.__getitem__c             C   sª   yd| }W n( t k
r4   tdj|t|ƒƒƒ‚Y nX |dkrFtdƒ‚|| j|< tj| jj|d�}||_	t
| j||ƒ x.| jjƒ D ] }tj|j|d�}t
|||ƒ q‚W d S )NrT   zIncompatible key: {} (type: {})z)Incompatible key: cannot use "" as a name)rÅ   )r  )r   r6   r-   Útyper  rn   ro   r  rÈ   Z	converterr  ÚvaluesrT   )r    r¡   r>   ÚkÚfuncÚproxyr	  r"   r"   r#   rà     s    
zConverterMapping.__setitem__c             C   s€   yd|p
d  }W n t k
r,   t|ƒ‚Y nX | j|= xDtj| jf| jjƒ ƒD ]*}yt||ƒ W qN tk
rv   wNY qNX qNW d S )NrT   )	r   rY   r  rä   rå   r  r  Údelattrr¶   )r    r¡   r  Zinstr"   r"   r#   rá   ,  s    zConverterMapping.__delitem__c             C   s
   t | jƒS )N)Úiterr  )r    r"   r"   r#   ræ   :  s    zConverterMapping.__iter__c             C   s
   t | jƒS )N)ri   r  )r    r"   r"   r#   rã   =  s    zConverterMapping.__len__N)r%   r&   r'   rc   rd   r  r   rÞ   rà   rá   ræ   rã   r"   r"   r"   r#   r     s   
	)(Úcollections.abcr   Úcollectionsr   r  r   rþ   rn   rº   rä   r¬   rc   rí   r;   Ú__all__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>�   sV   	
+HJ&    uF