
    01i                       S SK Jr  S SKrS SKrS SKrS SKJr  S SKJrJ	r	J
r
  S SKJr  S SKJr  S SKJrJr  S SKJr  S S	KJrJr  S S
KJr  S SKJrJr  \R8                  " \5      r\(       a  S SKr  " S S\!5      r" " S S5      r#SS/r$g)    )annotationsN)BytesIO)TYPE_CHECKINGOptionalTuple)	HTTPError)	urlencode)Requesturlopen)plugins)ResultResultParser)BNode)FORMAT_MIMETYPE_MAP"RESPONSE_TABLE_FORMAT_MIMETYPE_MAPc                      \ rS rSrSrg)SPARQLConnectorException    N)__name__
__module____qualname____firstlineno____static_attributes__r       _/home/james-whalen/.local/lib/python3.13/site-packages/rdflib/plugins/stores/sparqlconnector.pyr   r      s    r   r   c                      \ rS rSrSr     S         SS jjr\SS j5       r\R                  SS j5       r  S       SS jjr	  S       SS jjr
SS	 jrS
rg)SPARQLConnector   zJ
this class deals with nitty gritty details of talking to a SPARQL server
Nc                   U   X0l         Xl        X l        X`l        X@l        Ub  [        U5      [        La  [        S5      e[        U5      S:w  a  [        S5      e[        R                  " [        SU-  S5      5      nU R                  R                  S0 5        U R                  S   R                  SS	UR                  S
5      -  05        gg)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__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                    U R                   $ )N)_method)r3   s    r   r)   SPARQLConnector.method?   s    ||r   c                2    US;  a  [        S5      eXl        g )N)GETPOST	POST_FORMz,Method must be "GET", "POST", or "POST_FORM")r   r9   )r3   r)   s     r   r)   r:   C   s"    55*>  r   c           	        U R                   (       d  [        S5      e0 nUb  [        U5      [        La  X$S'   SU R	                  5       0n[
        R                  " U R                  5      nUR                  S0 5        UR                  S0 5        US   R                  U5        U R                  S:X  aN  XS'   US   R                  U5        S[        US   5      -   n [        [        U R                   U-   US   S	95      nOU R                  S:X  ao  US   R                  SS05        US   R                  U5        S[        US   5      -   n [        [        U R                   U-   UR!                  5       US   S95      nO}U R                  S:X  aU  XS'   US   R                  U5         [        [        U R                   [        US   5      R!                  5       US   S95      nO[        SU R                  -  5      e[(        R*                  " [-        UR/                  5       5      UR0                  S   R3                  S5      S   S9$ ! [         a  n	[        S
5      eS n	A	ff = f! ["         a"  n	U	R$                  ['        U	5      S 4s S n	A	$ S n	A	ff = f! ["         a"  n	U	R$                  ['        U	5      S 4s S n	A	$ S n	A	ff = f)NQuery endpoint not set!zdefault-graph-uriAcceptparamsr#   r<   query?)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(   r0   r1   r)   r	   r   r
   	Exception
ValueErrorencoder   codestrr   parser   readr#   split)
r3   rC   default_graphnamed_graphrB   r#   argsqsareses
             r   rC   SPARQLConnector.queryL   s    ""*+DEE$m)<E)I*7&'T5578}}T[[) 	"%	2&Yw';;%#7ON!!&)	$x.11CD//#5tIO [[F"O""N4N#OPN!!&)	$x.11C
,++c1"\\^ $Y [[K'#7ON!!&)
,++&tH~6==? $Y ++>+LMM||CHHJckk..I.O.OPS.TUV.W
 	
G   ]    ,vvs1vt++,  ,vvs1vt++,sT   #I 2I$ (;J 
I!II!$
J.JJJ
J?J:4J?:J?c                   U R                   (       d  [        S5      e0 nUb  X$S'   Ub  X4S'   U R                  5       SS.n[        R                  " U R
                  5      nUR                  S0 5        US   R                  U5        UR                  S0 5        US   R                  U5        S[        US   5      -   n[        [        U R                   U-   UR                  5       US   S	95      ng )
Nr@   zusing-graph-urizusing-named-graph-uriz(application/sparql-update; charset=UTF-8)rA   rE   rB   r#   rD   rF   )r'   r   rJ   rK   rL   r(   r0   r1   r	   r   r
   rO   )	r3   rC   rU   rV   rB   r#   rW   rX   rY   s	            r   r1   SPARQLConnector.update   s     ##*+DEE$(5$%".9*+ ..0F

 }}T[[)"%Xf%	2&Yw'Id8n--$$s*i
r   c           	     &   [        [        R                  " 5       5      [        [        R                  " 5       5      -    Vs0 s H3  nU[        R                  " U/ 5      [        R                  " U/ 5      -   _M5     nn[        5       n[        U R                  [        S9 H[  nSUR                  ;  a-  UR                  UR	                  UR                  / 5      5        M@  UR                  UR                  5        M]     SR                  U5      $ s  snf )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.
)namekind/z, )listr   keysr   getsetr   r%   r   r_   r1   addjoin)r3   ksparql_format_mimetype_mapsupported_formatsplugins        r   rJ   #SPARQLConnector.response_mime_types   s     -22455::<=>&
> "&&q"-044Q;< <> 	# &
  E4#4#4<HF&++%!((.226;;C "%%fkk2 I yy*++&
s    :D)r9   r(   r)   r&   r%   r'   )NNxmlr<   N)
r&   Optional[str]r'   rn   r%   rn   r)   z&te.Literal['GET', 'POST', 'POST_FORM']r4   zOptional[Tuple[str, str]])returnrQ   )r)   rQ   ro   None)NN)rC   rQ   rU   rn   rV   rn   ro   r   )rC   rQ   rU   rn   rV   rn   ro   rp   )r   r   r   r   __doc__r6   propertyr)   setterrC   r1   rJ   r   r   r   r   r   r      s     )-)-&+9>*.% ' $	
 7 (>   ]]  (,%)	E
E
 %E
 #	E

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

 
"
H,r   r   )%
__future__r   r-   rK   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terM   r   r   __all__r   r   r   <module>r      sk    "     1 1 " " + ! -  O!"	y 	p, p,f 8
9r   