o
    i                     @  s   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 	 G dd deZG dd	 d	eZG d
d deZdddZdddZdS )    )annotationsN)IOAnyDictMappingMutableSequenceOptional)ResultResultExceptionResultParserResultSerializer)BNode
IdentifierLiteralURIRefVariablec                   @  s   e Zd Zd
ddd	ZdS )JSONResultParserNsourcer   content_typeOptional[str]returnr	   c                 C  s*   |  }t|tr|d}tt|S )Nzutf-8)read
isinstancebytesdecode
JSONResultjsonloads)selfr   r   inp r    d/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/rdflib/plugins/sparql/results/jsonresults.pyparse   s   

zJSONResultParser.parseN)r   r   r   r   r   r	   )__name__
__module____qualname__r"   r    r    r    r!   r      s    r   c                   @  s,   e Zd ZdddZddddZdddZdS )JSONResultSerializerresultr	   c                 C  s   t | | d S r#   )r   __init__)r   r(   r    r    r!   r)      s   zJSONResultSerializer.__init__Nstreamr   encodingstrr   Nonec                   s   i } j jdkri |d<  j j|d< ni |d< i |d<  j j|d d<  fdd j jD |d d< tj|d	d	d
}|d urH||| d S || d S )NASKheadbooleanresultsvarsc                   s   g | ]}  |qS r    )_bindingToJSON.0xr   r    r!   
<listcomp>-   s    
z2JSONResultSerializer.serialize.<locals>.<listcomp>bindingsF)	allow_nanensure_ascii)	r(   type	askAnswerr2   r9   r   dumpswriteencode)r   r*   r+   resrr    r7   r!   	serialize#   s   
zJSONResultSerializer.serializebMapping[Variable, Identifier]Dict[Variable, Any]c                 C  s:   i }|D ]}t | || }|d urt | || ||< q|S r#   )
termToJSON)r   rD   rA   varjr    r    r!   r3   7   s   z#JSONResultSerializer._bindingToJSON)r(   r	   r#   )r*   r   r+   r,   r   r-   )rD   rE   r   rF   )r$   r%   r&   r)   rC   r3   r    r    r    r!   r'      s    
r'   c                   @  s    e Zd Zd
ddZdddZd	S )r   r   Dict[str, Any]c                 C  sv   || _ d|v r
d}nd|v rd}ntdt| | |dkr(t|d | _d S |  | _dd |d d	 D | _d S )
Nr0   r.   r1   SELECTzNo boolean or results in json!c                 S  s   g | ]}t |qS r    )r   r4   r    r    r!   r8   P   s    z'JSONResult.__init__.<locals>.<listcomp>r/   r2   )	r   r
   r	   r)   boolr=   _get_bindingsr9   r2   )r   r   type_r    r    r!   r)   A   s   
zJSONResult.__init__r   .MutableSequence[Mapping[Variable, Identifier]]c                 C  sL   g }| j d d D ]}i }| D ]\}}t||t|< q|| q	|S )Nr1   r9   )r   itemsparseJsonTermr   append)r   retrowoutRowkvr    r    r!   rM   R   s   zJSONResult._get_bindingsN)r   rJ   )r   rO   )r$   r%   r&   r)   rM   r    r    r    r!   r   @   s    
r   dDict[str, str]r   r   c                 C  s   | d }|dkrt | d S |dkr!t| d | d| ddS |dkr1t| d t | d d	S |d
kr;t| d S td| )zrdflib object (Literal, URIRef, BNode) for the given json-format dict.

    input is like:
      { 'type': 'uri', 'value': 'http://famegame.com/2006/01/username' }
      { 'type': 'literal', 'value': 'drewp' }
    r<   urivalueliteraldatatypexml:lang)r]   langztyped-literal)r]   bnodezjson term type %r)r   r   getr   NotImplementedError)rX   tr    r    r!   rQ   \   s   rQ   r   termOptional[Identifier]Optional[Dict[str, str]]c                 C  s   t |trdt|dS t |tr0dt|d}|jd ur$t|j|d< |jd ur.|j|d< |S t |tr<dt|dS |d u rBd S td|t|f )NrZ   )r<   r[   r\   r]   r^   r`   zUnknown term type: %s (%s))	r   r   r,   r   r]   languager   r
   r<   )r   rd   rB   r    r    r!   rG   q   s   





rG   )rX   rY   r   r   )r   r'   rd   re   r   rf   )
__future__r   r   typingr   r   r   r   r   r   rdflib.queryr	   r
   r   r   rdflib.termr   r   r   r   r   r   r'   r   rQ   rG   r    r    r    r!   <module>   s     	"
