o
    i                      @  s   d dl mZ 	 d dlZd dlZd dlmZmZmZmZm	Z	 d dl
mZ d dl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dS )    )annotationsN)IODictListOptionalUnion)SPARQLResult)ResultResultParserResultSerializer)BNode
IdentifierLiteralURIRefVariablec                   @  s4   e Zd Zdd Zddd
dZdddZdddZdS )CSVResultParserc                 C  s
   d| _ d S )N,)delimself r   c/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/rdflib/plugins/sparql/results/csvresults.py__init__   s   
zCSVResultParser.__init__Nsourcer   content_typeOptional[str]returnr	   c                 C  st   t d}t|dtrtd|}tj|| jd}dd t	|D |_
g |_|D ]}|j| ||j
 q*|S )NSELECTr   utf-8	delimiterc                 S  s   g | ]}t |qS r   )r   ).0xr   r   r   
<listcomp>$   s    z)CSVResultParser.parse.<locals>.<listcomp>)r	   
isinstancereadbytescodecs	getreadercsvreaderr   nextvarsbindingsappendparseRow)r   r   r   rr*   rowr   r   r   parse   s   zCSVResultParser.parser1   	List[str]vList[Variable]-Dict[Variable, Union[BNode, URIRef, Literal]]c                   s&   t dd t| fdd|D D S )Nc                 s  s$    | ]\}}|d ur||fV  qd S Nr   )r!   varvalr   r   r   	<genexpr>/   s    z+CSVResultParser.parseRow.<locals>.<genexpr>c                   s   g | ]}  |qS r   )convertTerm)r!   tr   r   r   r#   1   s    z,CSVResultParser.parseRow.<locals>.<listcomp>)dictzip)r   r1   r4   r   r   r   r/   ,   s   zCSVResultParser.parseRowr<   str'Optional[Union[BNode, URIRef, Literal]]c                 C  sB   |dkrd S | drt|S | ds| drt|S t|S )N _:zhttp://zhttps://)
startswithr   r   r   )r   r<   r   r   r   r;   5   s   
zCSVResultParser.convertTermr7   )r   r   r   r   r   r	   )r1   r3   r4   r5   r   r6   )r<   r?   r   r@   )__name__
__module____qualname__r   r2   r/   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 )CSVResultSerializerresultr   c                 C  s(   t | | d| _|jdkrtdd S )Nr   r   z5CSVSerializer can only serialize select query results)r   r   r   type	Exception)r   rH   r   r   r   r   @   s
   
zCSVResultSerializer.__init__r   streamr   encodingr?   r   Nonec                   sz   dd l }| |}tj|jd} fddjjD }|| jjD ]| fddjjD  q(d S )Nr   r   c                   s   g | ]} | qS r   )serializeTermr!   r4   )rL   r   r   r   r#   R   s    z1CSVResultSerializer.serialize.<locals>.<listcomp>c                   s   g | ]} | qS r   )rN   getrO   rL   r1   r   r   r   r#   V   s    )	r'   	getwriterr)   writerr   rH   r,   writerowr-   )r   rK   rL   kwargsr'   outvsr   rQ   r   	serializeG   s   
zCSVResultSerializer.serializetermOptional[Identifier]Union[str, Identifier]c                 C  s$   |d u rdS t |trd| S |S )NrA   rB   )r$   r   )r   rY   rL   r   r   r   rN   Y   s
   

z!CSVResultSerializer.serializeTermN)rH   r   )r   )rK   r   rL   r?   r   rM   )rY   rZ   rL   r?   r   r[   )rD   rE   rF   r   rX   rN   r   r   r   r   rG   ?   s    
rG   )
__future__r   r'   r)   typingr   r   r   r   r   rdflib.plugins.sparql.processorr   rdflib.queryr	   r
   r   rdflib.termr   r   r   r   r   r   rG   r   r   r   r   <module>   s    	*