o
    i                     @   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)descargsargspecsparserkwkwargs r   A/home/ubuntu/.local/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helpdescribez--jsonz	--dialectz{"delimiter": "%s"}F   *r   Tz--formatz--typepackagezdata-package)	resourcesprofile   indentr   )shutilwhich
ValueErrorr   dict	delimiterextendlenr   jsonloads
subprocesscheck_outputr   from_frictionless_datapackageprintdumpsasdictr   )r   r   r   fargsonefiledptgr   r   r   csvwdescribe   s.   

r<   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    FAILredblue   r(   )r   r,   r   r=   is_validr5   r   verbosewarningsstrmessager+   r   )r   r   r   csvwwer   r   r   csvwvalidate?   s2   
rS   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/).r=   r>   r?   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   r=   r   
tablegroupoutdirwrite_from_tgformatcommon_propsjoinpath
write_textr0   r6   r5   r   )r   r   dbnamemdnamerP   dbmdkr   r   r   csvw2datasetteY   s(   
rg   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/r=   r>   r?   r%   r&   r   r(   )	r   r,   r   r=   r5   r0   r6   to_jsonr   )r   r   rP   r   r   r   	csvw2jsons   s   
rj   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 )Nrh   r=   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.r?   outputz,Path for the generated SQLite database file.T)_forcer   r(   )	r   r,   r   	from_filer=   r   rl   r]   r   )r   r   r;   rd   r   r   r   csvw2sqlite~   s   ro   c                 C   s@   t d| dgtddf} t| j}tt|dd td|dS )	Nrh   r=   rk   r?   T)
link_filesr   r(   )r   r,   r   rn   r=   r5   r   r   )r   r   r;   r   r   r   csvw2markdown   s   
rq   __main__)F)NF)r   r0   r)   rY   r   r2   	termcolorr   rP   r   r   csvw.dbr   
csvw.utilsr   r   r   r<   rS   rg   rj   ro   rq   __name__r   r   r   r   <module>   s*    
	

!




