o
    mi7                     @  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"   U/home/kim/smarthome/.venv/lib/python3.10/site-packages/rdflib/plugins/stores/rdf4j.py
<listcomp>   s    z$_inject_prefixes.<locals>.<listcomp> )setlistitemsjoin)r   r   Z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
   
r2   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   )r3   r"   r"   r&   _default_repo_config.   s
   r4   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   r3   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)r4   r   _client_repository_id_repoopensuper__init__)selfr7   r3   r8   r:   r<   r>   kwargs	__class__r"   r&   rF   M   s   
zRDF4JStore.__init__c                 C  s   | j S r@   )rA   rG   r"   r"   r&   client_   s   zRDF4JStore.clientc                 C  s"   | j d u r| jj| j| _ | j S r@   )rC   rL   repositoriesgetrB   rK   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.)	rO   Zhealthr   rL   rM   r>   rB   r0   r   )rG   r8   r>   r"   r"   r&   rD   i   s   zRDF4JStore.opencommit_pending_transactionNonec                 C  s   | j   d S r@   )rL   close)rG   rR   r"   r"   r&   rT   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   r1   rO   Zupload)	rG   rU   rV   rX   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(   rY   z .
rZ   )	rG   rb   Z
statementsr\   r]   r^   cr_   r`   r"   r"   r&   addN   s   (
zRDF4JStore.addNr   Optional[_ContextType]c                 C  s2   |\}}}|d ur|j nd }| j|||| d S r@   )r[   rO   delete)rG   rU   rV   r\   r]   r^   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[   rO   rN   r/   r   iterr   )
rG   rj   rV   r\   r]   r^   r_   Zresult_graphrh   rU   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 )Nrl   r\   r]   r^   z:SELECT DISTINCT ?graph WHERE { GRAPH ?graph { %s %s %s } }graph)rO   Zgraph_namesr   r2   r   r   )
rG   rU   r_   r\   r]   r^   paramsr   resultrowr"   r"   r&   contexts   s    
zRDF4JStore.contextsprefix	namespacer   overridec                 C  s   | j j|| d S r@   )rO   
namespacesr)   )rG   rv   rw   rx   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"   )rw   rv   )r#   xr"   r"   r&   r'      s    z%RDF4JStore.prefix.<locals>.<listcomp>)dictrO   ry   r*   rN   r   )rG   rw   namespace_prefixesr"   r"   r&   rv      s   zRDF4JStore.prefixOptional[URIRef]c                 C  s"   | j j|}|d urt|S d S r@   )rO   ry   rN   r   )rG   rv   rs   r"   r"   r&   rw      s   zRDF4JStore.namespaceIterator[Tuple[str, URIRef]]c                 c  s*    | j j D ]}|jt|jfV  qd S r@   )rO   ry   r*   rv   r   rw   )rG   rs   r"   r"   r&   ry      s   zRDF4JStore.namespacesrq   r   c                 C  s*   |j tkr| jd|j    d S d S )NzCREATE SILENT GRAPH )r[   r   rO   updater1   rG   rq   r"   r"   r&   	add_graph   s   
zRDF4JStore.add_graphc                 C  s   | j j|j d S r@   )rO   Zgraphsclearr[   r   r"   r"   r&   remove_graph   s   zRDF4JStore.remove_graphintc                 C  s   | j |d u r
|S |jS r@   )rO   sizer[   )rG   rV   r"   r"   r&   __len__   s   zRDF4JStore.__len__)NNr6   F)r7   r   r3   r   r8   r9   r:   r;   r<   r=   r>   r?   )F)r8   rP   r>   r?   r    rQ   )rR   r?   r    rS   )NF)rU   r   rV   rW   rX   r?   r    rS   )rb   rc   r    rS   r@   )rU   r   rV   rf   r    rS   )rj   r   rV   rf   r    rk   )rU   ro   r    rp   )T)rv   r   rw   r   rx   r?   r    rS   )rw   r   r    r{   )rv   r   r    r   )r    r   )rq   r   r    rS   )rV   rW   r    r   )__name__
__module____qualname____doc__Zcontext_awareZformula_awareZtransaction_awareZgraph_awarerF   propertyrL   rO   rD   rT   ra   re   ri   rn   ru   rz   rv   rw   ry   r   r   r   __classcell__r"   r"   rI   r&   r5   E   sF    







r5   N)r   r   r   r   r    r   )r.   r   r    r   )r3   r   r    r   )&
__future__r   textwrapr   typingr   r   r   r   r	   r
   r   Zrdflibr   Zrdflib.contrib.rdf4jr   Zrdflib.contrib.rdf4j.exceptionsr   Zrdflib.graphr   r   r   r   r   r   Zrdflib.storer   r   Zrdflib.termr   r   r   r   r   r-   r2   r4   r5   r"   r"   r"   r&   <module>   s    $ 


	