
    ic                        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  ej,                  e      Zerd dlZ G d
 de      ZddddddZ G d d      ZddgZy)    )annotationsN)BytesIO)TYPE_CHECKINGOptionalTuple)	HTTPError)	urlencode)Requesturlopen)Result)BNodec                      e Zd Zy)SPARQLConnectorExceptionN)__name__
__module____qualname__     TC:\Projects\mas-dev\.venv\Lib\site-packages\rdflib/plugins/stores/sparqlconnector.pyr   r      s    r   r   z3application/sparql-results+xml, application/rdf+xmlzapplication/sparql-results+jsonztext/csvztext/tab-separated-valuesapplication/rdf+xml)xmljsoncsvtsvr   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	y)SPARQLConnectorzR
    this class deals with nitty gritty details of talking to a SPARQL server
    Nc                   |  || _         || _        || _        || _        || _        |t        |      t        urt        d      t        |      dk7  rt        d      t        j                  t        d|z  d            }| j                  j                  di        | j                  d   j                  dd	|j                  d
      z  i       yy)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)returnFormatquery_endpointupdate_endpointkwargsmethodtypetupler   lenbase64	b64encodebytes
setdefaultupdatedecode)selfr#   r$   r"   r&   authr%   base64strings           r   __init__zSPARQLConnector.__init__(   s     	(,.Dz&./EFF4yA~./VWW!++E'D.',JKLKK""9b1KK	")) *|/B/B7/K"KL r   c                    | j                   S )N)_method)r0   s    r   r&   zSPARQLConnector.methodG   s    ||r   c                0    |dvrt        d      || _        y )N)GETPOST	POST_FORMz,Method must be "GET", "POST", or "POST_FORM")r   r5   )r0   r&   s     r   r&   zSPARQLConnector.methodK   s$    55*>  r   c           	        | j                   st        d      i }|t        |      t        ur||d<   dt        | j
                     i}t        j                  | j                        }|j                  di        |j                  di        |d   j                  |       | j                  dk(  rS||d<   |d   j                  |       dt        |d         z   }	 t        t        | j                   |z   |d   	            }n| j                  dk(  rr|d   j                  ddi       |d   j                  |       dt        |d         z   }	 t        t        | j                   |z   |j#                         |d               }n| j                  dk(  rY||d<   |d   j                  |       	 t        t        | j                   t        |d         j#                         |d               }nt        d| j                  z        t+        j,                  t/        |j1                               |j2                  d   j5                  d      d         S # t        $ r}	t!        d
      d }	~	ww xY w# t$        $ r"}	|	j&                  t)        |	      d fcY d }	~	S d }	~	ww xY w# t$        $ r"}	|	j&                  t)        |	      d fcY d }	~	S d }	~	ww xY w)NQuery endpoint not set!zdefault-graph-uriAcceptparamsr    r7   query?)r    zGYou did something wrong formulating either the URI or your SPARQL queryr8   Content-Typezapplication/sparql-querydatar    r9   zUnknown method %s;r   )content_type)r#   r   r'   r   _response_mime_typesr"   copydeepcopyr%   r-   r.   r&   r	   r   r
   	Exception
ValueErrorencoder   codestrr   parser   readr    split)
r0   r>   default_graphnamed_graphr=   r    argsqsareses
             r   r>   zSPARQLConnector.queryT   s    ""*+DEE$m)<E)I*7F&'1$2C2CDE}}T[[) 	"%	2&Yw';;%#F7ON!!&)	$x.11CD//#5tIO [[F"O""N4N#OPN!!&)	$x.11C
,++c1"\\^ $Y [[K'#F7ON!!&)
,++&tH~6==? $Y ++>+LMM||CHHJckk..I.O.OPS.TUV.W
 	
G   ]    ,vvs1vt++,  ,vvs1vt++,sT   &I 5I* *>J 	I'I""I'*	J3J
JJ	K!J>8K>Kc                   | j                   st        d      i }|||d<   |||d<   t        | j                     dd}t	        j
                  | j                        }|j                  di        |d   j                  |       |j                  di        |d   j                  |       dt        |d         z   }t        t        | j                   |z   |j                         |d   	            }y )
Nr;   zusing-graph-urizusing-named-graph-uriz(application/sparql-update; charset=UTF-8)r<   r@   r=   r    r?   rA   )r$   r   rE   r"   rF   rG   r%   r-   r.   r	   r   r
   rJ   )	r0   r>   rP   rQ   r=   r    rR   rS   rT   s	            r   r.   zSPARQLConnector.update   s     ##*+DEE$(5F$%".9F*+ +4+<+<=F

 }}T[[)"%Xf%	2&Yw'Id8n--$$s*i
r   )NNr   r7   N)
r#   Optional[str]r$   rW   r"   rL   r&   z&te.Literal['GET', 'POST', 'POST_FORM']r1   zOptional[Tuple[str, str]])returnrL   )r&   rL   rX   None)NN)r>   rL   rP   rW   rQ   rW   rX   r   )r>   rL   rP   rW   rQ   rW   rX   rY   )
r   r   r   __doc__r3   propertyr&   setterr>   r.   r   r   r   r   r   #   s     )-)-!9>*.% ' 	
 7 (>   ]]  (,%)	E
E
 %E
 #	E

 
E
T (,%)	"
"
 %"
 #	"

 
"
r   r   ) 
__future__r   r*   rF   loggingior   typingr   r   r   urllib.errorr   urllib.parser	   urllib.requestr
   r   rdflib.queryr   rdflib.termr   	getLoggerr   logtyping_extensionsterH   r   rE   r   __all__r   r   r   <module>rk      s    "     1 1 " " +  g!"	y 	 A-&0 Z
 Z
z 8
9r   