o
    mi                     @  s   d Z ddlmZ ddlmZ ddlmZmZmZ ddl	m
Z ddlmZmZmZ ddlmZ ddlmZmZmZ dd	lmZ d
gZeeef ZG dd
 d
eZdS )a  
This is a rdflib plugin for parsing NQuad files into Conjunctive
graphs that can be used and queried. The store that backs the graph
*must* be able to handle contexts.

```python
>>> from rdflib import ConjunctiveGraph, URIRef, Namespace
>>> g = ConjunctiveGraph()
>>> data = open("test/data/nquads.rdflib/example.nquads", "rb")
>>> g.parse(data, format="nquads") # doctest:+ELLIPSIS
<Graph identifier=... (<class 'rdflib.graph.ConjunctiveGraph'>)>
>>> assert len(g.store) == 449
>>> # There should be 16 separate contexts
>>> assert len([x for x in g.store.contexts()]) == 16
>>> # is the name of entity E10009 "Arco Publications"?
>>> #   (in graph http://bibliographica.org/entity/E10009)
>>> # Looking for:
>>> # <http://bibliographica.org/entity/E10009>
>>> #   <http://xmlns.com/foaf/0.1/name>
>>> #   "Arco Publications"
>>> #   <http://bibliographica.org/entity/E10009>
>>> s = URIRef("http://bibliographica.org/entity/E10009")
>>> FOAF = Namespace("http://xmlns.com/foaf/0.1/")
>>> assert(g.value(s, FOAF.name).eq("Arco Publications"))

```
    )annotations)	getreader)AnyMutableMappingOptional)ParserError)ConjunctiveGraphDatasetGraph)InputSource)W3CNTriplesParserr_tailr_wspace)BNodeNQuadsParserc                   @  s(   e Zd Z		ddddZddddZdS )r   NFinputsourcer   sinkr
   bnode_contextOptional[_BNodeContextType]	skolemizeboolkwargsr   c              
   K  s$  |j jsJ dt|j dd}|j}d}t|ttfr|j}n|jdur3|j|jkr-|}n||j}|dur?||_|| || _	|| _
| }	|	sU| }	td|	}	t|	ds^td|	| _d| _	 |   | _}
| jdu ru	 | j	S z| | W n ty } ztd	||
f d}~ww qe)
a  Parse inputsource as an N-Quads file.

        Args:
            inputsource: The source of N-Quads-formatted data.
            sink: The graph where parsed quads will be stored.
            bnode_context: Optional dictionary mapping blank node identifiers to
                [`BNode`][rdflib.term.BNode] instances.
                See `.W3CNTriplesParser.parse` for more details.
            skolemize: Whether to skolemize blank nodes.

        Returns:
            The Dataset containing the parsed quads.

        Raises:
            AssertionError: If the sink store is not context-aware.
            ParseError: If the input is not a file-like object or contains invalid lines.
        z1NQuadsParser must be given a context-aware store.T)storeZdefault_unionNzutf-8readz)Item to parse must be a file-like object. zInvalid line (%s):
%r)r   Zcontext_awarer	   default_context
isinstancer   
identifierget_contextZremove_graphr   r   ZgetCharacterStreamZgetByteStreamr   hasattr
ParseErrorfilebufferreadlineline	parseline)selfr   r   r   r   r   ZdsZ
ds_defaultZnew_default_contextsourceZ_NQuadsParser__linemsg r)   W/home/kim/smarthome/.venv/lib/python3.10/site-packages/rdflib/plugins/parsers/nquads.pyparse2   sL   



zNQuadsParser.parsereturnNonec                 C  s   |  t | jr| jdrd S | |}|  t |  }|  t | |}|  t |  p5| |}|  t	 | jrBt
d|rR| j||||f d S | jj|||f d S )N#zTrailing garbage)Zeatr   r$   
startswithsubject	predicateobjectZurirefZnodeidr   r    r   r   addr   )r&   r   r0   r1   objcontextr)   r)   r*   r%   v   s    






zNQuadsParser.parseline)NF)
r   r   r   r
   r   r   r   r   r   r   )N)r   r   r,   r-   )__name__
__module____qualname__r+   r%   r)   r)   r)   r*   r   /   s
    DN)__doc__
__future__r   codecsr   typingr   r   r   Zrdflib.exceptionsr   r    Zrdflib.graphr   r	   r
   Zrdflib.parserr   Zrdflib.plugins.parsers.ntriplesr   r   r   Zrdflib.termr   __all__strZ_BNodeContextTyper   r)   r)   r)   r*   <module>   s    