
    Pi                       d dl mZ d dlZd dlZd dlZd dlmZ d dlmZm	Z	m
Z
 d dlmZ d dlmZ d dlmZmZ d dlmZ d d	lmZmZ d d
lmZ d dlmZmZ  ej        e          Zerd dlZ  G d de!          Z" G d d          Z#ddgZ$dS )    )annotationsN)BytesIO)TYPE_CHECKINGOptionalTuple)	HTTPError)	urlencode)Requesturlopen)plugins)ResultResultParser)BNode)FORMAT_MIMETYPE_MAP"RESPONSE_TABLE_FORMAT_MIMETYPE_MAPc                      e Zd ZdS )SPARQLConnectorExceptionN)__name__
__module____qualname__     y/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/rdflib/plugins/stores/sparqlconnector.pyr   r      s        Dr   r   c                      e Zd ZdZ	 	 	 	 	 dddZedd            Zej        dd            Z	 	 dddZ	 	 dd dZ	ddZ
dS )!SPARQLConnectorzR
    this class deals with nitty gritty details of talking to a SPARQL server
    NxmlGETquery_endpointOptional[str]update_endpointreturnFormatmethod&te.Literal['GET', 'POST', 'POST_FORM']authOptional[Tuple[str, str]]c                   |  || _         || _        || _        || _        || _        |t          |          t          urt          d          t          |          dk    rt          d          t          j
        t          d|z  d                    }| j                            di            | j        d                             dd	|                    d
          z  i           dS dS )z
        auth, if present, must be a tuple of (username, password) used for Basic Authentication

        Any additional keyword arguments will be passed to to the request, and can be used to setup timeouts etc.
        Nzauth must be a tuple   z%auth must be a tuple (user, password)z%s:%sasciiheadersAuthorizationzBasic %szutf-8)r!   r   r    kwargsr"   typetupler   lenbase64	b64encodebytes
setdefaultupdatedecode)selfr   r    r!   r"   r$   r+   base64strings           r   __init__zSPARQLConnector.__init__    s     	(,.Dzz&&./EFFF4yyA~~./VWWW!+E'D.',J,JKKLK""9b111K	")) *|/B/B7/K/K"KL     r   returnstrc                    | j         S )N)_method)r5   s    r   r"   zSPARQLConnector.method?   s
    |r   Nonec                :    |dvrt          d          || _        d S )N)r   POST	POST_FORMz,Method must be "GET", "POST", or "POST_FORM")r   r;   )r5   r"   s     r   r"   zSPARQLConnector.methodC   s0    555*>   r   querydefault_graphnamed_graphr   c           	     F   | j         st          d          i }|t          |          t          ur||d<   d|                                 i}t          j        | j                  }|                    di            |                    di            |d         	                    |           | j
        dk    r||d<   |d         	                    |           dt          |d                   z   }	 t          t          | j         |z   |d         	                    }n# t          $ r}	t          d
          d }	~	ww xY w| j
        dk    r|d         	                    ddi           |d         	                    |           dt          |d                   z   }	 t          t          | j         |z   |                                |d                             }n# t"          $ r!}	|	j        t'          |	          d fcY d }	~	S d }	~	ww xY w| j
        dk    r||d<   |d         	                    |           	 t          t          | j         t          |d                                                   |d                             }nE# t"          $ r!}	|	j        t'          |	          d fcY d }	~	S d }	~	ww xY wt          d| j
        z            t)          j        t-          |                                          |j        d                             d          d                   S )NQuery endpoint not set!zdefault-graph-uriAcceptparamsr)   r   r@   ?)r)   zGYou did something wrong formulating either the URI or your SPARQL queryr>   Content-Typezapplication/sparql-querydatar)   r?   zUnknown method %s;r   )content_type)r   r   r,   r   response_mime_typescopydeepcopyr+   r2   r3   r"   r	   r   r
   	Exception
ValueErrorencoder   coder9   r   parser   readr)   split)
r5   r@   rA   rB   rF   r)   argsqsareses
             r   r@   zSPARQLConnector.queryL   sh    " 	F*+DEEE$m)<)<E)I)I*7F&'T55778}T[)) 	"%%%	2&&&Yw''';%#F7ON!!&)))	$x.111CD/#5tIOOO      ]   [F""O""N4N#OPPPN!!&)))	$x.111C
,+c1"\\^^ $Y     , , ,vs1vvt+++++++, [K''#F7ON!!&)))
,+&tH~66==?? $Y     , , ,vs1vvt+++++++, ++>+LMMM|CHHJJck..I.O.OPS.T.TUV.W
 
 
 	
sU   0,D 
D<(D77D<?G 
H%H;HH5AJ 
J0J+%J0+J0c                $   | j         st          d          i }|||d<   |||d<   |                                 dd}t          j        | j                  }|                    di            |d                             |           |                    di            |d                             |           dt          |d                   z   }t          t          | j         |z   |                                |d         	                    }d S )
NrD   zusing-graph-urizusing-named-graph-uriz(application/sparql-update; charset=UTF-8)rE   rH   rF   r)   rG   rI   )r    r   rM   rN   rO   r+   r2   r3   r	   r   r
   rR   )	r5   r@   rA   rB   rF   r)   rW   rX   rY   s	            r   r3   zSPARQLConnector.update   s'    # 	F*+DEEE$(5F$%".9F*+ ..00F
 

 }T[))"%%%Xf%%%	2&&&Yw'''Id8n---$s*i  
 
r   c                   d t          t          j                              t          t          j                              z   D             }t	                      }t          | j        t                    D ]T}d|j        vr/|	                    |
                    |j        g                      :|                    |j                   Ud                    |          S )zConstruct a HTTP-Header Accept field to reflect the supported mime types.

        If the return_format parameter is set, the mime types are restricted to these accordingly.
        c                f    i | ].}|t          j        |g           t          j        |g           z   /S r   )r   getr   ).0ks     r   
<dictcomp>z7SPARQLConnector.response_mime_types.<locals>.<dictcomp>   sO     &
 &
 &
  "&q"--04Q;;<&
 &
 &
r   )namekind/z, )listr   keysr   setr   r!   r   rb   r3   r^   addjoin)r5   sparql_format_mimetype_mapsupported_formatsplugins       r   rM   z#SPARQLConnector.response_mime_types   s    
&
 &
 -244555:<<==>&
 &
 &
"  EE4#4<HHH 	3 	3F&+%%!((.226;CC    "%%fk2222yy*+++r   )NNr   r   N)
r   r   r    r   r!   r   r"   r#   r$   r%   )r8   r9   )r"   r9   r8   r<   )NN)r@   r9   rA   r   rB   r   r8   r   )r@   r9   rA   r   rB   r   r8   r<   )r   r   r   __doc__r7   propertyr"   setterr@   r3   rM   r   r   r   r   r      s          )-)-&+9>*.    >    X ]   ] (,%)	E
 E
 E
 E
 E
T (,%)	"
 "
 "
 "
 "
H, , , , , ,r   r   )%
__future__r   r/   rN   loggingior   typingr   r   r   urllib.errorr   urllib.parser	   urllib.requestr
   r   rdflib.pluginr   rdflib.queryr   r   rdflib.termr   rdflib.utilr   r   	getLoggerr   logtyping_extensionsterP   r   r   __all__r   r   r   <module>r      s   " " " " " "          1 1 1 1 1 1 1 1 1 1 " " " " " " " " " " " " + + + + + + + + ! ! ! ! ! ! - - - - - - - -       O O O O O O O Og!! #""""	 	 	 	 	y 	 	 	p, p, p, p, p, p, p, p,f 8
9r   