o
    mi9                     @   sp   d Z ddlZddlZddlZddlmZ dgZddiZdd	 Zej	
eegZd
d ZejG dd deZdS )a  
DSV data can be surprisingly diverse. While Python's `csv` module offers out-of-the-box support
for the basic formatting parameters, CSVW recognizes a couple more, like `skipColumns` or
`skipRows`.

.. seealso::

    - `<https://www.w3.org/TR/2015/REC-tabular-metadata-20151217/#dialect-descriptions>`_
    - `<https://docs.python.org/3/library/csv.html#dialects-and-formatting-parameters>`_
    - `<https://specs.frictionlessdata.io/csv-dialect/>`_
    N   )utilsDialectz	UTF-8-BOMz	utf-8-sigc                 C   s   |dk rt d||jd S )Nr   z{0} is not a valid {1})
ValueErrorformatname)instance	attributevalue r   K/home/kim/smarthome/.venv/lib/python3.10/site-packages/csvw/dsv_dialects.py_non_negative   s   r   c                 C   sL   t td| } zdt| | }| W S  ty%   td	|  Y dS w )Nutf-8xzInvalid value for property: {})
r   	converterstrencodeENCODING_MAPgetLookupErrorwarningswarnr   )s_r   r   r   convert_encoding"   s   r   c                   @   s.  e Zd ZdZejdeeje	dZ
ejeejeddgedd dZejejeje	d	d
dd	dZejd
eejed
ejedZejdejejeddd dedZejdejeje	dd
dejeje	dZejd
eejed
ejedZejdejejeddd dedZejdeeje	deje	dZejdejejeddd dedZejdeejedejedZejdeejedejedZejdej g ddd dZ!dd Z"ej#dd Z$ej#dd Z%ej#dd  Z&d(d!d"Z'e(d#d$ Z)d%d& Z*d'S ))r   z
    A CSV dialect specification.

    .. seealso:: `<https://www.w3.org/TR/2015/REC-tabular-metadata-20151217/#dialect-descriptions>`_
    r   )defaultr   	validator

c                   C   s   ddgS )Nr   r   r   r   r   r   r   <lambda>;       zDialect.<lambda>)r   r   "T)
allow_noner   c                 C      | dkS Nr   r   r   r   r   r   r   I   r    )Zcond#r   c                 C   r#   r$   r   r%   r   r   r   r   X   r    ,c                 C   r#   r$   r   r%   r   r   r   r   b   r    Ffalsetruer(   startendc                 C   s2   t tjttfdt| trd|  S | S )Nr(   z{0})		functoolspartialr   r   r   bool
isinstancer   lower)vr   r   r   r   r   s    )r   r   r   c                 K   s8   | j di t| }| D ]
\}}t||| q|S )Nr   )	__class__attrasdictitemssetattr)selfkwreskr2   r   r   r   updatedv   s   zDialect.updatedc                 C   s   | j d u rd S | jrdS dS )Nr!   \)	quoteChardoubleQuoter8   r   r   r   escape_character|   s   zDialect.escape_characterc                 C   s   t | jtr
| jgS | jS N)r0   lineTerminatorsr   r@   r   r   r   line_terminators   s   

zDialect.line_terminatorsc                 C   s$   dd dd dd dd d| j  S )Nc                 S      |   S rB   )stripr%   r   r   r   r      r    z!Dialect.trimmer.<locals>.<lambda>c                 S   s   | S rB   r   r%   r   r   r   r      s    c                 S   rE   rB   )lstripr%   r   r   r   r      r    c                 S   rE   rB   )rstripr%   r   r   r   r      r    r)   )trimr@   r   r   r   trimmer   s   zDialect.trimmerc                 C   s   t j| |dS )N)omit_defaults)r   Zattr_asdict)r8   rK   r   r   r   r5      s   zDialect.asdictc                 C   s   t | j| jS rB   )r   r   encodingr@   r   r   r   python_encoding   s   zDialect.python_encodingc                 C   s.   | j | j| js
| jnd | jd | j| jddS )Nr   T)	delimiterdoublequote
escapecharlineterminator	quotecharskipinitialspacestrict)rN   r?   rA   rD   r>   skipInitialSpacer@   r   r   r   as_python_formatting_parameters   s   z'Dialect.as_python_formatting_parametersN)T)+__name__
__module____qualname____doc__r4   ibr   
validatorsinstance_ofr   rL   r-   r.   r   r   listFactoryrC   r>   r/   r?   intnon_negative_intZskipRowsoptionalZcommentPrefixheaderZheaderRowCountrN   ZskipColumnsZskipBlankRowsrU   in_rI   r<   cached_propertyrA   rD   rJ   r5   propertyrM   rV   r   r   r   r   r   ,   s    










)rZ   r4   r   r-    r   __all__r   r   r\   r]   r`   ra   r   r   objectr   r   r   r   r   <module>   s    
