
    i,                       d 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mZ ddlmZmZ ddlmZ ddlmZmZmZ dd	lmZmZmZ dd
ZddZddZddZddZddZ ddZ!ddZ"ddZ#ddZ$ddZ%ddZ&ddZ'	 d	 	 	 	 	 	 	 ddZ(y)z+

Code for carrying out Update Operations

    )annotations)TYPE_CHECKINGIteratorMappingOptionalSequence)Graph)evalBGPevalPart)_fillTemplate_join)	CompValue)
FrozenDictQueryContextUpdate)
IdentifierURIRefVariablec                Z    |dk(  r| j                   S | j                  j                  |      S )NDEFAULT)graphdatasetget_context)ctxgs     KC:\Projects\mas-dev\.venv\Lib\site-packages\rdflib/plugins/sparql/update.py_graphOrDefaultr      s(    I~yy{{&&q))    c                X   |dk(  r| j                   gS |dk(  rK| j                  j                         D cg c]'  }|j                  | j                   j                  k7  r|) c}S |dk(  r#t	        | j                  j                               S | j                  j                  |      gS c c}w )z!
    return a list of graphs
    r   NAMEDALL)r   r   contexts
identifierlistr   )r   r   cs      r   	_graphAllr&      s     	I~		{	
g [[))+
 ,||syy333 +
 	
 
eCKK((*++''*++
s   ,B'c                    t         rt        |j                  t              sJ |j                  r)| j                  |j                  d|j                         y| j                  |j                  d       y)z4
    http://www.w3.org/TR/sparql11-update/#load
    F)defaultintoTr(   N)r   
isinstanceirir   graphiriload)r   us     r   evalLoadr0   .   sP    
 !%%(((zzAJJ7%r   c                    | j                   j                  |j                        }t        |      dkD  rt	        d|j
                  z        t	        d      )z6
    http://www.w3.org/TR/sparql11-update/#create
    r   zGraph %s already exists.zCreate not implemented!)r   r   r-   len	Exceptionr#   r   r/   r   s      r   
evalCreater5   <   sH     	

+A
1vz2Q\\ABB
-
..r   c                \    t        | |j                        D ]  }|j                  d        y)z5
    http://www.w3.org/TR/sparql11-update/#clear
    NNNN)r&   r-   remover4   s      r   	evalClearr9   F   s&     sAJJ'	#$ (r   c                    | j                   j                  j                  rAt        | |j                        D ]'  }| j                   j                  j                  |       ) yt        | |       y)z4
    http://www.w3.org/TR/sparql11-update/#drop
    N)r   storegraph_awarer&   r-   remove_graphr9   r4   s      r   evalDropr>   N   sP     {{$$3

+AKK**1- , 	#qr   c                    | j                   }||j                  z  }|j                  D ]/  }| j                  j	                  |      }||j                  |   z  }1 y)z:
    http://www.w3.org/TR/sparql11-update/#insertData
    Nr   triplesquadsr   r   r   r/   r   cgs       r   evalInsertDatarE   Y   sP    
 			ANA WW[[$$Q'
aggaj r   c                    | j                   }||j                  z  }|j                  D ]/  }| j                  j	                  |      }||j                  |   z  }1 y)z:
    http://www.w3.org/TR/sparql11-update/#deleteData
    Nr@   rC   s       r   evalDeleteDatarG   h   sP    
 			ANA WW[[$$Q'
aggaj r   c                   t        | |j                        }|j                  D ]Z  }| j                  j	                  |      }| j                  |      }t        |t        t        ||j                  |                     }\ |D ]~  }| j                  }|t        |j                  |      z  }|j                  D ]H  }| j                  j	                  |j                  |            }|t        |j                  |   |      z  }J  y)z;
    http://www.w3.org/TR/sparql11-update/#deleteWhere
    N)r
   rA   rB   r   r   	pushGraphr   r$   r   r   get)r   r/   resr   rD   r%   s         r   evalDeleteWhererL   x   s    
 !(QYY 7CWW[[$$Q'MM"Cga456  II	]199a((A((q2B-
A..B 	 r   c                   | }|j                   rd}|j                   D ]w  }|j                  r=|st               }| j                  |      } d}| j	                  |j                  d       L|j
                  sY|j
                  }| j	                  |d       y |j                   sB|j                  r6| j                  j                  |j                        }| j                  |      } t        | |j                        }|j                   rFr|} |j                  r6| j                  j                  |j                        }| j                  |      } |D ]8  }| j                  }|j                  r|t        |j                  j                  |      z  }|j                  j                  j!                         D ]>  \  }}	| j                  j                  |j#                  |            }
|
t        |	|      z  }
@ |j$                  s|t        |j$                  j                  |      z  }|j$                  j                  j!                         D ]>  \  }}	| j                  j                  |j#                  |            }
|
t        |	|      z  }
@ ; y )NFTr*   )usingr(   r	   rI   r.   named
withClauser   r   r   wherer   deleter   rA   rB   itemsrJ   insert)r   r/   originalctxotherDefaultddgr   rK   r%   qrD   s              r   
evalModifyrZ      s   K 	wwAyy#B--+C#'LD1GGE* . 77q||KK##ALL1mmA
3
 CwwC<<''5A--"CYY88 - 0 0!44B,,.1[[,,QUU1X6mAq)) / 88 - 0 0!44B,,.1[[,,QUU1X6mAq)) /! r   c                    |j                   \  }}t        | |      }t        | |      }|j                  |j                  k(  ry||z  }y)zY

    add all triples from src to dst

    http://www.w3.org/TR/sparql11-update/#add
    N)r   r   r#   r   r/   srcdstsrcgdstgs         r   evalAddra      sI     wwHC3$D3$D $//) 	DLDr   c                `   |j                   \  }}t        | |      }t        | |      }|j                  |j                  k(  ry|j                  d       ||z  }| j                  j
                  j                  r&| j                  j
                  j                  |       y|j                  d       y)z

    remove all triples from dst
    add all triples from src to dst
    remove all triples from src

    http://www.w3.org/TR/sparql11-update/#move
    Nr7   )r   r   r#   r8   r   r;   r<   r=   r\   s         r   evalMoverc      s     wwHC3$D3$D $//) 	KK"# 	DLD
{{$$&&t, 	&'r   c                    |j                   \  }}t        | |      }t        | |      }|j                  |j                  k(  ry|j                  d       ||z  }y)zz

    remove all triples from dst
    add all triples from src to dst

    http://www.w3.org/TR/sparql11-update/#copy
    Nr7   )r   r   r#   r8   r\   s         r   evalCopyre     sX     wwHC3$D3$D $//) 	KK"# 	DLDr   Nc                b   |j                   D ]  }t        d |xs i j                         D              }t        | |      }|j                  |_        	 |j
                  dk(  rt        ||       n'|j
                  dk(  rt        ||       n
|j
                  dk(  rt        ||       n|j
                  dk(  rt        ||       n|j
                  dk(  rt        ||       n|j
                  dk(  rt        ||       n|j
                  d	k(  rt        ||       n~|j
                  d
k(  rt        ||       nb|j
                  dk(  rt        ||       nF|j
                  dk(  rt        ||       n*|j
                  dk(  rt!        ||       nt#        d|       y#  |j$                  s Y xY w)af  

    http://www.w3.org/TR/sparql11-update/#updateLanguage

    'A request is a sequence of operations [...] Implementations MUST
    ensure that operations of a single request are executed in a
    fashion that guarantees the same effects as executing them in
    lexical order.

    Operations all result either in success or failure.

    If multiple operations are present in a single request, then a
    result of failure from any operation MUST abort the sequence of
    operations, causing the subsequent operations to be ignored.'

    This will return None on success and raise Exceptions on error

    .. caution::

        This method can access indirectly requested network endpoints, for
        example, query processing will attempt to access network endpoints
        specified in ``SERVICE`` directives.

        When processing untrusted or potentially malicious queries, measures
        should be taken to restrict network and file access.

        For information on available security measures, see the RDFLib
        :doc:`Security Considerations </security_considerations>`
        documentation.

    c              3  <   K   | ]  \  }}t        |      |f  y wN)r   ).0kvs      r   	<genexpr>zevalUpdate.<locals>.<genexpr>A  s      V9UAXa[!,9Us   )initBindingsLoadClearDropCreateAddMoveCopy
InsertData
DeleteDataDeleteWhereModifyzUnknown update operation: N)algebradictrS   r   prologuenamer0   r9   r>   r5   ra   rc   re   rE   rG   rL   rZ   r3   silent)r   updaterm   r/   r   s        r   
evalUpdater     sb   J ^^V,:L"9S9S9UVV5|<zz	vva 7"#q!6!a 8#3"5Q6!a 6!a <'sA&<'sA&=(Q'8#3"! EFF= >	88 s   EFF.)r   r   r   strreturnzOptional[Graph])r   r   r   r   r   zSequence[Graph])r   r   r/   r   r   Nonerh   )r   r	   r~   r   rm   z"Optional[Mapping[str, Identifier]]r   r   ))__doc__
__future__r   typingr   r   r   r   r   rdflib.graphr	   rdflib.plugins.sparql.evaluater
   r   rdflib.plugins.sparql.evalutilsr   r   !rdflib.plugins.sparql.parserutilsr   rdflib.plugins.sparql.sparqlr   r   r   rdflib.termr   r   r   r   r&   r0   r5   r9   r>   rE   rG   rL   rZ   ra   rc   re   r    r   r   <module>r      s    # G G  < @ 7 I I 4 4*,(&/% /*=*@((B8 8<FFF 5F 
	Fr   