o
    QDi2&                     @  s   d dl mZ d dlmZmZmZmZmZmZm	Z	m
Z
 d dlZddl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 d	dlmZ erNddlmZ ejdddG dd deedZg dZdS )    )annotations)TYPE_CHECKINGAnyClassVarDictIterableListOptionalUnionN   )errorshelperssettings)FrictionlessException)Metadata)platform   Control)Factory)typesTF)kw_onlyreprc                      s  e Zd ZU dZejdddZded< 	 dZded< 	 dZ	d	ed
< 	 dZ
ded< 	 dZded< 	 ejZded< 	 ejejjdZded< 	 ejZded< 	 ejZded< 	 dZded< 	 ejedZded< 	 dZded< 	 ejedZded< 	 dd ZedPdQd!d"ZdRd&d'ZdSd(d)ZdTd*d+Z dUd-d.Z!dVd1d2Z"dVd3d4Z#dWd7d8Z$d9d: Z%d;d< Z&d=d> Z'd?Z(e)j*Z+d@dAej,dBdAej-dBd
dAid
dAid
dCid
dDid
dAid
dCid
dAid
dDid
dCidEdFZ.e/dXdGdHZ0e/dY fdJdKZ1e/dZ fdLdMZ2 fdNdOZ3  Z4S )[DialectzDialect representationNF)defaultr   z'Optional[Union[types.IDescriptor, str]]
descriptorzOptional[str]namezClassVar[Union[str, None]]typetitledescriptionboolheader)factoryz	List[int]header_rowsstrheader_joinheader_casecomment_charcomment_rowsskip_blank_rowszList[Control]controlsc                 C  s   t | jp
t |  S N)r    r*   to_descriptorself r/   U/var/www/Datamplify/venv/lib/python3.10/site-packages/frictionless/dialect/dialect.py__bool__^   s   zDialect.__bool__sourceOptional[Any]optionsr   returnc                 K  s0   t jj}|j| fddi|}t|tsJ |S )zDescribe the given source as a dialect

        Parameters:
            source (any): data source
            **options (dict): describe resource options

        Returns:
            Dialect: file dialect
        r   dialect)r   frictionlessResourcedescribe
isinstancer   )r2   r4   r8   metadatar/   r/   r0   r9   c   s   zDialect.describecontrolr   Nonec                 C  s@   |  |jrtjd|j dd}t|| j| | |_dS )zAdd new control to the schema	control "z" already existsnoteN)has_controlr   r   DialectErrorr   r*   appendschema)r.   r<   errorr/   r/   r0   add_controlu   s
   
zDialect.add_controlc                 C  s    | j D ]
}|j|kr dS qdS )zCheck if control is presentTF)r*   r   )r.   r   r<   r/   r/   r0   rA   }   s
   

zDialect.has_controlc                 C  s:   | j D ]}|j|kr|  S qtjd| dd}t|)zGet control by typer>   z" does not existr?   )r*   r   r   rB   r   )r.   r   r<   rE   r/   r/   r0   get_control   s   

zDialect.get_controlOptional[Control]c                 C  sF   |  |jr| |j}| j|}|| j|< | |_|S | | dS )zSet control by typeN)rA   r   rG   r*   indexrD   rF   )r.   r<   prev_controlrI   r/   r/   r0   set_control   s   
zDialect.set_controlsampletypes.ISamplec                 C  s   |   }|  }g }t|ddD ]"\}}|r|||sq| jr,|| jv r,|t| ||kr2 nqg }i }|D ]/}t|D ](\}	}
||	|
krKq?|
||	< t	||	kr[||
 q?| j
||	 |
g||	< q?q9|S Nr   )start)create_first_content_rowcreate_comment_filter	enumerater!   r#   rC   r   stringify_labelgetlenr%   join)r.   rL   first_content_rowcomment_filterlists
row_numbercellslabels
prev_cellsrI   cellr/   r/   r0   read_labels   s4   


	zDialect.read_labelsc                 C  s&   g }|  |D ]	\}}|| q|S r+   )read_enumerated_content_streamrC   )r.   rL   fragment_r[   r/   r/   r0   read_fragment   s   zDialect.read_fragmentcell_streamIterable[List[Any]]c                 c  sf    |   }|  }|  }t|ddD ]\}}||k rq|r$|||s$q|r+||s+q||fV  qd S rN   )rP   rQ   create_blank_filterrR   )r.   rd   rW   rX   blank_filterrZ   r[   r/   r/   r0   r`      s   
z&Dialect.read_enumerated_content_streamc                 C  s   | j r| jr| jd d S dS )Nr   )r!   r#   r-   r/   r/   r0   rP      s   z Dialect.create_first_content_rowc                   s"    j s jsd S d fdd}|S )NrZ   intr[   	List[Any]c                   sD    j r|rt|d tr|d  j rdS  jr |  jv r dS dS )Nr   FT)r'   r:   r$   
startswithr(   )rZ   r[   r-   r/   r0   rX      s   
z5Dialect.create_comment_filter.<locals>.comment_filter)rZ   ri   r[   rj   )r'   r(   )r.   rX   r/   r-   r0   rQ      s   
zDialect.create_comment_filterc                 C  s   | j sd S ddd}|S )Nr[   rj   c                 S  s   | D ]	}|dvr dS qdS )N)N TFr/   )r[   r^   r/   r/   r0   rg      s
   z1Dialect.create_blank_filter.<locals>.blank_filter)r[   rj   )r)   )r.   rg   r/   r/   r0   rf      s   
zDialect.create_blank_filterr6   objectstring)r   patternbooleanarray)r   r   r   r   r!   
headerRows
headerJoin
headerCasecommentCharcommentRowsskipBlankRows)r   
propertiesc                 C  s   |dkrt S d S )Nr*   r   )clsr   r/   r/   r0   metadata_select_property_class
  s   z&Dialect.metadata_select_property_classtypes.IDescriptorc                   sF   t  | tD ]}||d }|d ur |di  ||d |< qd S )Ncsv)supermetadata_transformCSV_PROPS_V1pop
setdefault)ry   r   r   value	__class__r/   r0   r~     s   zDialect.metadata_transformc                   sR   t  j|fi |}|j D ]\}}t|tr&||d< t|}|| q|S )Nr   )	r}   metadata_importcustomitemsr:   dictr   from_descriptorrF   )ry   r   r4   r6   r   itemr<   r   r/   r0   r     s   


zDialect.metadata_importc                   sp   ddl m } t  }| jD ]}| }|d}|r|||< q|jdkr6|di  D ]\}}|||< q-|S )Nr   )systemr   v1r|   )r   r}   metadata_exportr*   r,   r   	standardsr   )r.   r   r   r<   control_descriptorr   r   r   r   r/   r0   r   '  s   




zDialect.metadata_exportr+   )r2   r3   r4   r   r5   r   )r<   r   r5   r=   )r   r$   )r   r$   r5   r   )r<   r   r5   rH   )rL   rM   )rd   re   )r   r$   )r   r{   )r   r{   r4   r   )5__name__
__module____qualname____doc__attrsfieldr   __annotations__r   r   r   r   r   DEFAULT_HEADERr!   DEFAULT_HEADER_ROWScopyr#   DEFAULT_HEADER_JOINr%   DEFAULT_HEADER_CASEr&   r'   listr(   r)   r*   r1   staticmethodr9   rF   rA   rG   rK   r_   rc   r`   rP   rQ   rf   metadata_typer   rB   metadata_ErrorNAME_PATTERNTYPE_PATTERNmetadata_profileclassmethodrz   r~   r   r   __classcell__r/   r/   r   r0   r      s   
 









r   )	metaclass)	delimiterlineTerminator	quoteChardoubleQuote
escapeCharnullSequenceskipInitialSpace)
__future__r   typingr   r   r   r   r   r   r	   r
   r   rl   r   r   r   	exceptionr   r;   r   r   r<   r   r"   r   r   definer   r   r/   r/   r/   r0   <module>   s     (  ,