B
    j V                 @   s   d dl Z d dlZd dlmZ ddddddd	d
ddddddgZddddge ZxeD ]Zee ee e< qRW dd Z	d"ddZ
dd ZG dd deZeZG dd deZeZG d d de jZG d!d de jZdS )#    N)izipZregister_dialectZunregister_dialectZget_dialectZlist_dialectsZfield_size_limitZDialectexcelZ	excel_tabZSnifferZ	QUOTE_ALLZQUOTE_MINIMALQUOTE_NONNUMERICZ
QUOTE_NONEErrorreaderwriter
DictReader
DictWriterc             C   sF   | d krdS t | tr"| ||S t | tjr0nt | tsBt| } | S )N )
isinstanceunicodeencodenumbersNumberstr)sencodingerrors r   -lib/python3.7/site-packages/unicodecsv/py2.py
_stringify"   s    

r   strictc          
      sN   y fddt | D S  tk
rH } ztt|W d d }~X Y nX d S )Nc                s   g | ]}t | qS r   )r   ).0r   )r   r   r   r   
<listcomp>0   s    z#_stringify_list.<locals>.<listcomp>)iter	TypeErrorcsvr   r   )lr   r   er   )r   r   r   _stringify_list.   s    r   c             C   s8   | d krd S t | tttfr | S t | tr4| |S | S )N)r   r   intfloatr   decode)r   r   r   r   r   
_unicodify5   s    

r#   c               @   s>   e Zd ZdZejddfddZdd Zdd	 Ze	d
d Z
dS )UnicodeWriteruQ  
    >>> import unicodecsv
    >>> from cStringIO import StringIO
    >>> f = StringIO()
    >>> w = unicodecsv.writer(f, encoding='utf-8')
    >>> w.writerow((u'é', u'ñ'))
    >>> f.seek(0)
    >>> r = unicodecsv.reader(f, encoding='utf-8')
    >>> row = r.next()
    >>> row[0] == u'é'
    True
    >>> row[1] == u'ñ'
    True
    zutf-8r   c             O   s&   || _ tj||f||| _|| _d S )N)r   r   r   encoding_errors)selffdialectr   r   argskwdsr   r   r   __init__N   s    zUnicodeWriter.__init__c             C   s   | j t|| j| jS )N)r   writerowr   r   r%   )r&   rowr   r   r   r,   T   s    zUnicodeWriter.writerowc             C   s   x|D ]}|  | qW d S )N)r,   )r&   Zrowsr-   r   r   r   	writerowsX   s    
zUnicodeWriter.writerowsc             C   s   | j jS )N)r   r(   )r&   r   r   r   r(   \   s    zUnicodeWriter.dialectN)__name__
__module____qualname____doc__r   r   r+   r,   r.   propertyr(   r   r   r   r   r$   ?   s
   r$   c               @   s>   e Zd ZdddZdd Zdd	 Zed
d Zedd ZdS )UnicodeReaderNutf-8r   c                sp   dddddddg |d kr:t  fdd	| D s:tj}tj||f|| _|| _|| _t| jj	tj
@ | _d S )
NZ	delimiterZdoublequoteZ
escapecharZlineterminatorZ	quotecharquotingZskipinitialspacec                s   g | ]}| kqS r   r   )r   Zkwd_name)format_paramsr   r   r   k   s   z*UnicodeReader.__init__.<locals>.<listcomp>)anykeysr   r   r   r   r%   boolr(   r6   r   _parse_numerics)r&   r'   r(   r   r   r*   r   )r7   r   r+   c   s    zUnicodeReader.__init__c                sV   | j  }| j | jt| jr<t fdd|D S  fdd|D S d S )Nc                s&   g | ]}t |r|n
| qS r   )r   )r   value)r   r%   float_unicode_r   r   r   {   s   z&UnicodeReader.next.<locals>.<listcomp>c                s   g | ]}| qS r   r   )r   r<   )r   r%   r>   r   r   r      s   )r   nextr   r%   r   r;   r!   )r&   r-   r   )r   r%   r=   r>   r   r?   t   s    
zUnicodeReader.nextc             C   s   | S )Nr   )r&   r   r   r   __iter__   s    zUnicodeReader.__iter__c             C   s   | j jS )N)r   r(   )r&   r   r   r   r(      s    zUnicodeReader.dialectc             C   s   | j jS )N)r   line_num)r&   r   r   r   rA      s    zUnicodeReader.line_num)Nr5   r   )	r/   r0   r1   r+   r?   r@   r3   r(   rA   r   r   r   r   r4   b   s
   
r4   c               @   s"   e Zd ZdZdddZd	d
 ZdS )r	   u&  
    >>> from cStringIO import StringIO
    >>> f = StringIO()
    >>> w = DictWriter(f, ['a', u'ñ', 'b'], restval=u'î')
    >>> w.writerow({'a':'1', u'ñ':'2'})
    >>> w.writerow({'a':'1', u'ñ':'2', 'b':u'ø'})
    >>> w.writerow({'a':u'é', u'ñ':'2'})
    >>> f.seek(0)
    >>> r = DictReader(f, fieldnames=['a', u'ñ'], restkey='r')
    >>> r.next() == {'a': u'1', u'ñ':'2', 'r': [u'î']}
    True
    >>> r.next() == {'a': u'1', u'ñ':'2', 'r': [u'Ã¸']}
    True
    >>> r.next() == {'a': u'Ã©', u'ñ':'2', 'r': [u'Ã®']}
    True
    r
   raiser   utf-8r   c       
      O   sL   || _ tjj| |||||f||	 t||f|||d|	| _|| _d S )N)r   r   )r   r   r	   r+   r$   r   r%   )
r&   csvfile
fieldnamesrestvalZextrasactionr(   r   r   r)   r*   r   r   r   r+      s    zDictWriter.__init__c             C   s    t t| j| j}| | d S )N)dictziprE   r,   )r&   headerr   r   r   writeheader   s    zDictWriter.writeheaderN)r
   rB   r   rC   r   )r/   r0   r1   r2   r+   rJ   r   r   r   r   r	      s
     
c               @   s"   e Zd ZdZd
ddZdd	 ZdS )r   u  
    >>> from cStringIO import StringIO
    >>> f = StringIO()
    >>> w = DictWriter(f, fieldnames=['name', 'place'])
    >>> w.writerow({'name': 'Cary Grant', 'place': 'hollywood'})
    >>> w.writerow({'name': 'Nathan Brillstone', 'place': u'øLand'})
    >>> w.writerow({'name': u'Will ø. Unicoder', 'place': u'éSpandland'})
    >>> f.seek(0)
    >>> r = DictReader(f, fieldnames=['name', 'place'])
    >>> print r.next() == {'name': 'Cary Grant', 'place': 'hollywood'}
    True
    >>> print r.next() == {'name': 'Nathan Brillstone', 'place': u'øLand'}
    True
    >>> print r.next() == {'name': u'Will ø. Unicoder', 'place': u'éSpandland'}
    True
    Nr   utf-8r   c                s   |d k	rt | }tjj| |||||f||	 t||f| |d|	| _|d krttjdst||f|d i|	}
t |
 |
j| _	| j	d k	r fdd| j	D | _
ng | _
t| | _d S )N)r   r   rE   r   c                s   g | ]}t | qS r   )r#   )r   r'   )r   r   r   r      s    z'DictReader.__init__.<locals>.<listcomp>)r   r   r   r+   r4   r   hasattrr?   r   rE   unicode_fieldnamesr#   unicode_restkey)r&   rD   rE   restkeyrF   r(   r   r   r)   r*   r   r   )r   r   r+      s    


zDictReader.__init__c                sJ   t j|  t fddt| j| jD } | j}|rF||| j	< |S )Nc             3   s   | ]\}}| | fV  qd S )Nr   )r   Zstr_keyZuni_key)r-   r   r   	<genexpr>   s    z"DictReader.next.<locals>.<genexpr>)
r   r   r?   rG   r   rE   rM   getrO   rN   )r&   resultrestr   )r-   r   r?      s    
zDictReader.next)NNNr   rK   r   )r/   r0   r1   r2   r+   r?   r   r   r   r   r      s    
)r   )r   r   	itertoolsr   Zpass_throughs__all__Zpropgetattrglobalsr   r   r#   objectr$   r   r4   r   r	   r   r   r   r   r   <module>   s@   


 * 