add-determinism 0.7.3

RPM buildroot helper to strip nondeterministic bits in files
Documentation
f

��_f�c@s�ddlmZddlmZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZgd�Ze
ZdZdZGdd�de�ZGd	d
�d
e�ZGdd�de�ZGd
d�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�Ze�ZGdd�d�ZGdd �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'dS)/�)�MutableMapping)�ChainMapN)�NoSectionError�DuplicateOptionError�DuplicateSectionError�
NoOptionError�InterpolationError�InterpolationDepthError�InterpolationMissingOptionError�InterpolationSyntaxError�ParsingError�MissingSectionHeaderError�ConfigParser�SafeConfigParser�RawConfigParser�
Interpolation�BasicInterpolation�ExtendedInterpolation�LegacyInterpolation�SectionProxy�ConverterMapping�DEFAULTSECT�MAX_INTERPOLATION_DEPTHZDEFAULTi
c@s"eZdZddd�Zdd�ZeZdS)�Error�cCs||_t�||�dS�N)�message�	Exception�__init__)�self�msg�r �%/usr/lib64/python3.10/configparser.pyr�szError.__init__cC�|jSr)r�rr r r!�__repr__��zError.__repr__N)r)�__name__�
__module__�__qualname__rr$Z__str__r r r r!r�s
rc@�eZdZdd�ZdS)rcCs$t�|d|f�||_|f|_dS)NzNo section: %r)rr�section�args�rr*r r r!r�szNoSectionError.__init__N�r&r'r(rr r r r!r��rc@�eZdZddd�ZdS)rNcCs�t|�dg}|durRdt|�g}|dur8|�d�|��|�d�|�|�|}n|�dd�t�|d�|��||_||_	||_
|||f|_dS)N� already exists�While reading from � [line {0:2d}]z
: section rzSection r)�repr�append�format�extend�insertrr�joinr*�source�linenor+)rr*r9r:rrr r r!r�s

zDuplicateSectionError.__init__�NNr-r r r r!r�src@r/)rNcCs�t|�dt|�dg}|durZdt|�g}|dur@|�d�|��|�d�|�|�|}n|�dd�t�|d�|��||_||_	||_
||_||||f|_dS)	Nz in section r0r1r2z	: option rzOption r)
r3r4r5r6r7rrr8r*�optionr9r:r+)rr*r<r9r:rrr r r!r�s"�

zDuplicateOptionError.__init__r;r-r r r r!r�src@r))rcCs.t�|d||f�||_||_||f|_dS)NzNo option %r in section: %r�rrr<r*r+)rr<r*r r r!r�s�zNoOptionError.__init__Nr-r r r r!r�r.rc@r))rcCs(t�||�||_||_|||f|_dSrr=)rr<r*rr r r!rszInterpolationError.__init__Nr-r r r r!r�r.rc@r))r	cCs8d�||||�}t�||||�||_||||f|_dS)Nz�Bad value substitution: option {!r} in section {!r} contains an interpolation key {!r} which is not a valid option name. Raw value: {!r})r5rr�	referencer+)rr<r*�rawvalr>rr r r!rs�z(InterpolationMissingOptionError.__init__Nr-r r r r!r	r.r	c@seZdZdS)r
N)r&r'r(r r r r!r
sr
c@r))rcCs0d�||t|�}t�||||�|||f|_dS)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})r5rrrr+)rr<r*r?rr r r!rs�z InterpolationDepthError.__init__Nr-r r r r!rr.rc@s8eZdZd	dd�Zedd��Zejdd��Zdd�ZdS)
rNcCsT|r|rtd��n|s$|s$td��n|r,|}t�|d|�||_g|_|f|_dS)Nz:Cannot specify both `filename' and `source'. Use `source'.z%Required argument `source' not given.z"Source contains parsing errors: %r)�
ValueErrorrrr9�errorsr+)rr9�filenamer r r!r,s

zParsingError.__init__cCstjdtdd�|jS�NzSThe 'filename' attribute will be removed in future versions.  Use 'source' instead.��Z
stacklevel��warnings�warn�DeprecationWarningr9r#r r r!rB;�
�zParsingError.filenamecCstjdtdd�||_dSrCrF�r�valuer r r!rBErJcCs*|j�||f�|jd||f7_dS)Nz
	[line %2d]: %s)rAr4r)rr:�liner r r!r4O�zParsingError.appendr;)r&r'r(r�propertyrBZsetterr4r r r r!r)s

	
	rc@r))rcCs8t�|d|||f�||_||_||_|||f|_dS)Nz7File contains no section headers.
file: %r, line: %d
%r)rrr9r:rMr+)rrBr:rMr r r!rWs��z"MissingSectionHeaderError.__init__Nr-r r r r!rTr.rc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
rcC�|Srr )r�parserr*r<rL�defaultsr r r!�
before_getkr%zInterpolation.before_getcCrPrr �rrQr*r<rLr r r!�
before_setnr%zInterpolation.before_setcCrPrr rTr r r!�before_readqr%zInterpolation.before_readcCrPrr rTr r r!�before_writetr%zInterpolation.before_writeN)r&r'r(rSrUrVrWr r r r!rhsrc@�.eZdZe�d�Zdd�Zdd�Zdd�ZdS)	rz
%\(([^)]+)\)sc	C�$g}|�||||||d�d�|�S�N�r��_interpolate_somer8�rrQr*r<rLrRZLr r r!rS��zBasicInterpolation.before_getcC�<|�dd�}|j�d|�}d|vr8td||�d�f��|S)Nz%%r�%�1invalid interpolation syntax in %r at position %d��replace�_KEYCRE�subr@�find�rrQr*r<rLZ	tmp_valuer r r!rU���zBasicInterpolation.before_setc
Csh|j||d|d�}|tkr&t|||��|�rd|�d�}	|	dkrL|�|�dS|	dkrr|�|d|	��||	d�}|dd�}
|
dkr�|�d�|dd�}q&|
dk�rP|j�|�}|dur�t||d|��|�|�	d��}||�
�d�}z||}
Wn$t�yt||||�d�Yn0d|
v�rD|�
||||
|||d�n|�|
�q&t||d	|f��q&dS)
NT��raw�fallbackrarr[rDz(�'bad interpolation variable reference %rz/'%%' must be followed by '%%' or '(', found: %r)�getrrrgr4re�matchr
�optionxform�group�end�KeyErrorr	r])rrQr<�accum�restr*�map�depthr?�p�c�mZvar�vr r r!r]�sT



���

���z$BasicInterpolation._interpolate_someN�	r&r'r(�re�compilererSrUr]r r r r!rxs
rc@rX)	rz
\$\{([^}]+)\}c	CrYrZr\r^r r r!rS�r_z ExtendedInterpolation.before_getcCr`)Nz$$r�$rbrcrhr r r!rU�riz ExtendedInterpolation.before_setcCs�|j||d|d�}|tkr&t|||��|�r�|�d�}	|	dkrL|�|�dS|	dkrr|�|d|	��||	d�}|dd�}
|
dkr�|�d�|dd�}q&|
dk�r�|j�|�}|dur�t||d|��|�d��	d	�}||�
�d�}|}
|}zrt|�dk�r|�|d�}||}nHt|�dk�rR|d}
|�|d�}|j|
|dd
�}nt||d|f��Wn0t
ttf�y�t|||d	�|��d�Yn0d|v�r�|�|||||
t|j|
dd
��|d�n|�|�q&t||d|f��q&dS)
NTrjrrr[rDZ{rm�:)rkzMore than one ':' found: %rz-'$' must be followed by '$' or '{', found: %r)rnrrrgr4reror
rqZsplitrr�lenrprsrrr	r8r]�dict�items)rrQr<rtrur*rvrwr?rxryrzZpathZsectZoptr{r r r!r]�sn



�
���
���z'ExtendedInterpolation._interpolate_someNr|r r r r!r�s
rc@s2eZdZe�d�Zdd�Zdd�Zedd��Z	dS)	rz%\(([^)]*)\)s|.c

Cs�|}t}|r�|d8}|r�d|vr�tj|j|d�}|j�||�}z||}Wn:ty�}	z"t||||	jd�d�WYd}	~	n
d}	~	00q|r�d|vr�t	|||��|S)Nr[z%()rQr)
r�	functools�partial�_interpolation_replacererfrsr	r+r)
rrQr*r<rL�varsr?rwrd�er r r!rSs*���zLegacyInterpolation.before_getcCrPrr rTr r r!rU$r%zLegacyInterpolation.before_setcCs(|�d�}|dur|��Sd|�|�S)Nr[z%%(%s)s)rqrp)rorQZsr r r!r�'s
z*LegacyInterpolation._interpolation_replaceN)
r&r'r(r}r~rerSrUZstaticmethodr�r r r r!r
s

rc
s2eZdZdZdZdZe�Ze�	eej
�Ze�	ejdd�ej
�Z
e�	ejdd�ej
�Ze�	d�Zddddddddd	�Zd
edfddd
ddeeed
�dd�Zdd�Zdd�Zdd�Zdd�Zdd�Zdcdd�Zdddd�Zdedd �Zdfd"d#�Zdgd$d%�Zdd
ed&�d'd(�Zd)d*�Z dd
ed&�d+d,�Z!dd
ed&�d-d.�Z"dd
ed&�d/d0�Z#dd
ed&�d1d2�Z$edd
f�fd3d4�	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)jrz�
        \[                                 # [
        (?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=|:�Zdelimz\STF)Z1ZyesZtrueZonZ0ZnoZfalseZoffN�z=r�)z#z;)�
delimiters�comment_prefixes�inline_comment_prefixes�strict�empty_lines_in_values�default_section�
interpolation�
convertersc
Cs<||_|��|_|��|_t|�|_|��|_t||	�|j|	<t|�|_|dkrd|rZ|j	n|j
|_nNd�dd�|D��}|r�t
�|jj|d�t
j�|_nt
�|jj|d�t
j�|_t|p�d�|_t|p�d�|_||_||_||_|	|_|
|_|jtur�|j|_|jdu�rt�|_|tu�r(|j�|�|�r8|�|�dS)Nr�z|css|]}t�|�VqdSr)r}Zescape)�.0�dr r r!Z	<genexpr>j�z+RawConfigParser.__init__.<locals>.<genexpr>r�r )�_dict�	_sections�	_defaultsr�_converters�_proxiesrZtuple�_delimiters�	OPTCRE_NV�OPTCRE�_optcrer8r}r~�_OPT_NV_TMPLr5�VERBOSE�	_OPT_TMPL�_comment_prefixes�_inline_comment_prefixes�_strict�_allow_no_value�_empty_lines_in_valuesr��_interpolation�_UNSET�_DEFAULT_INTERPOLATIONr�update�_read_defaults)
rrRZ	dict_typeZallow_no_valuer�r�r�r�r�r�r�r�r�r r r!rYs@




��

zRawConfigParser.__init__cCr"r)r�r#r r r!rR�r%zRawConfigParser.defaultscCst|j���Sr)�listr��keysr#r r r!�sections��zRawConfigParser.sectionscCsJ||jkrtd|��||jvr(t|��|��|j|<t||�|j|<dS)NzInvalid section name: %r)r�r@r�rr�rr�r,r r r!�add_section�s

zRawConfigParser.add_sectioncCs
||jvSr)r�r,r r r!�has_section�szRawConfigParser.has_sectioncCsHz|j|��}Wnty.t|�d�Yn0|�|j�t|���Sr)r��copyrsrr�r�r�r�)rr*Zoptsr r r!�options�szRawConfigParser.optionsc	Cs�t|tttjf�r|g}g}|D]x}z<t||d��}|�||�Wd�n1sT0YWntyvYq Yn0t|tj�r�t�|�}|�	|�q |S)N)�encoding)
�
isinstance�strZbytes�osZPathLikeZopen�_readZOSErrorZfspathr4)rZ	filenamesr�Zread_okrB�fpr r r!�read�s.

zRawConfigParser.readcCs:|dur*z
|j}Wnty(d}Yn0|�||�dS)Nz<???>)�name�AttributeErrorr�)rZfr9r r r!�	read_file�s

zRawConfigParser.read_file�<string>cCst�|�}|�||�dSr)�ioZStringIOr�)rZstringr9Zsfiler r r!�read_string�s
zRawConfigParser.read_string�<dict>c
Cs�t�}|��D]�\}}t|�}z|�|�Wn&ttfyR|jrN||vrN�Yn0|�|�|��D]`\}}|�t|��}|dur�t|�}|jr�||f|vr�t	|||��|�||f�|�|||�qfqdSr)
�setr�r�r�rr@r��addrpr)rZ
dictionaryr9�elements_addedr*r��keyrLr r r!�	read_dict�s"

zRawConfigParser.read_dictcCs"tjdtdd�|j||d�dS)NzRThis method will be removed in future versions.  Use 'parser.read_file()' instead.rDrE)r9)rGrHrIr�)rr�rBr r r!�readfp�s
�zRawConfigParser.readfp�rkr�rlcCs�z|�||�}Wn&ty6|tur*�n|YSYn0|�|�}z||}Wn.ty||turpt||��n|YSYn0|s�|dur�|S|j�|||||�Sr)�
_unify_valuesrr�rprsrr�rS)rr*r<rkr�rlr�rLr r r!rn�s$
�zRawConfigParser.getcKs||j||fi|���Sr)rn)rr*�convr<�kwargsr r r!�_get"r%zRawConfigParser._getc	KsDz|j|||f||d�|��WSttfyB|tur:�|YS0)N)rkr�)r�rrr�)rr*r<r�rkr�rlr�r r r!�	_get_conv%s�zRawConfigParser._get_convcK�|j||tf|||d�|��S�Nr�)r�Zint�rr*r<rkr�rlr�r r r!�getint0�
��zRawConfigParser.getintcKr�r�)r�Zfloatr�r r r!�getfloat5r�zRawConfigParser.getfloatcKs |j|||jf|||d�|��Sr�)r��_convert_to_booleanr�r r r!�
getboolean:s
��zRawConfigParser.getbooleancs��turt���S�j���z���j��Wn$tyT��jkrPt	���Yn0t
����}|r�|��D]\}}|���|�<qn���fdd��|r��fdd���fdd�|D�S)Ncs�j���|�|��Sr)r�rS�r<)r�r*rr r!�<lambda>Ws�z'RawConfigParser.items.<locals>.<lambda>cs�|Srr r�)r�r r!r�Zr�csg|]}|�|�f�qSr r )r�r<)�value_getterr r!Z
<listcomp>[r�z)RawConfigParser.items.<locals>.<listcomp>)
r��superr�r�r�r�r�rsr�rr�r�rp)rr*rkr�Z	orig_keysr�rL�Z	__class__)r�r*rr�r!r�?s 


zRawConfigParser.itemscCs.|��D]}||}||=||fSt�dSr)r�rs�rr�rLr r r!�popitem]s
zRawConfigParser.popitemcCs|��Sr)�lower)rZ	optionstrr r r!rpjr%zRawConfigParser.optionxformcCsR|r||jkr"|�|�}||jvS||jvr0dS|�|�}||j|vpP||jvS)NF)r�rpr�r�)rr*r<r r r!�
has_optionms



�zRawConfigParser.has_optioncCsj|r|j�||||�}|r$||jkr,|j}n,z|j|}WntyVt|�d�Yn0|||�|�<dSr)r�rUr�r�r�rsrrp)rr*r<rL�sectdictr r r!r�{s�zRawConfigParser.setcCsh|rd�|jd�}n
|jd}|jr>|�||j|j��|�|jD]}|�|||j|��|�qDdS)Nz {} r)r5r�r��_write_sectionr�r�r�)rr�Zspace_around_delimitersr�r*r r r!�write�s


�
�zRawConfigParser.writecCsx|�d�|��|D]T\}}|j�||||�}|dus<|jsR|t|��dd�}nd}|�d�||��q|�d�dS)Nz[{}]
�
z
	rz{}{}
)r�r5r�rWr�r�rd)rr�Zsection_nameZ
section_itemsZ	delimiterr�rLr r r!r��s�zRawConfigParser._write_sectioncCsb|r||jkr|j}n,z|j|}Wnty@t|�d�Yn0|�|�}||v}|r^||=|Sr)r�r�r�rsrrp)rr*r<r��existedr r r!�
remove_option�s
zRawConfigParser.remove_optioncCs"||jv}|r|j|=|j|=|Sr)r�r�)rr*r�r r r!�remove_section�s

zRawConfigParser.remove_sectioncCs&||jkr|�|�st|��|j|Sr)r�r�rsr��rr�r r r!�__getitem__�szRawConfigParser.__getitem__cCsX||vr|||urdS||jkr.|j��n||jvrF|j|��|�||i�dSr)r�r�Zclearr�r�r�r r r!�__setitem__�s

zRawConfigParser.__setitem__cCs2||jkrtd��|�|�s$t|��|�|�dS)Nz"Cannot remove the default section.)r�r@r�rsr�r�r r r!�__delitem__�s


zRawConfigParser.__delitem__cCs||jkp|�|�Sr)r�r�r�r r r!�__contains__�r%zRawConfigParser.__contains__cCst|j�dS)Nr[)r�r�r#r r r!�__len__�r%zRawConfigParser.__len__cCst�|jf|j���Sr)�	itertools�chainr�r�r�r#r r r!�__iter__��zRawConfigParser.__iter__cCs t�}d}d}d}d}d}d}	t|dd�D�]�\}}
tj}dd�|jD�}|tjkr�|r�i}
|��D]T\}}|
�||d�}|dkr�qd||
|<|dks�|dkrd|
|d��rdt||�}qd|
}qJ|j	D]}|
�
��|�r�d}q�q�|tjkr�d}|
d|��
�}|�sN|j�rF|du�rL|du�rL|�rL||du�rL||�
d�q*tj}q*|j�|
�}|�rh|��nd}|du�r�|�r�||k�r�||�
|�q*|}|j�|�}|�r<|�d�}||jv�r�|j�r�||v�r�t|||��|j|}|�|�n@||jk�r
|j}n,|��}||j|<t||�|j|<|�|�d}q*|du�rTt|||
��q*|j�|�}|�r�|�d	d
d�\}}}|�s�|�|	|||
�}	|� |�!��}|j�r�||f|v�r�t"||||��|�||f�|du�r�|�
�}|g||<nd||<q*|�|	|||
�}	q*|�#�|	�r|	�dS)Nrr[)�startcSsi|]
}|d�qS)�����r )r�rxr r r!Z
<dictcomp>�r�z)RawConfigParser._read.<locals>.<dictcomp>r�rZheaderr<�virL)$r�Z	enumerate�sysZmaxsizer�r�rgZisspaceZminr�ZstripZ
startswithr�r4�NONSPACECREZsearchr��SECTCRErorqr�r�rr�r�r�r�rr�rr��
_handle_errorrp�rstripr�_join_multiline_values)rr��fpnamer�ZcursectZsectnameZoptnamer:Zindent_levelr�rMZ
comment_startZinline_prefixesZ
next_prefixesZprefixZindexrLZfirst_nonspaceZcur_indent_levelZmor�Zoptvalr r r!r��s� 


��
��
�




��

zRawConfigParser._readcCsr|j|jf}t�|f|j���}|D]H\}}|��D]6\}}t|t�rTd�|��	�}|j
�||||�||<q4q$dS)Nr�)r�r�r�r�r�r�r�r�r8r�r�rV)rrRZall_sectionsr*r�r�Zvalr r r!r�[s�
�z&RawConfigParser._join_multiline_valuescCs&|��D]\}}||j|�|�<qdSr)r�r�rp)rrRr�rLr r r!r�gszRawConfigParser._read_defaultscCs |st|�}|�|t|��|Sr)rr4r3)rZexcr�r:rMr r r!r�mszRawConfigParser._handle_errorcCs�i}z|j|}Wn&ty8||jkr4t|�d�Yn0i}|rr|��D]&\}}|durbt|�}|||�|�<qJt|||j�Sr)	r�rsr�rr�r�rp�	_ChainMapr�)rr*r�ZsectiondictZvardictr�rLr r r!r�ss
zRawConfigParser._unify_valuescCs(|��|jvrtd|��|j|��S)NzNot a boolean: %s)r��BOOLEAN_STATESr@rKr r r!r��sz#RawConfigParser._convert_to_booleanr)r*r<rLcCsDt|t�std��t|t�s$td��|jr.|r@t|t�s@td��dS)Nzsection names must be stringszoption keys must be stringszoption values must be strings)r�r��	TypeErrorr��rr*r<rLr r r!�_validate_value_types�s



z%RawConfigParser._validate_value_typescCr"r)r�r#r r r!r��r�zRawConfigParser.convertersrr)r�)r�rr)T)>r&r'r(Z
_SECT_TMPLr�r�rr�r}r~r�r�r5r�r�r�r��
_default_dictrr�rrRr�r�r�r�r�r�r�r�r�rnr�r�r�r�r�r�r�rpr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rOr��
__classcell__r r r�r!r0s�

���(	




	%����




zrcs8eZdZe�Zd�fdd�	Z�fdd�Zdd�Z�ZS)	r
Ncs"|j||d�t��|||�dS�N)r<rL)r�r�r�r�r�r r!r��szConfigParser.setcs|j|d�t��|�dS)N)r*)r�r�r�r,r�r r!r��szConfigParser.add_sectioncCs6z(|j}t�|_|�|j|i�W||_n||_0dSr)r�rr�r�)rrRZhold_interpolationr r r!r��s
zConfigParser._read_defaultsr)	r&r'r(rr�r�r�r�rr r r�r!r
�sr
cseZdZ�fdd�Z�ZS)rcs&t�j|i|��tjdtdd�dS)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.rDrE)r�rrGrHrI)rr+r�r�r r!r�s
�zSafeConfigParser.__init__)r&r'r(rrr r r�r!r�r.rc@s�eZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zedd��Z
edd��Zddddd�dd�ZdS)rcCsF||_||_|jD].}d|}tj|jt||�d�}t|||�qdS)Nrn��_impl)�_parser�_namer�r�r�rn�getattr�setattr)rrQr�r�r��getterr r r!r�s
zSectionProxy.__init__cCsd�|j�S)Nz
<Section: {}>)r5rr#r r r!r$�r%zSectionProxy.__repr__cCs(|j�|j|�st|��|j�|j|�Sr)rr�rrsrnr�r r r!r��szSectionProxy.__getitem__cCs"|jj||d�|j�|j||�Sr)rr�r�rr�r r r!r��rNzSectionProxy.__setitem__cCs,|j�|j|�r |j�|j|�s(t|��dSr)rr�rr�rsr�r r r!r��s�zSectionProxy.__delitem__cCs|j�|j|�Sr)rr�rr�r r r!r��r%zSectionProxy.__contains__cCst|���Sr)r��_optionsr#r r r!r��r%zSectionProxy.__len__cCs|����Sr)r	r�r#r r r!r��r%zSectionProxy.__iter__cCs&|j|jjkr|j�|j�S|j��Sr)rrr�r�rRr#r r r!r	�szSectionProxy._optionscCr"r)rr#r r r!rQr�zSectionProxy.parsercCr"r)rr#r r r!r�r�zSectionProxy.nameNF)rkr�rcKs(|s|jj}||j|f|||d�|��Sr�)rrnr)rr<rlrkr�rr�r r r!rns
��zSectionProxy.getr)r&r'r(rr$r�r�r�r�r�r�r	rOrQr�rnr r r r!r�s 	

�rc@sFeZdZe�d�Zdd�Zdd�Zdd�Zdd	�Z	d
d�Z
dd
�ZdS)rz^get(?P<name>.+)$cCsR||_i|_t|j�D]6}|j�|�}|rtt|j|��s<qd|j|�d�<qdS)Nr�)r�_dataZdir�	GETTERCREroZcallablerrq)rrQrrzr r r!r%szConverterMapping.__init__cCs
|j|Sr)r
r�r r r!r�.r%zConverterMapping.__getitem__c	Cs�zd|}Wn&ty2td�|t|����Yn0|dkrDtd��||j|<tj|jj|d�}||_	t
|j||�|j��D] }tj|j|d�}t
|||�q~dS)NrnzIncompatible key: {} (type: {})z)Incompatible key: cannot use "" as a name)r�r)
r�r@r5Ztyper
r�r�rr�Z	converterr�valuesrn)rr�rL�kZfuncZproxyrr r r!r�1s�
zConverterMapping.__setitem__c	Csxzd|p
d}Wnty*t|��Yn0|j|=t�|jf|j���D](}zt||�WqJtyrYqJYqJ0dS)Nrn)	r�rsr
r�r�rrZdelattrr�)rr�r
Zinstr r r!r�AszConverterMapping.__delitem__cC�
t|j�Sr)Ziterr
r#r r r!r�Or%zConverterMapping.__iter__cCrr)r�r
r#r r r!r�Rr%zConverterMapping.__len__N)r&r'r(r}r~rrr�r�r�r�r�r r r r!rs
	r)(Zcollections.abcrZcollectionsrr�r�r�r�r�r}r�rGZ__all__r�r�rrrrrrrrrr	r
rrrZobjectr�rrrrrr
rrrr r r r!Z<module>�sJ	
	

+HJ&| 
F