
    Pi\                      L    d Z ddlZddlZd Zd Zd Zd Z G d d          ZdS )	a  
Functionality to convert tabular data in Frictionless Data Packages to CSVW.

We translate [table schemas](https://specs.frictionlessdata.io/table-schema/) defined
for [data resources](https://specs.frictionlessdata.io/data-resource/) in a
[data package](https://specs.frictionlessdata.io/data-package/) to a CVSW TableGroup.

This functionality can be used together with the `frictionless describe` command to add
CSVW metadata to "raw" CSV tables.
    Nc                 z    ddd}d                       d          fD             } d         ddid	}d
 v r d
         dk    r&                      d          dk    rd|d         d<   nۉ d
         dk    r&                      d          dk    rd|d         d<   n d
         |v r| d
                  |d         d<   n d
         dv r8 d
         |d         d<    d
         dk    r&                      d          r d         |d         d<    d
         dk    ra                      d          rL                      d          r7d                     d         d          d         d                   |d         d<    d
         dv r}                      d          du rt          d          t           fddD                       r<i |d         d<   dD ].}                      |          r |         |d         d         |<   /nC d
         dv rd|d         d<   d|d         d<   n" d
         d k    rd|d         d<   d!|d         d<   |r||d"<   d# v r d#         g|d$<   d% v r d%         |d&<                         d'i           }d(D ]6}||v r||         |d         |<   d)|v rd|d         vr|d)         |d         d<   7|S )*zj
    https://specs.frictionlessdata.io/table-schema/#field-descriptors

    :param spec:
    :return:
    gYear
gYearMonth)year	yearmonthc                     g | ]}||S  r	   ).0ts     e/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/csvw/frictionless.py
<listcomp>z'convert_column_spec.<locals>.<listcomp>   s    222A2a222    titlenamebasestring)r   datatypetypeformatbinaryr   urianyURI)r   numberintegerbooleandatetimedatetimedurationz	dc:formatr   
trueValuesfalseValuesz{}|{}r   )r   r   
bareNumberTzbareNumber is not supported in CSVW. It may be possible to translate to a number pattern, though. See https://www.w3.org/TR/2015/REC-tabular-data-model-20151217/#formats-for-numeric-typesc              3       K   | ]}|v V  	d S Nr	   )r
   propspecs     r   	<genexpr>z&convert_column_spec.<locals>.<genexpr>5   s'      MMtt|MMMMMMr   )decimalChar	groupChar)objectarrayjsonzapplication/jsongeojsonzapplication/geo+jsontitlesdescriptiondc:descriptionrdfTypepropertyUrlconstraints)required	minLength	maxLengthminimummaximumpattern)getr   NotImplementedErrorany)r&   typemapr.   respr3   r%   s   `      r   convert_column_specr@      s|    ! G
 32$((7++,222F<fh-?
@
@C~~<8##(:(:h(F(F&.C
OF##&\X%%$((8*<*<*E*E&.C
OF##&\W$$&-d6l&;C
OF##&\ 
 
 
 '+6lC
OF#F|x''DHHX,>,>'/3H~J,F|y((TXXl-C-C(Q^H_H_(,3NN&q)4+>q+A-C -CJ)F|44488L))T11-56 6 6
 MMMM0LMMMMM C02C
OH-9 C C88A;; C;?7C
OH5a8&\000&,C
OF#+=C
OK((&\Y&&&,C
OF#+AC
OK( H!%m!4 5D!)_M((="--KL ? ?;$/$5C
OD!$$83z?+J+J(3I(>C
OH% Jr   c           	          t          |d         t          |d         d         ||d         d         p|                              S )zF
    https://specs.frictionlessdata.io/table-schema/#foreign-keys
    fields	referenceresource)columnReferencerD   )rE   rC   )dict)rsc_namefkresource_maps      r   convert_foreignKeyrJ   S   sV     8{OH5!"[/*"="IJ
 
 
   r   c                      t          d |d         D                       }dD ]L}t          |t                    r|\  }}n|}||v r)||         ||<   |dk    r fd||         D             ||<   M|S )a  
    :param rsc_name: `name` property of the resource the schema belongs to. Needed to resolve     self-referential foreign keys.
    :param schema: `dict` parsed from JSON representing a frictionless Table Schema object.
    :param resource_map: `dict` mapping resource names to resource paths, needed to convert foreign    key constraints.
    :return: `dict` suitable for instantiating a `csvw.metadata.Schema` object.
    c                 ,    g | ]}t          |          S r	   )r@   )r
   fs     r   r   z(convert_table_schema.<locals>.<listcomp>l   s!    BBBA$Q''BBBr   rB   )columns))missingValuesnull
primaryKeyforeignKeysrR   c                 2    g | ]}t          |          S r	   )rJ   )r
   rH   rI   rG   s     r   r   z(convert_table_schema.<locals>.<listcomp>z   s'    dddRT1(BMMdddr   )rF   
isinstancetuple)rG   schemarI   r>   r%   toprops   ` `   r   convert_table_schemarX   b   s     BB1ABBB  C e e
 dE"" 	LD&&F6>> ,CK}$$dddddX[\bXcdddFJr   c                    |                      di           }d|v r|d         }i }|                     d          r|d         |d<   |                      d          r| d         |d<   dD ]}||v r||         ||<   d|v r|d         |d<   |S )zk
    Limitations: lineTerminator is not supported.

    https://specs.frictionlessdata.io/csv-dialect/
    dialectcsv	delimiterencoding)r\   	quoteChardoubleQuoteskipInitialSpaceheadercommentCharcommentPrefix)r:   )rscdr>   r%   s       r   convert_dialectrf   ~   s     		2AzzeH
Cuu[ *[>K
wwz *j/J     199$CI /OJr   c                       e Zd ZddZddZdS )DataPackageNc                    t          |t                    r|j        | _        |j        | _        d S t          |t                    rt          j        |pd          | _        nt          |t
          j                  r7|p|j        | _        t          j        |	                    d                    }n/t          j        |          }t          j        |pd          | _        || _        d S )N.utf8)r]   )
rT   rh   r,   dirrF   pathlibPathparentloads	read_text)selfr&   	directorys      r   __init__zDataPackage.__init__   s    dK(( 		DIxDHFdD!! 	6|I$455DHHgl++ 	6 /DKDH:dnnfn==>>DD:d##D|I$455DH			r   c           	      J   ddl m} ddi}t          j        | j                  |d<   dD ]\  }}|| j        v r| j        |         ||<   d| j        v r3d| j        vr| j        d         |d	<   nd
| j        vr| j        d         |d<   d | j                            dg           D             }d |D             }|D ]}|                    d          }	|	r|                    d          dk    r|                    d          dk    rx|                    dg            t          |d         t          |                    d          |	|          t          |                    }
|d         	                    |
           |p|}|
                    |          }| j        dz  |_        |S )Nr   )
TableGroupz@contextzhttp://www.w3.org/ns/csvwzdc:replaces)
)iddc:identifier)licensesz
dc:license)r   dc:title)homepagezdcat:accessURL)r/   r0   )sourcesz	dc:source)contributorszdc:contributor)profilezdc:conformsTo)keywordsz
dc:subject)createdz
dc:createdr   rw   rx   r   rz   c                     g | ]}d |v |	S )pathr	   r
   rd   s     r   r   z-DataPackage.to_tablegroup.<locals>.<listcomp>   s    TTTSfPSmmSmmmr   	resourcesc                 4    i | ]}d |v |d          |d         S )r   r   r	   r   s     r   
<dictcomp>z-DataPackage.to_tablegroup.<locals>.<dictcomp>   s(    WWWSSVFS[r   rV   schemefiler   r[   tablesr   )urltableSchemarZ   zcsvw-metadata.json)csvwrv   r,   dumpsr:   
setdefaultrF   rX   rf   append	fromvaluerl   _fname)rr   clsrv   mdflpropcsvwpropr   rI   rd   rV   tabler>   s               r   to_tablegroupzDataPackage.to_tablegroup   s   ######56 Jty11=
!
 	1 	1FH ""#y08TY49$$&*i&7?##	))!%6!2: UTDIMM+r$B$BTTT	WWIWWW 	+ 	+CWWX&&F 
+GGH%%//GGH%%..h+++F 4SWWV__fl [ [+C00  
 8##E***ZmmBX 44

r   r$   )__name__
__module____qualname__rt   r   r	   r   r   rh   rh      s<           "3 3 3 3 3 3r   rh   )__doc__r,   rm   r@   rJ   rX   rf   rh   r	   r   r   <module>r      s   	 	  A A AH    8  :E E E E E E E E E Er   