<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>

]                 @   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 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 Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd d   d e  Z Gd  d   d e  Z Gd! d   d e  Z Gd" d
   d
 e  Z Gd# d   d e  Z Gd$ d	   d	 e  Z Gd% d   d e  Z Gd& d   d e  Z e   Z Gd' d   d  Z Gd( d   d e  Z Gd) d   d e  Z  Gd* d   d e  Z! Gd+ d   d e  Z" Gd, d   d e"  Z# Gd- d   d e#  Z$ Gd. d   d e  Z% Gd/ 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               @   s1   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"   1/opt/alt/python35/lib64/python3.5/configparser.pyr      s    	zError.__init__c             C   s   |  j  S)N)r   )r    r"   r"   r#   __repr__   s    zError.__repr__N)__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   s0   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 d  Z d S)r   Nc             C   s   t  |  d g } | d  k	 ru d t  |  g } | d  k	 rR | 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__)r%   r&   r'   r   r"   r"   r"   r#   r      s   c               @   s"   e  Z d  Z d d d d  Z d S)r   Nc             C   s   t  |  d t  |  d g } | d  k	 r d 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__)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   s8   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   sP   d j  | | | |  } t j |  | | |  | |  _ | | | | 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})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   sD   d j  | | t |  } t j |  | | |  | | | 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})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               @   sU   e  Z d  Z d d d d  Z e d d    Z e j d d    Z d d   Z d S)	r   Nc             C   sz   | r | r t  d   n) | r8 | r8 t  d   n | rD | } 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   9  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   C  s    c             C   s3   |  j  j | | f  |  j d | | f 7_ d  S)Nz
	[line %2d]: %s)r7   r,   r   )r    r2   liner"   r"   r#   r,   M  s    zParsingError.append)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   sN   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   U  s    			z"MissingSectionHeaderError.__init__N)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	 S)
r   c             C   s   | S)Nr"   )r    parserr)   r3   r>   defaultsr"   r"   r#   
before_geti  s    zInterpolation.before_getc             C   s   | S)Nr"   )r    rB   r)   r3   r>   r"   r"   r#   
before_setl  s    zInterpolation.before_setc             C   s   | S)Nr"   )r    rB   r)   r3   r>   r"   r"   r#   before_reado  s    zInterpolation.before_readc             C   s   | S)Nr"   )r    rB   r)   r3   r>   r"   r"   r#   before_writer  s    zInterpolation.before_writeN)r%   r&   r'   rD   rE   rF   rG   r"   r"   r"   r#   r   f  s   c               @   sC   e  Z d  Z e j d  Z d d   Z d d   Z d d   Z d S)	r   z%\(([^)]+)\)sc             C   s2   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   sV   | j  d d  } |  j j d |  } d | k rR t 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   s  | j  | | d d d | } | t k r< t | | |   x| r| j d  }	 |	 d k  rq | j |  d  S|	 d k r | j | d  |	   | |	 d   } | d d  }
 |
 d k r | j d  | d d   } q? |
 d k r|  j j |  } | d  k r t | | d	 |   | j | j	 d   } | | j
   d   } y | | } Wn* t k
 rt | | | |  d   Yn Xd | k r|  j | | | | | | | d  q| j |  q? t | | d
 | f   q? Wd  S)NrawTfallbackrK   r   rH   r:   (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   v  s   c               @   sC   e  Z d  Z e j d  Z d d   Z d d   Z d d   Z d S)	r   z\$\{([^}]+)\}c             C   s2   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   sV   | j  d d  } |  j j d |  } d | k rR t 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 d | } | t k r< t | | |   xg| r| j d  }	 |	 d k  rq | j |  d  S|	 d k r | 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   } | } | } y t |  d k r| j | d  } | | } nc t |  d k r| d } | j | d  } | j  | | d d } n t | | d | f   Wn< t t t f k
 r1t | | | d
 j |   d   Yn Xd | k ry|  j | | | | | t | j | d d  | d  q| j |  q? t | | d | f   q? Wd  S)NrQ   TrR   re   r   rH   r:   {z'bad interpolation variable reference %r: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               @   sI   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 | | } Wq t k
 r }	 z$ t | | | |	 j d  d   WYd  d  }	 ~	 Xq Xq Pq 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"    	
	2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    Sd | j |  Sd  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                   sj  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 d d d d d d d i Z d e d d du d dv d d d d d d d e d e d e d d Z d  d!   Z d" d#   Z d$ d%   Z d& d'   Z d( d)   Z d d* d+  Z d d, d-  Z d. d/ d0  Z d1 d2 d3  Z d d4 d5  Z d6 d d7 d d8 e d9 d:  Z d; d<   Z  d6 d d7 d d8 e d= d>  Z! d6 d d7 d d8 e d? d@  Z" d6 d d7 d d8 e dA dB  Z# d6 d d7 d d8 e dC dD  Z$ e d d   f dE dF  Z% dG dH   Z& dI dJ   Z' dK dL   Z( d dM dN  Z) d dO dP  Z* dQ dR   Z+ dS dT   Z, dU dV   Z- dW dX   Z. dY dZ   Z/ d[ d\   Z0 d] d^   Z1 d_ d`   Z2 da db   Z3 dc dd   Z4 de df   Z5 dg dh   Z6 di dj   Z7 dk dl   Z8 dm dn do dn dp dn dq dr  Z9 e: ds dt    Z;   S)wr   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
        delimz=|:z\S1TyestrueZon0FnofalseZoffN
delimiters=rg   comment_prefixes#;inline_comment_prefixesstrictempty_lines_in_valuesdefault_sectioninterpolation
convertersc            C   s  | |  _  |  j    |  _ |  j    |  _ t |   |  _ |  j    |  _ t |  |	  |  j |	 <| r x0 | j   D]" \ } } | |  j |  j |  <qn Wt	 |  |  _
 | d k r | r |  j n |  j |  _ ns d j d d   | D  } | rt j |  j j d |  t j  |  _ n' t j |  j j d |  t j  |  _ t	 | pLf   |  _ t	 | paf   |  _ | |  _ | |  _ | |  _ |	 |  _ |
 |  _ |  j t k r|  j |  _ |  j d  k rt   |  _ | t k	 r|  j j |  d  S)Nr}   rg   |c             s   s   |  ] } t  j |  Vq d  S)N)rc   escape).0dr"   r"   r#   	<genexpr>k  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   W  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   sg   | |  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   s[   y |  j  | j   } Wn! t k
 r: t |  d   Yn 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  r | g } g  } xc | D][ } y0 t | d |  } |  j | |  Wd  QRXWn t k
 rr w% Yn X| j |  q% W| S)Nencoding)
isinstancestropen_readOSErrorr,   )r    	filenamesr   Zread_okr8   fpr"   r"   r#   read  s    	zRawConfigParser.readc             C   sH   | d  k r4 y | j  } Wn t k
 r3 d } Yn X|  j | |  d  S)Nz<???>)nameAttributeErrorr   )r    fr1   r"   r"   r#   	read_file  s    zRawConfigParser.read_filez<string>c             C   s#   t  j |  } |  j | |  d  S)N)ioStringIOr   )r    stringr1   Zsfiler"   r"   r#   read_string  s    zRawConfigParser.read_stringz<dict>c             C   s$  t    } x| j   D]\ } } t |  } y |  j |  Wn0 t t f k
 rq |  j rm | | k rm   Yn X| j |  x | j   D] \ } } |  j t |   } | d  k	 r t |  } |  j r | | f | k r t	 | | |   | j | | f  |  j  | | |  q Wq Wd  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.readfprQ   rq   rR   c            C   s   y |  j  | |  } Wn( t k
 r@ | t k r8   n | SYn X|  j |  } y | | } Wn4 t k
 r | t k r t | |   n | SYn X| s | d  k r | S|  j j |  | | | |  Sd  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  | | |   S)N)rT   )r    r)   convr3   kwargsr"   r"   r#   _get  s    zRawConfigParser._getc            K   sX   y& |  j  | | | d | d | | SWn+ t t f k
 rS | t k rK   | SYn Xd  S)NrQ   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 d | d | d | | S)NrQ   rq   rR   )r   int)r    r)   r3   rQ   rq   rR   r   r"   r"   r#   getint-  s    zRawConfigParser.getintc            K   s(   |  j  | | t d | d | d | | S)NrQ   rq   rR   )r   float)r    r)   r3   rQ   rq   rR   r   r"   r"   r#   getfloat2  s    zRawConfigParser.getfloatc            K   s+   |  j  | | |  j d | d | d | | S)NrQ   rq   rR   )r   _convert_to_boolean)r    r)   r3   rQ   rq   rR   r   r"   r"   r#   
getboolean7  s    zRawConfigParser.getbooleanc                s    t  k r t   j   S j j     y   j  j   Wn- t k
 ro   j k rk t	    Yn X| r x- | j   D] \ } } |    j
 |  <q W    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>S  s   z'RawConfigParser.items.<locals>.<lambda>c                s     |  S)Nr"   )r3   )r   r"   r#   r   V  s    c                s"   g  |  ] } |   |  f  q Sr"   r"   )r   r3   )value_getterr"   r#   
<listcomp>W  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   s9   x, |  j    D] } |  | } |  | =| | f SWt  d  S)N)r   rY   )r    r   r>   r"   r"   r#   popitemY  s
    
zRawConfigParser.popitemc             C   s
   | j    S)N)lower)r    Z	optionstrr"   r"   r#   rV   f  s    zRawConfigParser.optionxformc             C   sx   | s | |  j  k r2 |  j |  } | |  j k S| |  j k rE d S|  j |  } | |  j | k ps | |  j k Sd  S)NF)r   rV   r   r   )r    r)   r3   r"   r"   r#   
has_optioni  s    zRawConfigParser.has_optionc             C   s   | r! |  j  j |  | | |  } | s7 | |  j k rC |  j } n5 y |  j | } Wn! t k
 rw t |  d   Yn X| | |  j |  <d  S)N)r   rE   r   r   r   rY   r   rV   )r    r)   r3   r>   sectdictr"   r"   r#   r   w  s    	zRawConfigParser.setc             C   s   | r d j  |  j d  } n |  j d } |  j rW |  j | |  j |  j j   |  x4 |  j D]) } |  j | | |  j | j   |  qa Wd  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]{ \ } } |  j j |  | | |  } | d  k	 sZ |  j ry | 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_items	delimiterr   r>   r"   r"   r#   r     s    	zRawConfigParser._write_sectionc             C   s   | s | |  j  k r" |  j } n5 y |  j | } Wn! t k
 rV t |  d   Yn X|  j |  } | | k } | r | | =| 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   s6   | |  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   sV   | |  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   sG   | |  j  k r t d   |  j |  s6 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   sF  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]v \ } } |
 j | | d  } | d k r q | | | <| d k s | d k r |
 | d j   r t | |  } q W| } qn Wx- |  j	 D]" } |
 j
   j |  r$d } Pq$W| t j k r_d  } |
 d  |  j
   } | s|  j r| d  k r| d  k	 r| r| | d  k	 r| | j d  q@ t j } q@ |  j j |
  } | r| j   n d } | d  k	 r.| r.| | k r.| | j |  q@ | } |  j j |  } | r| j d  } | |  j k r|  j r| | k rt | | |   |  j | } | j |  nW | |  j k r|  j } n< |  j   } | |  j | <t |  |  |  j | <| j |  d  } q@ | d  k r/t | | |
   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 | | <q(d  | | <q@ |  j |	 | | |
  }	 q@ W|  j#   |	 rB|	  d  S)Nr   startrH   c             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_levelmor   Zoptvalr"   r"   r#   r     s    		
,
							
zRawConfigParser._readc             C   s   |  j  |  j f } t j | f |  j j    } xt | D]l \ } } x] | j   D]O \ } } t | t  r d j |  j	   } |  j
 j |  | | |  | | <qP Wq7 Wd  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   V  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   b  s    zRawConfigParser._handle_errorc             C   s   i  } y |  j  | } Wn- t k
 rF | |  j k rB t |   Yn Xi  } | r xE | j   D]7 \ } } | d  k	 r t |  } | | |  j |  <q` Wt | | |  j  S)N)	r   rY   r   r   rk   r   rV   	_ChainMapr   )r    r)   rq   ZsectiondictZvardictr   r>   r"   r"   r#   r   h  s    zRawConfigParser._unify_valuesc             C   s6   | 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   se   t  | t  s t d   t  | t  s6 t d   |  j sF | ra t  | t  sa 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)   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   )<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   r"   r"   )r   r#   r   .  st   		!!$		%
zc                   s@   e  Z d  Z e   Z d   f d d  Z   f d d   Z   S)r   Nc                s0   |  j  d | d |  t   j | | |  d  S)Nr3   r>   )r   r   r   )r    r)   r3   r>   )r   r"   r#   r     s    zConfigParser.setc                s$   |  j  d |  t   j |  d  S)Nr)   )r   r   r   )r    r)   )r   r"   r#   r     s    zConfigParser.add_section)r%   r&   r'   r   r   r   r   r"   r"   )r   r#   r     s   	c                   s"   e  Z d  Z   f d d   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.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     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 d d Z d S)r   c             C   se   | |  _  | |  _ xL | j D]A } d | } t j |  j d t | |  } t |  | |  q Wd  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   s2   |  j  j d | d |  |  j  j |  j | |  S)Nr3   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   s9   |  j  |  j j k r( |  j j |  j   S|  j j   Sd  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.nameNrQ   Frq   r  c         
   K   s7   | s |  j  j } | |  j | d | d | d | | S)NrQ   rq   rR   )r  rT   r  )r    r3   rR   rQ   rq   r  r   r"   r"   r#   rT     s    
zSectionProxy.get)r%   r&   r'   r   r$   r   r   r   r   r   r   r  r@   rB   r   rT   r"   r"   r"   r#   r     s   	c               @   sg   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   s{   | |  _  i  |  _ xb t |  j   D]Q } |  j j |  } | s" t t |  j  |   r] q" d  |  j | j d  <q" Wd  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 | } Wn0 t  k
 r@ t d j | t |     Yn X| d k rY t d   | |  j | <t j |  j j d | } | | _	 t
 |  j | |  x? |  j j   D]. } t j | j d | } t
 | | |  q Wd  S)NrT   zIncompatible key: {} (type: {})z)Incompatible key: cannot use "" as a namer   r  )r   r6   r-   typer  rn   ro   r  r   	converterr  valuesrT   )r    r   r>   kfuncproxyr  r"   r"   r#   r     s    		zConverterMapping.__setitem__c             C   s   y d | p d  } Wn t  k
 r4 t |   Yn X|  j | =xR t j |  j f |  j j    D]/ } y t | |  Wqa t k
 r wa Yqa Xqa Wd  S)NrT   )	r   rY   r  r   r   r  r  delattrr   )r    r   r  instr"   r"   r#   r   )  s    
(zConverterMapping.__delitem__c             C   s   t  |  j  S)N)iterr  )r    r"   r"   r#   r   7  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   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>   sP   						
+	HJ&  qF