U
    HaX                     @   sL   d Z ddgZdZG dd deZG dd deZG dd deZdd	 Zd
S )ze brain-dead simple parser for ini-style files.
(C) Ronny Pfannschmidt, Holger Krekel -- MIT licensed
	IniConfig
ParseErrorz#;c                   @   s   e Zd Zdd Zdd ZdS )r   c                 C   s&   t | ||| || _|| _|| _d S N)	Exception__init__pathlinenomsg)selfr   r   r    r
   6/tmp/pip-unpacked-wheel-b29rstwd/iniconfig/__init__.pyr   
   s    zParseError.__init__c                 C   s   d| j | jd | jf S )Nz	%s:%s: %s   )r   r   r   r	   r
   r
   r   __str__   s    zParseError.__str__N)__name__
__module____qualname__r   r   r
   r
   r
   r   r   	   s   c                   @   sB   e Zd Zdd Zdd ZdefddZdd	 Zd
d Zdd Z	dS )SectionWrapperc                 C   s   || _ || _d S r   )configname)r	   r   r   r
   r
   r   r      s    zSectionWrapper.__init__c                 C   s   | j | j|S r   r   lineofr   r	   r   r
   r
   r   r      s    zSectionWrapper.lineofNc                 C   s   | j j| j|||dS )N)convertdefault)r   getr   )r	   keyr   r   r
   r
   r   r      s     zSectionWrapper.getc                 C   s   | j j| j | S r   )r   sectionsr   )r	   r   r
   r
   r   __getitem__    s    zSectionWrapper.__getitem__c                 #   s:    j j jg } fdd}t||dD ]
}|V  q*d S )Nc                    s    j  j| S r   r   r   r   r
   r   r   &   s    z'SectionWrapper.__iter__.<locals>.lineofr   )r   r   r   r   sorted)r	   sectionr   r   r
   r   r   __iter__#   s    zSectionWrapper.__iter__c                 c   s   | D ]}|| | fV  qd S r   r
   r   r
   r
   r   items+   s    zSectionWrapper.items)
r   r   r   r   r   strr   r   r!   r"   r
   r
   r
   r   r      s   r   c                   @   s^   e Zd ZdddZdd Zdd Zdd	 Zdd
dZdefddZ	dd Z
dd Zdd ZdS )r   Nc           	      C   s   t || _|d kr<t| j}z| t|}W 5 |  X n| |d}i | _i | _|D ]\}}}}|d kr|| 	|d || j||f< |d kr|| jkr| 	|d|f  i | j|< q\|| j| kr| 	|d|f  || j| |< q\d S )NTzno section header definedzduplicate section %rzduplicate name %r)
r#   r   openclose_parseiter
splitlines_sourcesr   _raise)	r	   r   dataftokensr   r    r   valuer
   r
   r   r   1   s(    


zIniConfig.__init__c                 C   s   t | j||d S r   )r   r   )r	   r   r   r
   r
   r   r*   L   s    zIniConfig._raisec                 C   s   g }d }t |D ]\}}| ||\}}|d k	rL|d k	rL|||||f q|d k	r|d kr|sl| |d |}|||d d f q|d kr|d k	r|s| |d | }|dd  \}	}
|	d kr| |d |
rd|
|f }||d d |f  q|S )Nzempty section namezunexpected value continuationz%s
%s)	enumerate
_parselineappendr*   pop)r	   Z	line_iterresultr    r   liner   r+   last	last_nameZ	last_datar
   r
   r   r&   O   s,    zIniConfig._parsec                 C   s  t |rd}n| }|sdS |d dkrr|}tD ]}||d  }q2|d dkrf|dd d fS d | fS |d  sz"|dd\}}d	|krt W nN tk
r   z|d	d\}}W n$ tk
r   | |d
|  Y nX Y nX | | fS d | fS d S )N )NN    [r0   ]r   =:zunexpected line: %r)iscommentlinerstripCOMMENTCHARSsplitstripisspace
ValueErrorr*   )r	   r6   r   Zreallinecr   r.   r
   r
   r   r2   k   s0    
zIniConfig._parselinec                 C   s$   | j ||f}|d k	r |d S d S Nr   )r)   r   )r	   r    r   r   r
   r
   r   r      s    zIniConfig.lineofc                 C   s2   z|| j | | W S  tk
r,   | Y S X d S r   )r   KeyError)r	   r    r   r   r   r
   r
   r   r      s    zIniConfig.getc                 C   s   || j krt|t| |S r   )r   rH   r   r   r
   r
   r   r      s    
zIniConfig.__getitem__c                 c   s&   t | j| jdD ]}t| |V  qd S )Nr   )r   r   r   r   r   r
   r
   r   r!      s    zIniConfig.__iter__c                 C   s
   || j kS r   )r   )r	   argr
   r
   r   __contains__   s    zIniConfig.__contains__)N)N)r   r   r   r   r*   r&   r2   r   r#   r   r   r!   rJ   r
   r
   r
   r   r   0   s   
 
c                 C   s   |   d d }|tkS rG   )lstriprA   )r6   rF   r
   r
   r   r?      s    r?   N)	__doc____all__rA   r   r   objectr   r   r?   r
   r
   r
   r   <module>   s   s