o
    mie                     @   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   ZunsplitbytespathlibPathstrmathisnanisinf)valuecolresZstamp_Zmilliseconds r3   E/home/kim/smarthome/.venv/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   r/   r   )selfr3   r3   r4   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_nameZqnamerdf:typevalueUrl)r:   r;   r5   r6   r/   )headerr9   inheritexpandr=   r   aboutUrl)clstabler0   rowpropvalZrownumr;   r9   Zis_typer=   srB   r3   r3   r4   from_colD   s   
zTriple.from_colN)__name__
__module____qualname____doc__attribr5   r6   r/   r8   classmethodrI   r3   r3   r3   r4   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)
rQ   itemsrefsitemZitemidvsvZrefidrefZsubjectsr3   r3   r4   frame[   s&   


re   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   rS   c                    s*   i | ]\}}|d krdn|t | dqS )r<   z@typeflatten_listr
   ).0krc   rf   r3   r4   
<dictcomp>|   s    zto_json.<locals>.<dictcomp>r   rf   c                    s   g | ]}t | d qS )rf   rh   )ri   rc   rf   r3   r4   
<listcomp>   s    zto_json.<locals>.<listcomp>)r   rY   r\   r_   rX   r
   )objrg   r3   rf   r4   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.
    NrS   r>   zjson-ld)r    c                 S   s    g | ]\}}|t |d dfqS )Trf   rh   )ri   irc   r3   r3   r4   rl      s     z!group_triples.<locals>.<listcomp>c                 S   s   g | ]}|d  qS )r   r3   )ri   rj   r3   r3   r4   rl      s    c                    s$   | d  d  dkrdS | d S )Nr   rS   r   r   )rV   )ogroupedr3   r4   <lambda>   s   $ zgroup_triples.<locals>.<lambda>)keyr   r   )r   r/   rX   r6   extendr[   rT   rU   r5   r   addr8   r_   r   	serialize	enumeratere   jsonloadssortedr\   r]   )rn   ZmergedZtripletgrF   rG   r1   r3   rq   r4   r	      sT   


r	   )F)r   ry   r,   typingr%   r)   r   rT   rN   Zrdflibr   r   r   Zrfc3986r   Zisodate.durationr   utilsr   __all__r   rH   r   rX   re   r
   IterableListrY   r	   r3   r3   r3   r4   <module>   s(    !%
"