
    01i&                        S r SSKJr  SSKrSSKJrJrJrJrJ	r	J
r
  SSKJrJrJrJr  SSKJrJrJrJrJr   SSKrSr " S	 S
\5      r " S S\5      r " S S\5      rSS jr      SS jrg! \ a    SrSr N>f = f)zA Serializer for SPARQL results in JSON:

http://www.w3.org/TR/rdf-sparql-json-res/

Bits and pieces borrowed from:
http://projects.bigasterisk.com/sparqlhttp/

Authors: Drew Perttula, Gunnar Aastrand Grimnes
    )annotationsN)IOAnyDictMappingMutableSequenceOptional)ResultResultExceptionResultParserResultSerializer)BNode
IdentifierLiteralURIRefVariableTFc                  &    \ rS rSrSrSSS jjrSrg)JSONResultParser   z0Parses SPARQL JSON results into a Result object.Nc                6   UR                  5       n[        (       a   [        R                  " U5      nO<[        U[        5      (       a  UR                  S5      n[        R                  " U5      n[        U5      $ ! [         a  n[        SU 35      eS nAff = f)NzFailed to parse result: utf-8)read_HAS_ORJSONorjsonloads	Exceptionr   
isinstancebytesdecodejson
JSONResult)selfsourcecontent_typeinploadedes         c/home/james-whalen/.local/lib/python3.13/site-packages/rdflib/plugins/sparql/results/jsonresults.pyparseJSONResultParser.parse    s    kkm;Fc* #u%%jj)ZZ_F&!!  F%(@&DEEFs   A; ;
BBB N)r#   r   r$   zOptional[str]returnr
   )__name__
__module____qualname____firstlineno____doc__r)   __static_attributes__r+       r(   r   r      s    :" "r4   r   c                  :    \ rS rSrSrSS jrS	S
S jjrSS jrSrg)JSONResultSerializer.   z)Serializes SPARQL results to JSON format.c                0    [         R                  " X5        g r,   )r   __init__)r"   results     r(   r9   JSONResultSerializer.__init__1   s    !!$/r4   Nc                   0 nU R                   R                  S:X  a  0 US'   U R                   R                  US'   Oa0 US'   0 US'   U R                   R                  US   S'   U R                   R                   Vs/ s H  o@R                  U5      PM     snUS   S'   [        (       a[   [        R                  " U[        R                  S9nUb   UR                  U5        g UR                  UR                  S	5      5        g [         R                  " US
S
S9nUb"   UR                  UR#                  U5      5        g UR                  U5        g s  snf ! [         a  n[        SU 35      eS nAff = f! [        [        4 a#    UR                  UR                  S	5      5         g f = f! [        [        4 a    UR                  U5         g f = f)NASKheadbooleanresultsvarsbindings)optionzFailed to serialize result: r   F)	allow_nanensure_ascii)r:   type	askAnswerrA   rB   _bindingToJSONr   r   dumpsOPT_NON_STR_KEYSr   r   write	TypeError
ValueErrorr   r    encode)r"   streamencodingresxr_bytesr'   r_strs           r(   	serializeJSONResultSerializer.serialize5   s    ;;u$CK![[22C	N  C	NCK"&++"2"2CK040D0D*0D1##A&0D*C	N:& ;J ,,s63J3JK #:LL) W^^G45JJse%HE#(LLh!78 U#3*  J%(DQC&HIIJ ":. :LL!89: ":. (LL'(sB   :E)#E E5  F+ 
E2E--E250F('F(+!GGc                b    0 nU H&  n[        XU   5      nUc  M  [        XU   5      X#'   M(     U$ r,   )
termToJSON)r"   brQ   varjs        r(   rH   #JSONResultSerializer._bindingToJSONZ   s;    C43(A}%dcF3  
r4   r+   )r:   r
   r,   )rO   r   rP   strr-   None)rY   zMapping[Variable, Identifier]r-   zDict[Variable, Any])	r.   r/   r0   r1   r2   r9   rU   rH   r3   r+   r4   r(   r6   r6   .   s    30#$Jr4   r6   c                  (    \ rS rSrSS jrSS jrSrg)r!   c   c                ,   Xl         SU;   a  SnOSU;   a  SnO[        S5      e[        R                  " X5        US:X  a  [	        US   5      U l        g U R                  5       U l        US   S    Vs/ s H  n[        U5      PM     snU l	        g s  snf )Nr?   r=   r@   SELECTzNo boolean or results in json!r>   rA   )
r    r   r
   r9   boolrG   _get_bindingsrB   r   rA   )r"   r    type_rR   s       r(   r9   JSONResult.__init__d   s    	E$E!"BCC$E>!$y/2DN ..0DM.26l6.BC.B!.BCDICs   3Bc                    / nU R                   S   S    HF  n0 nUR                  5        H  u  pE[        U5      U[        U5      '   M     UR	                  U5        MH     U$ )Nr@   rB   )r    itemsparseJsonTermr   append)r"   retrowoutRowkvs         r(   rd   JSONResult._get_bindingsu   s\    >@99Y'
3C13F		&3A&6x{# $JJv	 4
 
r4   )rG   rB   r    rA   N)r    zDict[str, Any])r-   z.MutableSequence[Mapping[Variable, Identifier]])r.   r/   r0   r1   r9   rd   r3   r+   r4   r(   r!   r!   c   s    D"r4   r!   c                   U S   nUS:X  a  [        U S   5      $ US:X  a,  [        U S   U R                  S5      U R                  S5      S9$ US:X  a  [        U S   [        U S   5      S	9$ US
:X  a  [        U S   5      $ [	        SU-  5      e)zrdflib object (Literal, URIRef, BNode) for the given json-format dict.

input is like:

```json
{ 'type': 'uri', 'value': 'http://famegame.com/2006/01/username' }
{ 'type': 'literal', 'value': 'drewp' }
```
rF   urivalueliteraldatatypexml:lang)ru   langztyped-literal)ru   bnodezjson term type %r)r   r   getr   NotImplementedError)dts     r(   ri   ri      s     	
&	AEzaj!!	
iqzAEE*,=AEE*DUVV	
o	qzF1Z=,ABB	
gQwZ  !"5"9::r4   c                   [        U[        5      (       a  S[        U5      S.$ [        U[        5      (       aQ  S[        U5      S.nUR                  b  [        UR                  5      US'   UR
                  b  UR
                  US'   U$ [        U[        5      (       a  S[        U5      S.$ Uc  g [        SU< S[        U5      < S	35      e)
Nrr   )rF   rs   rt   ru   rv   rx   zUnknown term type: z ())	r   r   r]   r   ru   languager   r   rF   )r"   termrs      r(   rX   rX      s     $D	22	D'	"	"T3==$.AjM==$ MMAjM	D%	 	 #d)44	dDJOPPr4   )r{   zDict[str, str]r-   r   )r"   r6   r   zOptional[Identifier]r-   zOptional[Dict[str, str]])r2   
__future__r   r    typingr   r   r   r   r   r	   rdflib.queryr
   r   r   r   rdflib.termr   r   r   r   r   r   r   ImportErrorr   r6   r!   ri   rX   r+   r4   r(   <module>r      s    #  D D P P D DK"| "$2+ 2j 8;0Q
Q&:QQA  FKs   A0 0
A=<A=