
    Pi&                       d Z ddlmZ ddlZddlmZmZmZmZm	Z	m
Z
 ddlmZmZmZmZ ddlmZmZmZmZmZ 	 ddlZdZn# e$ r dZdZY nw xY w G d	 d
e          Z G d de          Z G d de          ZddZddZdS )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                      e Zd ZdZd
dd	ZdS )JSONResultParserz0Parses SPARQL JSON results into a Result object.Nsourcer   content_typeOptional[str]returnr
   c                F   |                                 }t          r:	 t          j        |          }nb# t          $ r}t          d|           d }~ww xY wt          |t                    r|                    d          }t          j        |          }t          |          S )NzFailed to parse result: utf-8)read_HAS_ORJSONorjsonloads	Exceptionr   
isinstancebytesdecodejson
JSONResult)selfr   r   inploadedes         }/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/rdflib/plugins/sparql/results/jsonresults.pyparsezJSONResultParser.parse    s    kkmm 	%Fc** F F F%&D&D&DEEEF #u%% *jj))Z__F&!!!s   2 
AAAN)r   r   r   r   r   r
   )__name__
__module____qualname____doc__r*        r)   r   r      s3        ::" " " " " " "r1   r   c                  ,    e Zd ZdZddZdddZddZdS )JSONResultSerializerz)Serializes SPARQL results to JSON format.resultr
   c                0    t          j        | |           d S r+   )r   __init__)r%   r4   s     r)   r6   zJSONResultSerializer.__init__1   s    !$/////r1   Nstreamr   encodingstrr   Nonec                    i } j         j        dk    ri |d<    j         j        |d<   n@i |d<   i |d<    j         j        |d         d<    fd j         j        D             |d         d<   t
          r	 t          j        |t          j                  }n$# t          $ r}t          d	|           d }~ww xY w|X	 |                    |           d S # t          t          f$ r, |                    |                    d
                     Y d S w xY w|                    |                    d
                     d S t          j        |dd          }|X	 |                    |                    |                     d S # t          t          f$ r |                    |           Y d S w xY w|                    |           d S )NASKheadbooleanresultsvarsc                :    g | ]}                     |          S r0   )_bindingToJSON).0xr%   s     r)   
<listcomp>z2JSONResultSerializer.serialize.<locals>.<listcomp>?   s4     * * *+,##A&&* * *r1   bindings)optionzFailed to serialize result: r   F)	allow_nanensure_ascii)r4   type	askAnswerr@   rF   r   r   dumpsOPT_NON_STR_KEYSr   r   write	TypeError
ValueErrorr"   r#   encode)r%   r7   r8   resr_bytesr(   r_strs   `      r)   	serializezJSONResultSerializer.serialize5   s    ;u$$CK![2C	NN  C	NCK"&+"2CK* * * *040D* * *C	N:&  	$J ,s63JKKK J J J%&HQ&H&HIIIJ#:LL)))))!:. : : :LL!8!8999999: W^^G4455555Jse%HHHE#(LLh!7!788888!:. ( ( (LL''''''( U#####s<   1 B 
B3B..B39C 9DD(E> >&F('F(bMapping[Variable, Identifier]Dict[Variable, Any]c                v    i }|D ]3}t          | ||                   }|t          | ||                   ||<   4|S r+   )
termToJSON)r%   rV   rR   varjs        r)   rB   z#JSONResultSerializer._bindingToJSONZ   sK     	4 	4C43((A}%dAcF33C
r1   )r4   r
   r+   )r7   r   r8   r9   r   r:   )rV   rW   r   rX   )r,   r-   r.   r/   r6   rU   rB   r0   r1   r)   r3   r3   .   s\        330 0 0 0#$ #$ #$ #$ #$J     r1   r3   c                      e Zd ZddZd	dZdS )
r$   r#   Dict[str, Any]c                (   || _         d|v rd}nd|v rd}nt          d          t          j        | |           |dk    rt	          |d                   | _        d S |                                 | _        d |d         d         D             | _        d S )	Nr>   r<   r?   SELECTzNo boolean or results in json!c                ,    g | ]}t          |          S r0   )r   )rC   rD   s     r)   rE   z'JSONResult.__init__.<locals>.<listcomp>s   s    CCC!CCCr1   r=   r@   )	r#   r   r
   r6   boolrK   _get_bindingsrF   r@   )r%   r#   type_s      r)   r6   zJSONResult.__init__d   s    	EE$EE!"BCCCe$$$E>>!$y/22DNNN ..00DMCCd6l6.BCCCDIIIr1   r   .MutableSequence[Mapping[Variable, Identifier]]c                    g }| j         d         d         D ]R}i }|                                D ]$\  }}t          |          |t          |          <   %|                    |           S|S )Nr?   rF   )r#   itemsparseJsonTermr   append)r%   retrowoutRowkvs         r)   rc   zJSONResult._get_bindingsu   sw    >@9Y'
3 	 	C13F		 7 71&3A&6&6x{{##JJv
r1   N)r#   r^   )r   re   )r,   r-   r.   r6   rc   r0   r1   r)   r$   r$   c   s@        D D D D"     r1   r$   dDict[str, str]r   r   c                   | d         }|dk    rt          | d                   S |dk    r>t          | d         |                     d          |                     d                    S |dk    r*t          | d         t          | d                   	          S |d
k    rt          | d                   S t	          d|z            )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' }
    ```
    rJ   urivalueliteraldatatypexml:lang)ru   langztyped-literal)ru   bnodezjson term type %r)r   r   getr   NotImplementedError)ro   ts     r)   rh   rh      s     	
&	AEzzaj!!!	
iqzAEE*,=,=AEE*DUDUVVVV	
o		qzF1Z=,A,ABBBB	
gQwZ   !"5"9:::r1   r%   termOptional[Identifier]Optional[Dict[str, str]]c                   t          |t                    rdt          |          dS t          |t                    rCdt          |          d}|j        t          |j                  |d<   |j        
|j        |d<   |S t          |t                    rdt          |          dS |d S t          d|dt          |          d	          )
Nrr   )rJ   rs   rt   ru   rv   rx   zUnknown term type: z ())	r    r   r9   r   ru   languager   r   rJ   )r%   r|   rs      r)   rZ   rZ      s     $ QD		222	D'	"	" QT33=$..AjM=$ MAjM	D%	 	  Q#d))444	todddDJJJJOPPPr1   )ro   rp   r   r   )r%   r3   r|   r}   r   r~   )r/   
__future__r   r#   typingr   r   r   r   r   r	   rdflib.queryr
   r   r   r   rdflib.termr   r   r   r   r   r   r   ImportErrorr   r3   r$   rh   rZ   r0   r1   r)   <module>r      s    # " " " " "  D D D D D D D D D D D D D D D D P P P P P P P P P P P P D D D D D D D D D D D D D DMMMKK   FKKK
" " " " "| " " "$2 2 2 2 2+ 2 2 2j       8; ; ; ;0Q Q Q Q Q Qs   ? 	A
A