o
    QDi                     @  s   d dl mZ d dlmZ d dlmZmZmZmZm	Z	m
Z
 ddlmZ ddlmZ ddlmZ dd	lmZ erNdd
lmZ ddlmZ ddlmZ ddlmZ G dd dZG dd dZdS )    )annotations)chain)TYPE_CHECKINGAnyClassVarListOptionalcast   )errors)FrictionlessException)platform   )system)types)Resource)TableResource)Loaderc                   @  s   e Zd ZU dZdZded< 	 g Zded< 	 d4d	d
Zdd Zdd Z	e
d5ddZe
d6ddZe
d7ddZe
d8ddZdd Zd9ddZe
d:d!d"Zd;d$d%Zd8d&d'Zd8d(d)Zd<d,d-Zd=d1d2Zd3S )>ParserzRParser representation

    Parameters:
        resource (Resource): resource

    FzClassVar[bool]requires_loaderzClassVar[List[str]]supported_typesresourcer   c                 C  s   || _ d | _d | _d | _d S N)_Parser__resource_Parser__loader_Parser__sample_Parser__cell_stream)selfr    r   S/var/www/Datamplify/venv/lib/python3.10/site-packages/frictionless/system/parser.py__init__%   s   
zParser.__init__c                 C  s   | j r|   | S r   )closedopenr   r   r   r   	__enter__+   s   zParser.__enter__c                 C  s   |    d S r   )close)r   typevalue	tracebackr   r   r   __exit__0   s   zParser.__exit__returnc                 C  s   | j S )z9
        Returns:
            Resource: resource
        )r   r#   r   r   r   r   3      zParser.resourcer   c                 C     | j du r	td| j S )z5
        Returns:
            Loader: loader
        Nz*parser is not open or non requiring loader)r   r   r#   r   r   r   loader;      
zParser.loadertypes.ISamplec                 C  r,   )z5
        Returns:
            Loader: sample
        Nparser is not open)r   r   r#   r   r   r   sampleE   r.   zParser.sampletypes.ICellStreamc                 C  r,   )z:
        Yields:
            any[][]: list stream
        Nr0   )r   r   r#   r   r   r   cell_streamO   r.   zParser.cell_streamc                 C  s<   |    z|  | _|  | _| W S  ty   |     w )z!Open the parser as "io.open" does)r%   read_loaderr   read_cell_streamr   	Exceptionr#   r   r   r   r"   [   s   

zParser.openNonec                 C  s   | j r
| j   dS dS )z)Close the parser as "filelike.close" doesN)r   r%   r#   r   r   r   r%   f   s   zParser.closeboolc                 C  s
   | j du S )zSWhether the parser is closed

        Returns:
            bool: if closed
        N)r   r#   r   r   r   r!   k   s   
zParser.closedOptional[Loader]c                 C  s   | j rt| j}| S dS )zLCreate and open loader

        Returns:
            Loader: loader
        N)r   r   create_loaderr   r"   )r   r-   r   r   r   r4   v   s   zParser.read_loaderc                 C  sV   g | _ |  }| |}|D ]}| j | t| j | jjjkr" nqt| j |}|S )zQRead list stream

        Returns:
            gen<any[][]>: list stream
        )	r   read_cell_stream_createread_cell_stream_handle_errorsappendlenr   detectorsample_sizer   )r   r3   cellsr   r   r   r5      s   
zParser.read_cell_streamc                 C     t  )zCreate list stream from loader

        Parameters:
            loader (Loader): loader

        Returns:
            gen<any[][]>: list stream
        NotImplementedErrorr#   r   r   r   r;      s   	zParser.read_cell_stream_creater3   CellStreamWithErrorHandlingc                 C  s   t |S )zWrap list stream into error handler

        Parameters:
            gen<any[][]>: list stream

        Returns:
            gen<any[][]>: list stream
        )rE   r   r3   r   r   r   r<      s   z%Parser.read_cell_stream_handle_errorssourcer   r   c                 C  rB   )zvWrite row stream from the source resource

        Parameters:
            source (Resource): source resource
        rC   )r   rG   r   r   r   write_row_stream   r+   zParser.write_row_streamN)r   r   )r*   r   )r*   r   )r*   r/   )r*   r2   )r*   r7   )r*   r8   )r*   r9   )r3   r2   r*   rE   )rG   r   r*   r   )__name__
__module____qualname____doc__r   __annotations__r   r    r$   r)   propertyr   r-   r1   r3   r"   r%   r!   r4   r5   r;   r<   rH   r   r   r   r   r      s4   
 
		






r   c                   @  s&   e Zd Zd
ddZdd Zdd Zd	S )rE   r3   r2   c                 C  s
   || _ d S r   )r3   rF   r   r   r   r       s   
z$CellStreamWithErrorHandling.__init__c                 C  s   | S r   r   r#   r   r   r   __iter__   s   z$CellStreamWithErrorHandling.__iter__c              
   C  s   zt tt | j W S  ty     ty     tjj	tj
jfy7 } ztjt|d}t|d }~w tyO } ztjt|d}t||d }~w tyg } ztjt|d}t||d }~ww )N)note)r	   r   r   r3   __next__StopIterationr   r   zipfile
BadZipFilegzipBadGzipFiler   CompressionErrorstrUnicodeDecodeErrorEncodingErrorr6   SourceError)r   	exceptionerrorr   r   r   rQ      s&   

z$CellStreamWithErrorHandling.__next__N)r3   r2   )rI   rJ   rK   r    rO   rQ   r   r   r   r   rE      s    
rE   N)
__future__r   	itertoolsr   typingr   r   r   r   r   r	    r   r\   r   r   r   r   r   r   	resourcesr   r-   r   r   rE   r   r   r   r   <module>   s      +