o
    mi                     @   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mZ d dlm	Z	m
Z
 d dlmZ d dlmZ dd Zdd	d
ZdddZdddZdddZdddZdddZdddZedkrbe  dS dS )    N)colored)CSVW
TableGroup)Database)metadata2markdownc                 G   s>   |d u rt j| d}|D ]\}}|j|i | q| S |S )N)description)argparseArgumentParseradd_argument
parse_args)ZdescargsZargspecsparserkwkwargs r   G/home/kim/smarthome/.venv/lib/python3.10/site-packages/csvw/__main__.pyparsed_args   s   r   Fc                 C   s   |r| S t |  d S )N)sysexit)rettestr   r   r   r      s   r   c              	   C   s   t d}|stdtd| dgtd dfdgtddd	f} d
dg}| jr0|dd| j g d}t| jdkrJd| jd vrJd}|ddg n|ddg t	
t|g| | j }|rht|gdd}t|}tt	j| dd td|dS )NfrictionlesszpThe frictionless command must be installed for this functionality!
Run `pip install frictionless` and try again.z9Describe a (set of) CSV file(s) with basic CSVW metadata.z--delimiter)defaultcsv+z(CSV files to describe as CSVW TableGroup)nargshelpZdescribez--jsonz	--dialectz{"delimiter": "%s"}F   *r   Tz--formatz--typepackagezdata-package)	resourcesZprofile   indentr   )shutilwhich
ValueErrorr   dict	delimiterextendlenr   jsonloads
subprocesscheck_outputr   Zfrom_frictionless_datapackageprintdumpsasdictr   )r   r   r   ZfargsZonefileZdptgr   r   r   csvwdescribe   s.   

r4   c              
   C   s   t d| dgtddfddgtddd	f} d
}z6t| jdd}|jr-ttdddgd nd}ttdddgd | jrL|jD ]}ttt	|j
d q?W n* tyw } zd}ttdddgd | jrmttt	|d W Y d }~nd }~ww t||dS )Nz;Validate a (set of) CSV file(s) described by CSVW metadata.url/URL or local path to CSV or JSON metadata file.r   z-vz	--verbose
store_trueF)actionr   r   T)validateOKgreenbold)attrsr   ZFAILredblue   r$   )r   r(   r   r5   Zis_validr0   r   verbosewarningsstrmessager'   r   )r   r   r   csvwwer   r   r   csvwvalidate?   s2   
rI   c              
   C   s   t d| dgtddfddgttjtddf} d	\}}t| j}t|j| j| d
}|	  i }dD ]}d
||jv rH|jd
| ||< q4| j|tj|dd td
| j| | j|  td|dS )Nz;Convert CSVW to data for datasette (https://datasette.io/).r5   r6   r7   z-oz--outdir.)typer   )zdatasette.dbzdatasette-metadata.json)fname)titler   licensezdc:{}r!   r"   zkRun
    datasette {} --metadata {}
and open your browser at
    http://localhost:8001/
to browse the data.
r   r$   )r   r(   pathlibPathr   r5   r   Z
tablegroupZoutdirwrite_from_tgformatZcommon_propsjoinpath
write_textr,   r1   r0   r   )r   r   ZdbnameZmdnamerF   dbmdkr   r   r   csvw2datasetteY   s(   
rX   c                 C   sD   t d| dgtddf} t| j}ttj| dd td|dS )	N>Convert CSVW to JSON, see https://w3c.github.io/csvw/csv2json/r5   r6   r7   r!   r"   r   r$   )	r   r(   r   r5   r0   r,   r1   to_jsonr   )r   r   rF   r   r   r   	csvw2jsons   s   
r[   c                 C   sV   t d| dgtddfdgtddf} t| j}t|| j}|jdd td	|d
S )NrY   r5   URL or local path to CSVW metadata file describing a TableGroup.

Note that not all valid CSVW datasets can be converted to SQLite. One limitation is that all tables which are referenced by foreign keys must have a primary key.r7   outputz,Path for the generated SQLite database file.T)Z_forcer   r$   )	r   r(   r   	from_filer5   r   r]   rQ   r   )r   r   r3   rU   r   r   r   csvw2sqlite~   s   r_   c                 C   s@   t d| dgtddf} t| j}tt|dd td|dS )	NrY   r5   r\   r7   T)Z
link_filesr   r$   )r   r(   r   r^   r5   r0   r   r   )r   r   r3   r   r   r   csvw2markdown   s   
r`   __main__)F)NF)r   r,   r%   rO   r   r.   Z	termcolorr   rF   r   r   Zcsvw.dbr   Z
csvw.utilsr   r   r   r4   rI   rX   r[   r_   r`   __name__r   r   r   r   <module>   s*    
	

!




