o
    iV                     @  s   d Z ddlmZ ddlZddlZddlmZ ddlmZm	Z	m
Z
mZmZmZ ddlmZmZ ddlmZmZ ddlmZmZmZ d	gZG d
d	 d	eZdS )z
This is a rdflib plugin for parsing Hextuple files, which are Newline-Delimited JSON
(ndjson) files, into Conjunctive. The store that backs the graph *must* be able to
handle contexts, i.e. multiple graphs.
    )annotationsN)TextIOWrapper)AnyBinaryIOListOptionalTextIOUnion)ConjunctiveGraphGraph)InputSourceParser)BNodeLiteralURIRefHextuplesParserc                   @  s6   e Zd ZdZdd Zddd	ZdddZdddZdS )r   z)
    An RDFLib parser for Hextuples

    c                 C  s   d S )N )selfr   r   V/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/rdflib/plugins/parsers/hext.py__init__   s   zHextuplesParser.__init__linestrreturnList[Optional[Any]]c                 C  s0   t |}dd |D }|d dkrd|d< |S )Nc                 S  s   g | ]
}|d kr
|ndqS ) Nr   ).0xr   r   r   
<listcomp>"   s    z3HextuplesParser._load_json_line.<locals>.<listcomp>   r   )jsonloads)r   r   ret1ret2r   r   r   _load_json_line   s
   
zHextuplesParser._load_json_linecgr
   tupList[Union[str, None]]Nonec                 C  s6  |d d u s|d d u s|d d u s|d d u rt d| |d dr2t|d ddd	}nt|d }t|d }|d d
krKt|d }n/|d dkr]t|d ddd	}n|d d u rpt|d t|d d}n
t|d |d d}|d d urt|d }|||||f d S ||||f d S )Nr      r      z;subject, predicate, value, datatype cannot be None. Given: _z_:r   )valueglobalIdlocalId   )datatype)lang   )
ValueError
startswithr   replacer   r   add)r   r$   r%   spocr   r   r   _parse_hextuple'   s&   0zHextuplesParser._parse_hextuplesourcer   graphr   kwargsr   c                 K  s   | ddvrtd| d d |jjsJ dt|j|jd}||_| }|d u rE|	 }|d u r?t
dt| t|dd	}|D ]}t|d
ksS| rTqG| || | qGd S )Nencoding)Nutf-8z8Hextuples files are always utf-8 encoded, I was passed: z", but I'm still going to use utf-8z-Hextuples Parser needs a context-aware store!)store
identifierzLSource does not have a character stream or a byte stream and cannot be used r?   )r>   r   )getwarningswarnr@   context_awarer
   rA   default_contextgetCharacterStreamgetByteStreamr2   typer   lenisspacer:   r#   )r   r;   r<   r=   r$   text_streambinary_streamr   r   r   r   parseQ   s2   zHextuplesParser.parseN)r   r   r   r   )r$   r
   r%   r&   r   r'   )r;   r   r<   r   r=   r   r   r'   )__name__
__module____qualname____doc__r   r#   r:   rN   r   r   r   r   r      s    


*)rR   
__future__r   r   rC   ior   typingr   r   r   r   r   r	   rdflib.graphr
   r   rdflib.parserr   r   rdflib.termr   r   r   __all__r   r   r   r   r   <module>   s     