
    i;                        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mZ ddlmZmZmZ ddlmZmZ ddlmZmZmZ 	 ddlZd	ZerddlmZ dgZ G d de      Zy# e$ r dZd
ZY "w xY w)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)TYPE_CHECKINGAnyBinaryIOListOptionalTextIOUnion)ConjunctiveGraphDatasetGraph)InputSourceParser)BNodeLiteralURIRefTF)BufferedReaderHextuplesParserc                  @     e Zd ZdZ fdZ	 	 	 	 	 	 ddZdddZ xZS )r   z(
    An RDFLib parser for Hextuples
    c                F    t         t        |           d | _        d| _        y )NF)superr   __init__default_context	skolemize)self	__class__s    JC:\Projects\mas-dev\.venv\Lib\site-packages\rdflib/plugins/parsers/hext.pyr   zHextuplesParser.__init__%   s    ot-/04    c                   |d   |d   
|d   |d   t        d|       |d   j                  d      r<t        |d   j                  dd      	      }| j                  r|j	                         }nt        |d         }t        |d         }|d   d
k(  rt        |d         }ny|d   dk(  r<t        |d   j                  dd      	      }| j                  rF|j	                         }n5|d   t        |d   t        |d               }nt        |d   |d         }|d   |d   j                  d      rt        |d   j                  dd            nt        |d         }t        |t              r| j                  r|j	                         }|j                  |      j                  |||f       y | j                  | j                  j                  |||f       y t        d      )Nr            z;subject, predicate, value, datatype cannot be None. Given: _z_: )valueglobalIdlocalId   )datatype)lang   zNo context to parse into!)
ValueError
startswithr   replacer   r   r   
isinstanceget_contextaddr   	Exception)r   dstupspocs          r   _parse_hextuplezHextuplesParser._parse_hextuple*   s    q6>SV^s1v~QMcUS  q6S!CFNN445A~~KKMs1vA 3q6N q6Zs1vAVy CFNN445A~~KKM1v~CFVCF^<CFQ0 q6 q6$$T* c!fnnT2./CF^ 
 !U#KKMNN1!!1a),!!-  $$aAY/788r   c                   |j                  d      dvr(t        j                  d|j                  d       d       |j                  j                  sJ d       || _        t        |j                  d      }|j                  }t        |t        t        f      r|j                  | _        nU|j                  B|j                  |j                  k(  r|| _        n(|j                  |j                        | _        n|| _        | j                  |ur"| j                  |_        |j                  |       	 |j                         }	 |j!                         }||t#        dt%        |             t&        r||J t(        r0||}	nt&        rt        |t*              sJ |}	t,        j.                  }
n:||}	n%t&        rt        |t0              sJ t+        |d	
      }	t2        j.                  }
|	D ]^  }t5        |      dk(  s|j7                         r" |
|      }|D cg c]  }|dk7  r|nd  }}|d   dk(  rd|d<   | j9                  ||       ` y # t        t        f$ r d }Y  w xY w# t        t        f$ r d }Y 'w xY wc c}w )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!T)storedefault_unionzLSource does not have a character stream or a byte stream and cannot be used r=   )r<   r   r%   r"   )getwarningswarnr>   context_awarer   r   r   r0   r   
identifierr1   remove_graphgetCharacterStreamAttributeErrorLookupErrorgetByteStreamr-   typer   _HAS_ORJSONr   orjsonloadsr   jsonlenisspacer:   )r   sourcegraphr   kwargsr4   
ds_defaulttext_streambinary_stream
use_streamrM   lineraw_linexhex_tuple_lines                  r   parsezHextuplesParser.parse`   s   ::j!8MM!!'J!7 8 933 KK%%	;:	;% #5;;d;''
eg'789#(#8#8D ):#8#88',$')~~e6F6F'G$ $.D z1!%!5!5BOOJ'	,2,E,E,GK	!060D0D0FM =#8^_cdj_k^lm  *m.GGG(*
 %k=AAA(
LLE&(
 %m^DDD*=7K
JJED4yA~  #(+H>FGh17a4hNG{b $&q!  ^4 ? , 	K	 , 	! M	!J Hs*   1I I% I=I"!I"%I:9I:)r4   z Union[Dataset, ConjunctiveGraph]r5   zList[Union[str, None]]returnNone)F)
rQ   r   rR   r   r   boolrS   r   r]   r^   )__name__
__module____qualname____doc__r   r:   r\   __classcell__)r   s   @r   r   r       s7    
392399O39	39lL5 L5r   ) rc   
__future__r   rN   rA   ior   typingr   r   r   r   r	   r
   r   rdflib.graphr   r   r   rdflib.parserr   r   rdflib.termr   r   r   rL   rK   ImportErrorr   __all__r    r   r   <module>rn      sv    #    N N N 9 9 - . .K
 !
L5f L5  FKs   A# #	A/.A/