o
    i/                     @   sV  d dl Z d dlm  mZ d dlmZ d dlmZm	Z	m
Z
mZmZmZmZmZmZmZmZ d dlmZ d dlmZ d dlmZ d dlmZmZmZmZ d dlmZm Z m!Z!m"Z"m#Z# z
d dl$mZ% d	Z&W n e'yn   d
Z&Y nw dZ(de( Z)e *e+Z,	 G dd deZ-G dd deZ.dej/dee"e!ef fddZ0G dd deZ1G dd dZ2dS )    N)BytesIO)IOTYPE_CHECKINGAnyBinaryIODictOptionalSequenceTextIOTupleUnioncast)XML_NAMESPACE)XMLGenerator)AttributesNSImpl)ResultResultExceptionResultParserResultSerializer)BNode
IdentifierLiteralURIRefVariableTFz&http://www.w3.org/2005/sparql-results#z{%s}c                   @   s(   e Zd Zddedee defddZdS )XMLResultParserNsourcecontent_typereturnc                 C   s   t |S N)	XMLResult)selfr   r    r!   c/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/rdflib/plugins/sparql/results/xmlresults.pyparse3   s   zXMLResultParser.parser   )__name__
__module____qualname__r   r   strr   r#   r!   r!   r!   r"   r   1   s     r   c                   @   s$   e Zd Zddedee fddZdS )r   Nr   r   c                 C   s  d }t |drtrt|tsJ d}| }t||}n	tr't|ts'J tr<t	j
d|d}ttjt	j||d}ntj
|d}tj||d}|td }|td }	|d ur^d	}
n|	d ured
}
ntdt| |
 |
d
krg | _|	D ].}|jt dkrqxi }|D ]}|jt dkrqt|d |t|d< q| j| qxdd |dttf D | _d S |j  dk| _d S )Nencodingutf-8T)	huge_treer(   )parser)r(   booleanresultsASKSELECTz/No RDF result-bindings or boolean answer found!resultbindingr   namec                 S   s   g | ]	}t |d qS )r2   )r   get).0xr!   r!   r"   
<listcomp>p   s    z&XMLResult.__init__.<locals>.<listcomp>z./%shead/%svariabletrue) hasattrr   
isinstancer
   readr   encoder   
FOUND_LXML
lxml_etree	XMLParserr   	xml_etreeElementTreer#   findRESULTS_NS_ETr   r   __init__bindingstag	parseTermr   r3   appendfindallvarstextlowerstrip	askAnswer)r    r   r   parser_encoding
source_strlxml_parsertree
xml_parserr,   r-   type_r0   rr1   r!   r!   r"   rC   8   sT   

zXMLResult.__init__r   )r$   r%   r&   r   r   r'   rC   r!   r!   r!   r"   r   7   s    r   elementr   c                 C   s   | j | j}}|td kr=|du rd}d}d}| ddr%t| d}n| dt dr4| dt }t|||d}|S |td krGt|S |td krQt|S td	|  )
zLrdflib object (Literal, URIRef, BNode) for the given
    elementtree elementliteralN datatypez{%s}lang)rX   languribnodezunknown binding type %r)	rE   rJ   rB   r3   r   r   r   r   	TypeError)rU   rE   rJ   rX   rY   retr!   r!   r"   rF      s"   rF   c                	   @   s6   e Zd ZdefddZddedededd	fd
dZd	S )XMLResultSerializerr0   c                 C   s   t | | d S r   )r   rC   )r    r0   r!   r!   r"   rC      s   zXMLResultSerializer.__init__r)   streamr(   kwargsr   Nc                 K   s   t ||}| jjdkr|g  || jj n)|| jj |  | jjD ]}|	  |
 D ]
\}}||| q1|  q'|  d S )Nr.   )SPARQLXMLWriterr0   typewrite_header	write_askrM   rI   write_results_headerrD   write_start_resultitemswrite_bindingwrite_end_resultclose)r    r_   r(   r`   writerbkeyvalr!   r!   r"   	serialize   s   


zXMLResultSerializer.serializer)   )	r$   r%   r&   r   rC   r   r'   r   ro   r!   r!   r!   r"   r^      s     r^   c                   @   s   e Zd ZdZddedefddZdee dd	fd
dZ	de
dd	fddZdddZdddZdddZdededd	fddZdddZd	S )ra   z1
    Python saxutils-based SPARQL XML Writer
    r)   outputr(   c                 C   s^   t ||}|  |dt |dt |tdfdti i  || _|| _|| _	d| _
d S )NrW   xmlsparqlF)r   startDocumentstartPrefixMappingSPARQL_XML_NAMESPACEr   startElementNSr   rk   _output	_encoding_results)r    rq   r(   rk   r!   r!   r"   rC      s   

zSPARQLXMLWriter.__init__allvarsLr   Nc                 C   s   | j tdfdti i  tdt|D ]$}dt|| i}ddi}| j tdfdt|| | j tdfd q| j tdfd d S )Nheadr   Nr2   r2   variable)rk   rw   rv   r   rangelenr'   endElementNS)r    r{   i	attr_valsattr_qnamesr!   r!   r"   rc      s   zSPARQLXMLWriter.write_headerrn   c                 C   sD   | j tdfdti i  | j t|  | j tdfd d S )Nr,   )rk   rw   rv   r   
charactersr'   rK   r   )r    rn   r!   r!   r"   rd      s
   zSPARQLXMLWriter.write_askc                 C   $   | j tdfdti i  d| _d S )Nr-   T)rk   rw   rv   r   rz   r    r!   r!   r"   re         
z$SPARQLXMLWriter.write_results_headerc                 C   r   )Nr0   T)rk   rw   rv   r   _resultStartedr   r!   r!   r"   rf      r   z"SPARQLXMLWriter.write_start_resultc                 C   s&   | j sJ | jtdfd d| _ d S )Nr0   F)r   rk   r   rv   r   r!   r!   r"   ri      s   

z SPARQLXMLWriter.write_end_resultr2   c                 C   sh  | j sJ dt|i}ddi}| jtdfdt|| t|tr>| jtdfdti i  | j| | j	tdfd nkt|t
r`| jtdfdti i  | j| | j	tdfd nIt|tri }i }|jrz|j|tdf< d|tdf< n|jr|j|d< d	|d< | jtd
fd
t|| | j| | j	td
fd
 ntd| | j	tdfd d S )Nr}   r2   r1   rZ   r[   rY   zxml:lang)NrX   rX   rV   zUnsupported RDF term: %s)r   r'   rk   rw   rv   r   r9   r   r   r   r   r   languager   rX   	Exception)r    r2   rn   r   r   r!   r!   r"   rh      sP   




zSPARQLXMLWriter.write_bindingc                 C   s8   | j r| jtdfd | jtdfd | j  d S )Nr-   rs   )rz   rk   r   rv   endDocumentr   r!   r!   r"   rj   (  s   zSPARQLXMLWriter.closerp   )r   N)r$   r%   r&   __doc__r   r'   rC   r	   r   rc   boolrd   re   rf   ri   r   rh   rj   r!   r!   r!   r"   ra      s    


6ra   )3loggingxml.etree.ElementTreeetreer@   r?   ior   typingr   r   r   r   r   r   r	   r
   r   r   r   xml.domr   xml.sax.saxutilsr   xml.sax.xmlreaderr   rdflib.queryr   r   r   r   rdflib.termr   r   r   r   r   
lxml.etreer=   r<   ImportErrorrv   rB   	getLoggerr$   logr   r   ElementrF   r^   ra   r!   r!   r!   r"   <module>   s0    4
H