
    i:                        d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	m
Z
mZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZmZmZmZ d d
lmZmZ erd dlZddgZe	e ef   Z! G d de      Z" G d de      Z#y)    )annotations)	getreader)Enum)TYPE_CHECKINGAnyMutableMappingOptionalUnion)ParserError)Dataset)InputSource)NQuadsParser)r_nodeidr_tailr_urirefr_wspace)BNodeURIRefNRDFPatchParser	Operationc                  0    e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zy
)r   a  
    Enum of RDF Patch operations.

    Operations:
    - `AddTripleOrQuad` (A): Adds a triple or quad.
    - `DeleteTripleOrQuad` (D): Deletes a triple or quad.
    - `AddPrefix` (PA): Adds a prefix.
    - `DeletePrefix` (PD): Deletes a prefix.
    - `TransactionStart` (TX): Starts a transaction.
    - `TransactionCommit` (TC): Commits a transaction.
    - `TransactionAbort` (TA): Aborts a transaction.
    - `Header` (H): Specifies a header.
    ADPAPDTXTCTAHN)__name__
__module____qualname____doc__AddTripleOrQuadDeleteTripleOrQuad	AddPrefixDeletePrefixTransactionStartTransactionCommitTransactionAbortHeader     KC:\Projects\mas-dev\.venv\Lib\site-packages\rdflib/plugins/parsers/patch.pyr   r      s5     OILFr-   c                      e Zd Z	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZdddZ	 d	 	 	 ddZd Zd ZddZddZ		 d	 	 	 dd	Z
d
 Zy)r   Nc                   |j                   j                  sJ d       t        |j                         | _        || _        |j                         }|s!|j                         } t        d      |      }t        |d      st        d      || _
        d| _        	 | j                         x| _        }| j                  	 | j                  S 	 | j                  |       C# t        $ r}t        d|d	|      d}~ww xY w)
a  
        Parse inputsource as an RDF Patch file.

        :type inputsource: `rdflib.parser.InputSource`
        :param inputsource: the source of RDF Patch formatted data
        :type sink: `rdflib.graph.Dataset`
        :param sink: where to send parsed data
        :type bnode_context: `dict`, optional
        :param bnode_context: a dict mapping blank node identifiers to `~rdflib.term.BNode` instances.
                              See `.W3CNTriplesParser.parse`
        z3RDFPatchParser must be given a context aware store.)storezutf-8readz)Item to parse must be a file-like object. NzInvalid line (z):
)r1   context_awarer   sink	skolemizegetCharacterStreamgetByteStreamr   hasattr
ParseErrorfilebufferreadlineline
parsepatch)	selfinputsourcer5   bnode_contextr6   kwargssource_RDFPatchParser__linemsgs	            r.   parsezRDFPatchParser.parse2   s    & zz'' 	
D	
' %4::6	"//1 ..0F'Yw'/Fvv&HII	!%0DIyy 
 yy	K.   K S&!IJJKs   
C 	C;%C66C;c                   | j                  t               | j                  r| j                  j                  d      ry | j	                         }| j                  t               |t
        j                  t
        j                  fv r| j                  ||       y |t
        j                  k(  r| j                          y |t
        j                  k(  r| j                          y y )N#)eatr   r>   
startswith	operationr   r$   r%   add_or_remove_triple_or_quadr&   
add_prefixr'   delete_prefix)r@   rB   rL   s      r.   r?   zRDFPatchParser.parsepatch`   s     		dii2237 NN$	22I4P4PQQ--iG)---OO)000  1r-   c                   | j                  t               | j                  r| j                  j                  d      ry | j	                         xs | j                  |      }| j                  t               | j                         }| j                  t               | j	                         xs | j                  |      }| j                  t               | j	                         xs# | j                         xs | j                  |      }| j                  t               | j                  rt        d      |t        j                  k(  rY|r.| j                  j                  |      j!                  |||f       y | j                  j"                  j!                  |||f       y |t        j$                  k(  rY|r.| j                  j                  |      j'                  |||f       y | j                  j"                  j'                  |||f       y y )NrI   zTrailing garbage)rJ   r   r>   rK   labeled_bnodesubject	predicateobjecturirefnodeidr   r:   r   r$   r5   get_contextadddefault_contextr%   remove)r@   rL   rB   rR   rS   objcontexts          r.   rM   z+RDFPatchParser.add_or_remove_triple_or_quadr   s    			dii2237$$&E$,,}*ENN$	  "@dkk-&@$$&U$++-U4;;};U99/00 	111		%%g.22GY3LM		))--w	3.GH)666		%%g.55w	36OP		))00'9c1JK	 7r-   c                    | j                   j                  dd      j                  dd      j                  d      \  }}}|j                  d      }| j                  j                  ||       y )N"r3   ' z<>)r>   replacesplitstripr5   bind)r@   prefixns_ns_strippeds        r.   rN   zRDFPatchParser.add_prefix   sU    		))#r2::3CII#NAhhtn		v{+r-   c                    | j                   j                  dd      j                  dd      j                  d      \  }}}| j                  j                  j                  |d d       y )Nr^   r3   r_   r`   T)ra   )r>   ra   rb   r5   namespace_managerrd   )r@   re   rg   s      r.   rO   zRDFPatchParser.delete_prefix   sU    yy((b199#rBHHM1		##((t(Dr-   c                6   t         D ]F  }| j                  j                  |j                        s)| j	                  |j                         |c S  t        d| j                   ddj                  t         D cg c]  }|j                   c}             c c}w )Nz(Invalid or no Operation found in line: "z". Valid Operations codes are z, )r   r>   rK   valueeat_op
ValueErrorjoinr@   ops     r.   rL   zRDFPatchParser.operation   s    Byy##BHH-BHH%	  6tyyk By#AyBHHy#ABCE
 	
#As   6Bc                D    | j                   j                  |      | _         y N)r>   lstriprp   s     r.   rm   zRDFPatchParser.eat_op   s    II$$R(	r-   c                    | j                  d      r-t        | j                  t              j	                  d            S y)Nrg      F)peekr   rJ   r   group)r@   rB   s     r.   rV   zRDFPatchParser.nodeid   s1     99S>(+11!455r-   c                    | j                  d      rS| j                  t              j                  d      }t	        j
                  |      j                  d      }t        |      S y)Nz<_rv   F)rw   rJ   r   rx   r   matchr   )r@   	plain_uribnode_ids      r.   rQ   zRDFPatchParser.labeled_bnode   sL    99T?*003I~~i066q9H?"r-   )NF)rA   r   r5   r   rB   Optional[_BNodeContextType]r6   boolrC   r   returnr   rs   )rB   r}   r   None)r   r   )rq   strr   r   )rB   r}   r   z'Union[te.Literal[False], BNode, URIRef])r    r!   r"   rG   r?   rM   rN   rO   rL   rm   rV   rQ   r,   r-   r.   r   r   1   s    
 6:, , , 3	,
 , , 
,\!& GK L(C L	 LD,E
) <@8	0r-   )$
__future__r   codecsr   enumr   typingr   r   r   r	   r
   rdflib.exceptionsr   r:   rdflib.graphr   rdflib.parserr   rdflib.plugins.parsers.nquadsr   rdflib.plugins.parsers.ntriplesr   r   r   r   rdflib.termr   r   typing_extensionste__all__r   _BNodeContextTyper   r   r,   r-   r.   <module>r      se    "   F F 7   % 6 Q P %"[
)"3:.  2F\ Fr-   