3
KdJ
                 @   st   d Z ddlZddlZddlmZmZ ddlmZmZm	Z	m
Z
 ddlmZmZmZ G dd deZG dd	 d	eZdS )
z

This module implements a parser and serializer for the CSV SPARQL result
formats

http://www.w3.org/TR/sparql11-results-csv-tsv/

    N)binary_typePY3)VariableBNodeURIRefLiteral)ResultResultSerializerResultParserc               @   s.   e Zd Zdd Zd
ddZdd Zdd	 ZdS )CSVResultParserc             C   s
   d| _ d S )N,)delim)self r   Z/var/www/html/virt/lib/python3.6/site-packages/rdflib/plugins/sparql/results/csvresults.py__init__   s    zCSVResultParser.__init__Nc             C   sx   t d}t|jdtr&tjd|}tj|| jd}dd t	|D |_
g |_x"|D ]}|jj| j||j
 qVW |S )NSELECTr   zutf-8)	delimiterc             S   s   g | ]}t |qS r   )r   ).0xr   r   r   
<listcomp>!   s    z)CSVResultParser.parse.<locals>.<listcomp>)r   
isinstancereadr   codecs	getreadercsvreaderr   nextvarsbindingsappendparseRow)r   sourcecontent_typerr   rowr   r   r   parse   s    
zCSVResultParser.parsec                s&   t dd t| fdd|D D S )Nc             s   s"   | ]\}}|d k	r||fV  qd S )Nr   )r   varvalr   r   r   	<genexpr>*   s   z+CSVResultParser.parseRow.<locals>.<genexpr>c                s   g | ]} j |qS r   )convertTerm)r   t)r   r   r   r   +   s   z,CSVResultParser.parseRow.<locals>.<listcomp>)dictzip)r   r%   vr   )r   r   r!   )   s    zCSVResultParser.parseRowc             C   sB   |dkrd S |j drt|S |j ds2|j dr:t|S t|S )N z_:zhttp://zhttps://)
startswithr   r   r   )r   r+   r   r   r   r*   .   s    
zCSVResultParser.convertTerm)N)__name__
__module____qualname__r   r&   r!   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 )
CSVResultSerializerc             C   s(   t j| | d| _|jdkr$tdd S )Nr   r   z5CSVSerializer can only serialize select query results)r	   r   r   type	Exception)r   resultr   r   r   r   :   s
    
zCSVResultSerializer.__init__utf-8c                s   t rdd l}|j |}tj|jd} fddjjD }|j| x0jj	D ]$|j fddjjD  qVW d S )Nr   )r   c                s   g | ]}j | qS r   )serializeTerm)r   r.   )encodingr   r   r   r   P   s    z1CSVResultSerializer.serialize.<locals>.<listcomp>c                s   g | ]}j j| qS r   )r9   get)r   r.   )r:   r%   r   r   r   r   S   s   )
r   r   	getwriterr   writerr   r7   r   writerowr   )r   streamr:   r   outvsr   )r:   r%   r   r   	serializeB   s    
zCSVResultSerializer.serializec             C   s"   |d krdS t s|j|S |S d S )Nr/   )r   encode)r   Ztermr:   r   r   r   r9   V   s
    
z!CSVResultSerializer.serializeTermN)r8   )r1   r2   r3   r   rB   r9   r   r   r   r   r4   8   s   
r4   )__doc__r   r   sixr   r   Zrdflibr   r   r   r   Zrdflib.queryr   r	   r
   r   r4   r   r   r   r   <module>   s   $