o
    ÓmÆiX   ã                   @   s²   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
dd„ Zddd„Zdd	„ Zd
d„ Zddd„Zdd„ Zddd„Zdd„ Zddefdd„ZdS )é    Nc                 C   s   t  dt| ƒ¡S )Nz	https?://)ÚreÚmatchÚstr©Ús© r   úD/home/kim/smarthome/.venv/lib/python3.10/site-packages/csvw/utils.pyÚis_url   s   r	   FTc                    s„   |rˆt krt|t ƒrdd„ ‡ ‡fdd„|D ƒD ƒS |r"|d u r"|S t|ˆƒr6ˆtkr0t|tƒs6ˆ r@ˆ |ƒs@t d |¡¡ |S |S )Nc                 S   s   g | ]}|d ur|‘qS ©Nr   )Ú.0Úvr   r   r   Ú
<listcomp>   s    zconverter.<locals>.<listcomp>c                    s   g | ]
}t ˆd |ˆ d‘qS )N)Úcond)Ú	converter©r   Úss©r   Útype_r   r   r      s    zInvalid value for property: {})ÚlistÚ
isinstanceÚintÚboolÚwarningsÚwarnÚformat)r   Údefaultr   Ú
allow_noner   Z
allow_listr   r   r   r      s   (r   c                 C   s(   t | tjƒst | tƒsJ ‚t | ¡S | S r
   )r   ÚpathlibÚPathr   )Úfnamer   r   r   Úensure_path   s   
r    c                 C   s@   t  ¡ }t | ¡D ]}|j}t|tjƒr| ¡ }|||j< q	|S r
   )	ÚcollectionsÚOrderedDictÚattrÚfieldsr   r   ÚFactoryÚfactoryÚname)ÚclsÚresÚfieldr   r   r   r   Úattr_defaults&   s   r+   c                 C   sv   t | jƒ}t ¡ }t | j¡D ])}|r|j d¡s8t| |jƒ}|r(|||j ks8t	|dƒr3|j
dd}|||j< q|S )NÚ_ÚasdictT)Úomit_defaults)r+   Ú	__class__r!   r"   r#   r$   r'   Ú
startswithÚgetattrÚhasattrr-   )Úobjr.   Zomit_privateZdefsr)   r*   Úvaluer   r   r   Úattr_asdict0   s   


€r5   c                 C   sn   |   dd¡  dd¡  dd¡} | tjv r| d S d dd„ |  d¡D ƒ¡} | s(d} | d tjd vr5d|  } | S )uß  Convert a string into a valid python attribute name.
    This function is called to convert ASCII strings to something that can pass as
    python attribute name, to be used with namedtuples.

    >>> str(normalize_name('class'))
    'class_'
    >>> str(normalize_name('a-name'))
    'a_name'
    >>> str(normalize_name('a nÃ¤me'))
    'a_name'
    >>> str(normalize_name('Name'))
    'Name'
    >>> str(normalize_name(''))
    '_'
    >>> str(normalize_name('1'))
    '_1'
    ú-r,   Ú.ú c                 s   s    | ]	}t |d dV  qdS )F)Ú	lowercaseN)Úslugr   r   r   r   Ú	<genexpr>R   s   € z!normalize_name.<locals>.<genexpr>r   )ÚreplaceÚkeywordÚkwlistÚjoinÚsplitÚstringÚascii_lettersr   r   r   r   Únormalize_name=   s   
rC   c                 C   s|   d  dd„ t d| ¡D ƒ¡}|r| ¡ }tjD ]}| |d¡}qt d|r'dnd|¡}| 	dd¡ 
d¡}t d	|¡s<J ‚|S )
uy   Condensed version of s, containing only lowercase alphanumeric characters.

    >>> str(slug('A B. Ã¤C'))
    'abac'
    Ú c                 s   s"    | ]}t  |¡d kr|V  qdS )ZMnN)ÚunicodedataÚcategory)r   Úcr   r   r   r;   `   s   € ÿÿzslug.<locals>.<genexpr>ZNFDz\s+r8   ÚasciiÚignorez[ A-Za-z0-9]*$)r?   rE   Ú	normalizeÚlowerrA   Úpunctuationr<   r   ÚsubÚencodeÚdecoder   )r   Zremove_whitespacer9   r)   rG   r   r   r   r:   Z   s   
r:   c                 C   sH   ddddddddœ  ¡ D ]\}}|  |d	 ¡r!|  |d	 |¡  S qd S )
Nzhttp://www.w3.org/ns/csvw#z+http://www.w3.org/1999/02/22-rdf-syntax-ns#z%http://www.w3.org/2000/01/rdf-schema#z!http://www.w3.org/2001/XMLSchema#zhttp://purl.org/dc/terms/zhttp://www.w3.org/ns/dcat#zhttp://www.w3.org/ns/prov#)ZcsvwZrdfZrdfsZxsdZdcZdcatZprovú:)Úitemsr0   r<   )ÚqnameÚprefixÚurir   r   r   Ú	qname2urll   s   ù
ø	ÿ÷rU   Úreturnc           
   	      sŒ  ddd„‰d‡ ‡fdd„	‰ ‡ ‡fdd„}d	d
„ }d  | j dd¡¡g}| jr2|r2| d  | jj¡¡ | |dd„ | j ¡ D ƒƒ¡ | jD ]|}dd„ |jj	D ƒ}d  t
|jjƒ¡}|rr| jrr| jj |jj¡ ¡ rr|d  |jj¡7 }n||jj7 }| d| d ¡ | ||jƒ¡ | d¡}| ¡ rŸ| d  t | ¡ ¡¡¡ | d¡ | d¡ | d¡ |jjD ]}	| ||	||jjƒ¡ q²qDd |¡S )zû
    Render the metadata of a dataset as markdown.

    :param link_files: If True, links to data files will be added, assuming the markdown is stored     in the same directory as the metadata file.
    :return: `str` with markdown formatted text
    Fc                 S   s,   t | ƒ}|r|rd || ¡S d | |¡S | S )Nz<a href="{}">{}</a>ú[{}]({}))rU   r   )rR   ÚhtmlÚurlr   r   r   Ú
qname2link‚   s   z%metadata2markdown.<locals>.qname2linkNc              
      s†   t | tƒrd d ‡‡ fdd„| D ƒ¡¡S t | tƒr?g }|  ¡ D ]\}}| d ˆ|ddt t	|ƒ¡¡¡ q d d |¡¡S t	| ƒS )	zE
        For inclusion in tables we must use HTML for lists.
        z<ol>{}</ol>rD   c                 3   s"    | ]}d   ˆ |ˆd¡V  qdS )z<li>{}</li>©ÚkeyN©r   )r   Úitem)Úhtmlifyr\   r   r   r;      s   €  z5metadata2markdown.<locals>.htmlify.<locals>.<genexpr>z<dt>{}</dt><dd>{}</dd>T)rX   z<dl>{}</dl>)
r   r   r   r?   ÚdictrQ   ÚappendrX   Úescaper   )r3   r\   rQ   Úkr   ©r_   rZ   r[   r   r_   Š   s   
ÿ
ÿz"metadata2markdown.<locals>.htmlifyc              
      sÊ   dd„ t  | ¡ ¡ D ƒ} g }|  dd ¡}|r| |d ¡ |  dd ¡}|r?t|tƒr.d|i}| d | d¡p8d	| d
¡¡¡ | r^| d¡ |  ¡ D ]\}}| d ˆ|ƒˆ ||d¡¡ qJd 	|¡d S )Nc                 S   s   i | ]	\}}|r||“qS r   r   ©r   rc   r   r   r   r   Ú
<dictcomp>š   s    z9metadata2markdown.<locals>.properties.<locals>.<dictcomp>údc:descriptionÚ
zhttps://schema.org/imageZ
contentUrlz
![{}]({})
zhttps://schema.org/captionrD   zhttps://schema.org/contentUrlzproperty | value
 --- | ---z{} | {}r[   )
ÚcopyÚdeepcopyrQ   Úpopra   r   r   r   Úgetr?   )Úpropsr)   ÚdescZimgrc   r   rd   r   r   Ú
properties™   s$   
þ
 z%metadata2markdown.<locals>.propertiesc                 S   s€  d  | jr	| jjnd¡}| jrZ| jj r@t d| jj ¡r1|d7 }|d dd„ | jj  d¡D ƒ¡7 }n| jjdkr@|d	  | jj ¡7 }| jjrM|d
  | jj¡7 }| jjrZ|d  | jj¡7 }| j	rdd  || j	¡}| j
 dd¡ dd¡}|r‚| j|v r‚|r||d n|}|d7 }| j|v r©|r|d n|}|d  || j d || j d t|| j d ƒ¡7 }d | jr¶d  | j| j¡nd  | j¡||g¡S )Nz`{}`rA   z[\w\s]+(\|[\w\s]+)*z<br>Valid choices:<br>rD   c                 s   s    | ]}d   |¡V  qdS )z `{}`Nr]   )r   Úwr   r   r   r;   ²   s   € z4metadata2markdown.<locals>.colrow.<locals>.<genexpr>ú|z<br>Regex: `{}`z<br>&ge; {}z<br>&le; {}zlist of {} (separated by `{}`)rg   rh   r8   z<br>zPrimary keyzReferences [{}::{}](#table-{})é   r   z | rW   )r   ÚdatatypeÚbaser   Ú	fullmatchr?   r@   ÚminimumÚmaximumÚ	separatorÚcommon_propsrl   r<   r'   r:   ZpropertyUrl)ÚcolÚfksÚpkÚdtrn   r   r   r   Úcolrow¬   s<   $
(ÿÿ
üz!metadata2markdown.<locals>.colrowz# {}
údc:titleZDatasetz%> [!NOTE]
> Described by [{0}]({0}).
c                 S   s   i | ]\}}|d kr||“qS )r   r   re   r   r   r   rf   Ñ   s    z%metadata2markdown.<locals>.<dictcomp>c                 S   s8   i | ]}t |jƒd kr|jd |jjd |jjjf“qS )rr   r   )ÚlenZcolumnReferenceÚ	referenceÚresourcerA   )r   Zfkr   r   r   rf   Ô   s    ÿz ## <a name="table-{}"></a>Table z[{0}]({0})
rh   Údialectz
**CSV dialect**: `{}`
z
### Columns
z&Name/Property | Datatype | Descriptionz --- | --- | --- ©Fr
   )r   ry   rl   Z_fnamera   r'   rQ   ZtablesZtableSchemaZforeignKeysr:   rY   rA   ÚparentÚjoinpathÚexistsÚinheritr-   ÚjsonÚdumpsÚcolumnsZ
primaryKeyr?   )
ÚtgZ
link_filesro   r~   r)   Útabler{   Úheaderrƒ   rz   r   rd   r   Úmetadata2markdownz   s8   
!

þ 



ÿ
r   )FNT)TTr„   )r   ri   rX   r‰   rA   r=   r   r   r!   rE   r#   r	   r   r    r+   r5   rC   r:   rU   r   r   r   r   r   r   Ú<module>   s(    



