o
    ie                     @   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	m
Z
mZmZ d dlmZ d dlmZ ddlmZ g dZdd	 ZejG d
d dZdedefddZdddZdeje deje fddZdS )    N)GraphURIRefLiteral)URIReference)Duration   )is_url)group_triplesto_jsonTripleformat_valuec                 C   sb  t | tjtjtjfrQ|  }|r|jjdkr|dd }|r-|jjdkr-t	dd|}t | tjtjfrO|
d\}}}|rId||d	S |d
dS |S t | tjr]|j| S t | trh|j| S t | tjrrt| } t | tr{|  S t | tr|j| S t | tjrt| S t | trt| rdS t| rd| dk rdS dS | S | S )z,
    Format values as JSON-LD literals.
    timeTdatez	T[0-9.:]+ .z{}.{}0z+00:00ZNaNz{}INFr   -)
isinstancedatetimer   r   	isoformatdatatypebasesplitresub	partitionformatrstripreplace	timedelta	formattedr   decimalDecimalfloatr   unsplitbytespathlibPathstrmathisnanisinf)valuecolresstamp_milliseconds r6   ?/home/ubuntu/.local/lib/python3.10/site-packages/csvw/jsonld.pyr      sB   




r   c                   @   s<   e Zd ZdZe Ze Ze Zdd Z	e
dd ZdS )r   z,
    A table cell's data as RDF triple.
    c                 C   s2   t | jt | jt| jrt | jfS t| jfS )N)r   aboutpropertyr   r0   r   )selfr6   r6   r7   as_rdflib_triple>   s   zTriple.as_rdflib_triplec                 C   s   |r|j nd}|r|jn|d}|r|j||||dd}|dk}	|r&|jn|d}
|
r7|j|
||||	d}t||}d}|rC|jnd}|rR|j||||dpQ|}| |||dS )	z


        NpropertyUrlT)_row_nameqnamerdf:typevalueUrl)r=   r>   r8   r9   r0   )headerr<   inheritexpandrA   r   aboutUrl)clstabler1   rowpropvalrownumr>   r<   is_typerA   srF   r6   r6   r7   from_colD   s   
zTriple.from_colN)__name__
__module____qualname____doc__attribr8   r9   r0   r;   classmethodrO   r6   r6   r6   r7   r   5   s    r   datareturnc           
      C   s   t  i }}| D ]:}|d}|r|||< | D ](}t|ts$|gn|D ]}t|trA|d}|rA|||g fd | q&qq	| D ]\}}	t	|	dkrb|d |v rb|
||d  qHt| S )z
    Inline referenced items to force a deterministic graph layout.

    .. see:: https://w3c.github.io/json-ld-framing/#introduction
    @idr   )collectionsOrderedDictgetvaluesr   listdict
setdefaultappendlenupdatepop)
rW   itemsrefsitemitemidvsvrefidrefsubjectsr6   r6   r7   frame[   s&   


rn   Fc                    s   t | trd| v r| d } t| dkrd| v r| d } t | tr+ fdd|  D S t | trIt| dkr@ r@t| d  dS  fdd	| D S | S )
z?
    Simplify JSON-LD data by refactoring trivial objects.
    z@valuer   rY   c                    s*   i | ]\}}|d krdn|t | dqS )r@   z@typeflatten_listr
   ).0krj   ro   r6   r7   
<dictcomp>|   s    zto_json.<locals>.<dictcomp>r   ro   c                    s   g | ]}t | d qS )ro   rq   )rr   rj   ro   r6   r7   
<listcomp>   s    zto_json.<locals>.<listcomp>)r   r_   rb   re   r^   r
   )objrp   r6   ro   r7   r
   r   s   



r
   triplesc                    s  g }| D ]-}t |jtr,|D ]}|j|jkr%t |jtr%|j|j  nq|| q|| qt  g } |D ]B}|jdu rM|jdkrM|j |j< q:|jsw|j v rpt  |j tsf |j g |j<  |j |j q:|j |j< q:| | q:| s gS t	 }| D ]	}|
|  qd v r  D ]\}}|dkr|
t d ||d  q|jdd}dd ttt|D }dd t| fd	d
dD } rd vrt|dkr |d   gS |S )z@
    Group and frame triples into a `list` of JSON objects.
    NrY   rB   zjson-ld)r    c                 S   s    g | ]\}}|t |d dfqS )Tro   rq   )rr   irj   r6   r6   r7   ru      s     z!group_triples.<locals>.<listcomp>c                 S   s   g | ]}|d  qS )r   r6   )rr   rs   r6   r6   r7   ru      s    c                    s$   | d  d  dkrdS | d S )Nr   rY   r   r   )r\   )ogroupedr6   r7   <lambda>   s   $ zgroup_triples.<locals>.<lambda>)keyr   r   )r   r0   r^   r9   extendra   rZ   r[   r8   r   addr;   re   r   	serialize	enumeratern   jsonloadssortedrb   rc   )rw   mergedtripletgrJ   rK   r2   r6   rz   r7   r	      sT   


r	   )F)r   r   r-   typingr%   r*   r   rZ   rT   rdflibr   r   r   rfc3986r   isodate.durationr   utilsr   __all__r   rN   r   r^   rn   r
   IterableListr_   r	   r6   r6   r6   r7   <module>   s(    !%
"