
    i.                       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! dd
lm
Z"  ejF                  d       eez  Z$ ed ede$       e ed ejJ                                e
d      jK                          ede      jK                         z   z        z         Z& e'       Z( e e	              ed      z  Z)e)jU                  d        e&ez  ez  ez  ez  Z+e)e+z   e ed      e)e+z  z         z   Z,e,j[                          e e ed      ez         z   Z.e.j[                           G d de      Z/y)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URIRef)r   z 
literalstringlangz^^datatype	c                    t         S N)
NONE_VALUE)xs    WC:\Projects\mas-dev\.venv\Lib\site-packages\rdflib/plugins/sparql/results/tsvresults.py<lambda>r&   7   s    z    c                  &    e Zd ZdddZ	 	 	 	 ddZy)TSVResultParserNc           	     .    t        |j                  d      t              r t        j                  d      |      }t        d      }|j                         }t        t        j                  |j                         d            |_        g |_        	 |j                         }|s	 |S |j                  d      }|dk(  r-t        j                  |d      }|j                  j                  t        t!        |j                   fd|D                           )	Nr   zutf-8SELECTT)parseAll
 c              3  @   K   | ]  }j                  |        y wr"   )convertTerm).0r$   selfs     r%   	<genexpr>z(TSVResultParser.parse.<locals>.<genexpr>Z   s     /QS0@0@0CSs   )
isinstancereadbytescodecs	getreaderr   readlinelistHEADERparseStringstripvarsbindingsROWappenddictzip)r2   sourcecontent_typerheaderlinerows   `      r%   parsezTSVResultParser.parseD   s    fkk!ne, /V%%g.v6F8"f(($(GH
??$D  ::d#Drz//$/6CJJd3qvv/QS/Q#RST r'   c                    |t         u ry t        |t              rI|j                  dk(  r,t	        |j
                  |j                  |j                        S t        d|      |S )Nr   )r   r   z I dont know how to handle this: )	r#   r4   r   name
RDFLiteralr   r   r   	Exception)r2   ts     r%   r0   zTSVResultParser.convertTerm^   sR     
?a#vv"!!((!**MM KLLHr'   r"   )rD   r   rE   ztyping.Optional[str]returnr   )rO   z3Union[object, RDFLiteral, BNode, CompValue, URIRef]rP   z9typing.Optional[Union[object, BNode, URIRef, RDFLiteral]])__name__
__module____qualname__rJ   r0    r'   r%   r)   r)   B   s    4D	Br'   r)   )0__doc__
__future__r   r7   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   rM   setDefaultWhitespaceCharsStringleaveWhitespace
RDFLITERALobjectr#   EMPTYsetParseActionTERMr@   parseWithTabsr;   r)   rT   r'   r%   <module>rf      sm   #     	 	 	 E D - % - ' ' ' . 
?	*	(Ff-g--/0
$-
'
'
)E*f,E,U,U,W
W	X
 X
79
4 00   ) *F-->Ot|z(4.EDL"ABB    	z(4.3./	/    'l 'r'   