U
    [e                     @   s   d Z ddlZddlmZ ddlmZ ddlmZ ddl	m
Z
 dZdej d Zdej Zdej d	 Zd
ZdZd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dS )z
    pyexcel_io.readers.csv_sheet
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    csv file reader

    :copyright: (c) 2014-2022 by Onni Software Ltd.
    :license: New BSD License, see LICENSE for more details
    N)ISheet__z---%s---z%sz---%s:(.*)---z---%s:z%s---%sz
s   s   f   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )CSVMemoryMapIteratorz
    Wrapper class for mmap object

    mmap object does not handle encoding at all. This class
    provide the necessary transcoding for utf-8, utf-16 and utf-32
    c                 C   s   || _ || _d| _t| _|dkr(d| _nn|dkr8d| _n^|dkrHd| _nN|dkr^d| _t| _n8|dkrtd| _t| _n"|d	krd| _t| _ntd
| d S )Nr   utf-8utf-16r   utf-32   )z	utf-32-bez	utf-16-bez	utf-32-lez	utf-16-lezEncoding %s is not supported)_CSVMemoryMapIterator__mmap_obj_CSVMemoryMapIterator__encoding_CSVMemoryMapIterator__countLITTLE_ENDIAN_CSVMemoryMapIterator__endian*_CSVMemoryMapIterator__zeros_left_in_2_row
BIG_ENDIAN	Exception)selfZmmap_objencoding r   ^/var/www/html/services/stratfitenv/lib/python3.8/site-packages/pyexcel_io/readers/csv_sheet.py__init__&   s(    zCSVMemoryMapIterator.__init__c                 C   s   | S Nr   r   r   r   r   __iter__C   s    zCSVMemoryMapIterator.__iter__c                 C   s   | j  }| jdkrH| jdkp&| jdk}|r`|d d }|tkr`t| _n| jtkr`|| jd  }| jtkrr|	 }|
| j}|  jd7  _|dkrt|S )Nr   r   r      r    )r
   readliner   r   BOM_BIG_ENDIANr   r   r   r   rstripdecodeStopIteration)r   lineZ	utf_16_32Z
bom_headerr   r   r   __next__F   s"    



zCSVMemoryMapIterator.__next__c                 C   s   d S r   r   r   r   r   r   close[   s    zCSVMemoryMapIterator.closeN)__name__
__module____qualname____doc__r   r   r"   r#   r   r   r   r   r      s
   r   c                   @   sB   e Zd ZdZdddZdd	 Zd
d Zdd Zdd Zdd Z	dS )CSVSheetReaderzgeneric csv file readerr   TFNc
                 K   sF   || _ || _|| _|| _|| _|| _d | _|| _|| _|	| _	|
| _
d S r   )_native_sheet	_encoding _CSVSheetReader__auto_detect_int"_CSVSheetReader__auto_detect_float _CSVSheetReader__ignore_infinity%_CSVSheetReader__auto_detect_datetime_CSVSheetReader__file_handle_CSVSheetReader__pep_0515_off _CSVSheetReader__ignore_nan_text"_CSVSheetReader__default_float_nan	_keywords)r   Zsheetr   Zauto_detect_floatZignore_infinityZauto_detect_intZauto_detect_datetimeZpep_0515_offignore_nan_textdefault_float_nankeywordsr   r   r   r   b   s    zCSVSheetReader.__init__c                 C   s   t ddS )zreturn me unicde reader for csvz"Please implement get_file_handle()N)NotImplementedErrorr   r   r   r   get_file_handle{   s    zCSVSheetReader.get_file_handlec                 C   s   |   | _tj| jf| jS r   )r8   r/   csvreaderr3   r   r   r   r   row_iterator   s    
zCSVSheetReader.row_iteratorc                 c   s.   |D ]$}|d k	r"|dkr"|  |}|V  qd S )Nr   )_CSVSheetReader__convert_cell)r   rowelementr   r   r   column_iterator   s    
zCSVSheetReader.column_iteratorc                 C   s   d }| j rt|| j}|d kr`| jr`tj|| j| j| jd}|tdtdfkoV| j	}|r`d }|d krx| j
rxt|}|d kr|}|S )N)r4   r5   infz-inf)r+   serviceZdetect_int_valuer0   r,   Zdetect_float_valuer1   r2   floatr-   r.   Zdetect_date_value)r   Zcsv_cell_textretZshall_we_ignore_the_conversionr   r   r   Z__convert_cell   s*    
zCSVSheetReader.__convert_cellc                 C   s   | j r| j   d S r   )r/   r#   r   r   r   r   r#      s    zCSVSheetReader.close)r   TTTTTFN)
r$   r%   r&   r'   r   r8   r;   r?   r<   r#   r   r   r   r   r(   _   s           
r(   c                   @   s   e Zd ZdZdd ZdS )CSVFileReaderzread csv from phyical filec                 C   s   t | jjd| jd}|S )Nr)r   )openr)   payloadr*   )r   unicode_readerr   r   r   r8      s      zCSVFileReader.get_file_handleNr$   r%   r&   r'   r8   r   r   r   r   rD      s   rD   c                   @   s   e Zd ZdZdd ZdS )CSVinMemoryReaderzread csv file from memoryc                 C   s<   t | jjtjr0| jj }t|| j}n| jj}|S r   )	
isinstancer)   rG   compactBytesIOreadStringIOr   r*   )r   contentrH   r   r   r   r8      s
    z!CSVinMemoryReader.get_file_handleNrI   r   r   r   r   rJ      s   rJ   )r'   r9   Zpyexcel_io.servicerA   Zpyexcel_io._compact_compactrL   Zpyexcel_io.constants	constantsZpyexcel_io.plugin_apir   ZDEFAULT_SEPARATORZDEFAULT_NAMEZ!DEFAULT_SHEET_SEPARATOR_FORMATTERZSEPARATOR_MATCHERZ!DEFAULT_CSV_STREAM_FILE_FORMATTERZDEFAULT_NEWLINEZBOM_LITTLE_ENDIANr   r   r   objectr   r(   rD   rJ   r   r   r   r   <module>   s&   	
AI
