o
    
i                  	   @  s  d Z ddlm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mZmZmZ ddlmZmZmZmZmZmZmZmZ ddlmZmZmZ ddlmZmZ dd	lm Z m!Z!m"Z" dd
lm
Z# e$d eeB Z%edede%eede& e
d& ede&  B  Z'e( Z)ee	 edB Z*e*+dd  e'eB eB eB eB Z,e*e,B eede*e,B   Z-e-.  eeede  Z/e/.  G dd deZ0dS )z
This implements the Tab Separated SPARQL Result Format

It is implemented with pyparsing, reusing the elements from the SPARQL Parser
    )annotationsN)IOUnion)
FollowedByLineEndLiteralOptionalParserElementSuppress
ZeroOrMore)BLANK_NODE_LABELIRIREFLANGTAGSTRING_LITERAL1STRING_LITERAL2BooleanLiteralNumericLiteralVar)Comp	CompValueParam)ResultResultParser)BNode
IdentifierURIRef)r   z 
literalstringlangz^^datatype	c                 C  s   t S N)
NONE_VALUE)x r$   \/home/ubuntu/.local/lib/python3.10/site-packages/rdflib/plugins/sparql/results/tsvresults.py<lambda>8   s    r&   c                   @  s&   e Zd ZdZddd	d
ZdddZdS )TSVResultParserz/Parses SPARQL TSV results into a Result object.Nsourcer   content_typetyping.Optional[str]returnr   c                 C  s   t |dtrtd|}td}| }ttj	|
 dd|_g |_	 | }|s0	 |S |
d}|dkr:q&tj	|dd}i }t|j|D ]\}}	| |	}
|
d u rWqI|
||< qI|j| q')Nr   zutf-8SELECTT)	parse_all
 )
isinstancereadbytescodecs	getreaderr   readlinelistHEADERparse_stringstripvarsbindingsROWzipconvertTermappend)selfr(   r)   rheaderlinerowthis_row_dictvarval_readvalr$   r$   r%   parseG   s.   


zTSVResultParser.parset3Union[object, RDFLiteral, BNode, CompValue, URIRef]typing.Optional[Identifier]c                 C  sj   |t u rd S t|tr!|jdkrt|j|j|jdS td|f t|tt	t
fr+|S tdt| d)Nr   )r   r   z"I dont know how to handle this: %szUnexpected type z found in TSV result)r"   r0   r   name
RDFLiteralr   r   r   	Exceptionr   r   
ValueErrortype)r@   rJ   r$   r$   r%   r>   g   s   

zTSVResultParser.convertTermr!   )r(   r   r)   r*   r+   r   )rJ   rK   r+   rL   )__name__
__module____qualname____doc__rI   r>   r$   r$   r$   r%   r'   C   s     r'   )1rU   
__future__r   r3   typingr   r   	pyparsingr   r   r   r   r	   r
   r   rdflib.plugins.sparql.parserr   r   r   r   r   r   r   r   !rdflib.plugins.sparql.parserutilsr   r   r   rdflib.queryr   r   rdflib.termr   r   r   rN   set_default_whitespace_charsStringleave_whitespace
RDFLITERALobjectr"   EMPTYset_parse_actionTERMr<   parse_with_tabsr7   r'   r$   r$   r$   r%   <module>   sD    $(




