o
    
i7                     @  s   d dl m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 d dlm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mZm Z  er\d d
lm!Z! dddZ"dddZ#dddZ$G dd deZ%dS )    )annotationsdedent)Any	GeneratorIterableIteratorMappingOptionalTuple)Graph)	has_httpx)RepositoryNotFoundError)DATASET_DEFAULT_GRAPH_IDDataset_ContextType	_QuadType_TriplePatternType_TripleType)VALID_STOREStore)BNodeNodeURIRefVariable)RDF4JClientquerystrextra_bindingsMapping[str, Any]returnc                 C  s8   t t| }|s| S dddd |D d| gS )N
c                 S  s   g | ]
\}}d ||f qS )zPREFIX %s: <%s> ).0kvr"   r"   O/home/ubuntu/.local/lib/python3.10/site-packages/rdflib/plugins/stores/rdf4j.py
<listcomp>   s    z$_inject_prefixes.<locals>.<listcomp> )setlistitemsjoin)r   r   bindingsr"   r"   r&   _inject_prefixes   s   r.   noder   c                 C  s   t | tr	td|  S )NzaSPARQL-based stores do not support BNodesSee http://www.w3.org/TR/sparql11-query/#BGPsparqlBNodes)
isinstancer   	Exceptionn3)r/   r"   r"   r&   _node_to_sparql%   s
   
r3   repository_idc                 C  s   t d|  dS )Nzu
        PREFIX config: <tag:rdf4j.org,2023:config/>

        []    a config:Repository ;
            config:rep.id "a  " ;
            config:rep.impl
                [
                    config:rep.type "openrdf:SailRepository" ;
                    config:sail.impl
                        [
                            config:native.tripleIndexers "spoc,posc" ;
                            config:sail.defaultQueryEvaluationMode "STANDARD" ;
                            config:sail.iterationCacheSyncThreshold "10000" ;
                            config:sail.type "openrdf:NativeStore" ;
                        ] ;
                ] ;
        .
    r   )r4   r"   r"   r&   _default_repo_config.   s
   r5   c                      s   e Zd ZdZdZdZdZdZ				dOdP fddZe	dd Z
e	dd Z	dQdRddZdQdSddZ		dTdUd%d&ZdVd)d*Z	dWdXd-d.Z	dWdYd1d2Z	dWdZd5d6Zd[d\d;d<Zd]d>d?Zd^dAdBZd_dDdEZd`dHdIZd`dJdKZdWdadMdNZ  ZS )b
RDF4JStorezAn RDF4J store.TFN      >@base_urlr   r4   configuration
str | Noneauthtuple[str, str] | Nonetimeoutfloatcreateboolc                   sL   |d u rt |}t|||fi || _|| _d | _| || t   d S N)r5   r   _client_repository_id_repoopensuper__init__)selfr8   r4   r9   r;   r=   r?   kwargs	__class__r"   r&   rG   M   s   
zRDF4JStore.__init__c                 C  s   | j S rA   )rB   rH   r"   r"   r&   client_   s   zRDF4JStore.clientc                 C  s"   | j d u r| jj| j| _ | j S rA   )rD   rM   repositoriesgetrC   rL   r"   r"   r&   repoc   s   
zRDF4JStore.repostr | tuple[str, str] | Noner    
int | Nonec                 C  sX   z| j   W tS  ty+   |r"| jj| j| | j   Y tS td| j dw )NzRepository z not found.)	rP   healthr   rM   rN   r?   rC   r1   r   )rH   r9   r?   r"   r"   r&   rE   i   s   zRDF4JStore.opencommit_pending_transactionNonec                 C  s   | j   d S rA   )rM   close)rH   rT   r"   r"   r&   rV   x   s   zRDF4JStore.closetripler   context_ContextType | Nonequotedc           	      C  sb   |\}}}|d u s|j tkrdn|j  }|  d|  d|  d| d}| j| d S )Nr(    z .
identifierr   r2   rP   upload)	rH   rW   rX   rZ   spo
graph_name	statementr"   r"   r&   add{   s   
(zRDF4JStore.addquadsIterable[_QuadType]c           	   	   C  sv   d}|D ].\}}}}|d u s|j tkrdn|j  }|  d|  d|  d| d}||7 }q| j| d S )Nr(   r[   z .
r\   )	rH   re   
statementsr_   r`   ra   crb   rc   r"   r"   r&   addN   s   (
zRDF4JStore.addNr   Optional[_ContextType]c                 C  s2   |\}}}|d ur|j nd }| j|||| d S rA   )r]   rP   delete)rH   rW   rX   r_   r`   ra   gr"   r"   r&   remove   s   
zRDF4JStore.removetriple_pattern>Iterator[Tuple[_TripleType, Iterator[Optional[_ContextType]]]]c           
      c  s    |\}}}|d ur|j nd }| j||||}t|tr7|D ]\}}}}|||ftt| |dgfV  qd S |D ]
}	|	td gfV  q9d S )Nr]   )r]   rP   rO   r0   r   iterr   )
rH   rn   rX   r_   r`   ra   rb   result_graphrl   rW   r"   r"   r&   triples   s   

 zRDF4JStore.triplesOptional[_TripleType]#Generator[_ContextType, None, None]c           
      c  s    |d u r| j  D ]	}t| |dV  q
d S |\}}}t|r |ntdt|r)|ntdt|r2|ntdf}d| }| j |}|D ]}	t| |	d dV  qDd S )Nrp   r_   r`   ra   z:SELECT DISTINCT ?graph WHERE { GRAPH ?graph { %s %s %s } }graph)rP   graph_namesr   r3   r   r   )
rH   rW   rb   r_   r`   ra   paramsr   resultrowr"   r"   r&   contexts   s    
zRDF4JStore.contextsprefix	namespacer   overridec                 C  s   | j j|| d S rA   )rP   
namespacesr)   )rH   r|   r}   r~   r"   r"   r&   bind   s   zRDF4JStore.bindOptional[str]c                 C  s(   t dd | jj D }|t|S )Nc                 S  s   g | ]}|j |jfqS r"   )r}   r|   )r#   xr"   r"   r&   r'      s    z%RDF4JStore.prefix.<locals>.<listcomp>)dictrP   r   r*   rO   r   )rH   r}   namespace_prefixesr"   r"   r&   r|      s   zRDF4JStore.prefixOptional[URIRef]c                 C  s"   | j j|}|d urt|S d S rA   )rP   r   rO   r   )rH   r|   ry   r"   r"   r&   r}      s   zRDF4JStore.namespaceIterator[Tuple[str, URIRef]]c                 c  s*    | j j D ]}|jt|jfV  qd S rA   )rP   r   r*   r|   r   r}   )rH   ry   r"   r"   r&   r      s   zRDF4JStore.namespacesrv   r   c                 C  s*   |j tkr| jd|j    d S d S )NzCREATE SILENT GRAPH )r]   r   rP   updater2   rH   rv   r"   r"   r&   	add_graph   s   
zRDF4JStore.add_graphc                 C  s   | j j|j d S rA   )rP   graphsclearr]   r   r"   r"   r&   remove_graph   s   zRDF4JStore.remove_graphintc                 C  s   | j |d u r
|S |jS rA   )rP   sizer]   )rH   rX   r"   r"   r&   __len__   s   zRDF4JStore.__len__)NNr7   F)r8   r   r4   r   r9   r:   r;   r<   r=   r>   r?   r@   )F)r9   rQ   r?   r@   r    rR   )rT   r@   r    rU   )NF)rW   r   rX   rY   rZ   r@   r    rU   )re   rf   r    rU   rA   )rW   r   rX   rj   r    rU   )rn   r   rX   rj   r    ro   )rW   rt   r    ru   )T)r|   r   r}   r   r~   r@   r    rU   )r}   r   r    r   )r|   r   r    r   )r    r   )rv   r   r    rU   )rX   rY   r    r   )__name__
__module____qualname____doc__context_awareformula_awaretransaction_awaregraph_awarerG   propertyrM   rP   rE   rV   rd   ri   rm   rs   r{   r   r|   r}   r   r   r   r   __classcell__r"   r"   rJ   r&   r6   E   sF    







r6   N)r   r   r   r   r    r   )r/   r   r    r   )r4   r   r    r   )&
__future__r   textwrapr   typingr   r   r   r   r	   r
   r   rdflibr   rdflib.contrib.rdf4jr   rdflib.contrib.rdf4j.exceptionsr   rdflib.graphr   r   r   r   r   r   rdflib.storer   r   rdflib.termr   r   r   r   r   r.   r3   r5   r6   r"   r"   r"   r&   <module>   s    $ 


	