
    11i                         S SK r S SKrS SKrS SKrS SKrS SKrS SKJr  S SKJ	r	J
r
  S SKJr  S SKJr  S rSS jrSS jrSS	 jrSS
 jrSS jrSS jrSS jr\S:X  a  \" 5         gg)    N)colored)CSVW
TableGroup)Database)metadata2markdownc                     UcA  [         R                  " U S9nU H  u  pEUR                  " U0 UD6  M     UR                  5       $ U$ )N)description)argparseArgumentParseradd_argument
parse_args)descargsargspecsparserkwkwargss         G/home/james-whalen/.local/lib/python3.13/site-packages/csvw/__main__.pyparsed_argsr      sJ    |((T:"JB.v. #  ""K    c                 B    U(       a  U $ [         R                  " U 5        g )N)sysexit)rettests     r   r   r      s    
HHSMr   c                    [         R                  " S5      nU(       d  [        S5      e[        SU S/[	        S S94S/[	        SSS	945      n S
S/nU R
                  (       a   UR                  SSU R
                  -  /5        Sn[        U R                  5      S:X  a)  SU R                  S   ;  a  SnUR                  SS/5        OUR                  SS/5        [        R                  " [        R                  " U/U-   U R                  -   5      5      nU(       a  [	        U/SS9n[        R                  " U5      n[        [        R                   " UR#                  5       SS95        [%        SUS9$ )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tgs          r   csvwdescriber@      sF   <</L I J 	J C
$t,-
$S'QRS	D "E~~k#84>>#IJKG
488}c!4 	j%()h	*+	J++\NU,BTXX,MN	OBRD.9		1	1"	5B	$**RYY[
+,r   c                 X   [        SU S/[        SS94SS/[        SSS	945      n S
n [        U R                  SS9nUR                  (       a  [        [        SSS/S95        OcSn[        [        SSS/S95        U R                  (       a;  UR                   H+  n[        [        [        UR                  5      S5      5        M-     [        X!S9$ ! [         aP  nSn[        [        SSS/S95        U R                  (       a  [        [        [        U5      S5      5         S nAN^S nAff = f)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   r0   r   rB   is_validr9   r   verbosewarningsstrmessager/   r   )r   r   r   csvwwes         r   csvwvalidaterX   ?   s   E
$MNO
	d,FG	D C+DHHt,=='$x89C'&%x89||A'#aii.&9: '   +gfeF845<<'#a&&)*	+s   :C #A#C 
D)AD$$D)c                    [        SU S/[        SS94SS/[        [        R                  [        R                  " S5      S945      n S	u  p#[	        U R
                  5      n[        UR                  U R                  U-  S
9nUR                  5         0 nS HD  nSR                  U5      UR                  ;   d  M$  UR                  SR                  U5         Xg'   MF     U R                  R                  U5      R                  [        R                  " USS95        [!        SR                  U R                  U-  U R                  U-  5      5        [#        SUS9$ )Nz;Convert CSVW to data for datasette (https://datasette.io/).rB   rC   rD   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   r0   pathlibPathr   rB   r   
tablegroupoutdirwrite_from_tgformatcommon_propsjoinpath
write_textr4   r:   r9   r   )r   r   dbnamemdnamerU   dbmdks           r   csvw2datasetterm   Y   s%   E
$MNO

	Tw||W\\#=NOP	D ?NF>D	$//v)=	>B	B0>>! 1 11%%gnnQ&78BE 1 	KK ++DJJr!,DE	 
 F4;;v!568 r   c           	          [        SU S/[        SS945      n [        U R                  5      n[	        [
        R                  " UR                  5       SS95        [        SUS9$ )	N>Convert CSVW to JSON, see https://w3c.github.io/csvw/csv2json/rB   rC   rD   r)   r*   r   r,   )	r   r0   r   rB   r9   r4   r:   to_jsonr   )r   r   rU   s      r   	csvw2jsonrq   s   sW    H
$MNOD
 >D	$**T\\^A
./r   c           
          [        SU S/[        SS94S/[        SS945      n [        R                  " U R                  5      n[        X R                  5      nUR                  SS9  [        S	US
9$ )Nro   rB   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.rD   outputz,Path for the generated SQLite database file.T)_forcer   r,   )	r   r0   r   	from_filerB   r   rt   rc   r   )r   r   r?   rj   s       r   csvw2sqliterw   ~   s    HG , -	. JDE	GD 
		dhh	'B	"kk	"BD!r   c           	          [        SU S/[        SS945      n [        R                  " U R                  5      n[        [        USS95        [        SUS9$ )	Nro   rB   rs   rD   T)
link_filesr   r,   )r   r0   r   rv   rB   r9   r   r   )r   r   r?   s      r   csvw2markdownrz      s\    HG , -	.	D 
		dhh	'B	
B4
01r   __main__)F)NF)r   r4   r-   r_   r
   r6   	termcolorr   rU   r   r   csvw.dbr   
csvw.utilsr   r   r   r@   rX   rm   rq   rw   rz   __name__ r   r   <module>r      s`    
       !  (B 44(  zK r   