3
Kd                 @   s   d dl Z d dl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 G dd deZG dd deZG d	d
 d
eZdd Zdd ZdS )    N)ResultResultExceptionResultSerializerResultParser)LiteralURIRefBNodeVariable)binary_type	text_typec               @   s   e Zd ZdddZdS )JSONResultParserNc             C   s*   |j  }t|tr|jd}ttj|S )Nzutf-8)read
isinstancer
   decode
JSONResultjsonloads)selfsourcecontent_typeinp r   [/var/www/html/virt/lib/python3.6/site-packages/rdflib/plugins/sparql/results/jsonresults.pyparse   s    

zJSONResultParser.parse)N)__name__
__module____qualname__r   r   r   r   r   r      s   r   c               @   s&   e Zd Zdd ZdddZdd ZdS )	JSONResultSerializerc             C   s   t j| | d S )N)r   __init__)r   resultr   r   r   r   !   s    zJSONResultSerializer.__init__Nc                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 k	r|j|j| n
|j| d S )NASKheadbooleanresultsvarsc                s   g | ]} j |qS r   )_bindingToJSON).0x)r   r   r   
<listcomp>/   s   z2JSONResultSerializer.serialize.<locals>.<listcomp>bindingsF)	allow_nanensure_ascii)	r   type	askAnswerr$   r)   r   dumpswriteencode)r   streamencodingresrr   )r   r   	serialize$   s    
zJSONResultSerializer.serializec             C   s>   i }x4|D ],}t | || }|d k	r
t | || ||< q
W |S )N)
termToJSON)r   br3   varjr   r   r   r%   8   s    
z#JSONResultSerializer._bindingToJSON)N)r   r   r   r   r5   r%   r   r   r   r   r      s   
r   c               @   s   e Zd Zdd Zdd ZdS )r   c             C   st   || _ d|krd}nd|kr"d}ntdtj| | |dkrNt|d | _n"| j | _dd |d d	 D | _d S )
Nr"   r    r#   ZSELECTzNo boolean or results in json!c             S   s   g | ]}t |qS r   )r	   )r&   r'   r   r   r   r(   R   s    z'JSONResult.__init__.<locals>.<listcomp>r!   r$   )	r   r   r   r   boolr-   _get_bindingsr)   r$   )r   r   type_r   r   r   r   C   s    
zJSONResult.__init__c             C   sT   g }xJ| j d d D ]8}i }x$|j D ]\}}t||t|< q&W |j| qW |S )Nr#   r)   )r   itemsparseJsonTermr	   append)r   retrowZoutRowkvr   r   r   r;   T   s    zJSONResult._get_bindingsN)r   r   r   r   r;   r   r   r   r   r   A   s   r   c             C   s   | d }|dkrt | d S |dkrBt| d | jd| jddS |dkrbt| d t | d d	S |d
krvt| d S td| dS )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datatypezxml:lang)rG   langztyped-literal)rG   bnodezjson term type %rN)r   r   getr   NotImplementedError)dtr   r   r   r>   ^   s    r>   c             C   s   t |trdt|dS t |tr`dt|d}|jd k	rHt|j|d< |jd k	r\|j|d< |S t |trxdt|dS |d krd S td|t	|f d S )NrD   )r,   rE   rF   rG   zxml:langrI   zUnknown term type: %s (%s))
r   r   r   r   rG   languager   strr   r,   )r   Ztermr4   r   r   r   r6   s   s     





r6   )r   Zrdflib.queryr   r   r   r   Zrdflibr   r   r   r	   sixr
   r   r   r   r   r>   r6   r   r   r   r   <module>   s   	"