
    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 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
e      Z G d de      Zy)z

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

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

    )annotationsN)BufferedIOBase
TextIOBase)IODictListOptionalUnioncast)SPARQLResult)ResultResultParserResultSerializer)BNode
IdentifierLiteralURIRefVariablec                  8    e Zd Zd ZdddZ	 	 	 	 	 	 ddZd	dZy)
CSVResultParserc                    d| _         y )N,)delim)selfs    WC:\Projects\mas-dev\.venv\Lib\site-packages\rdflib/plugins/sparql/results/csvresults.py__init__zCSVResultParser.__init__   s	    
    Nc                   t        d      }t        |j                  d      t              r t	        j
                  d      |      }t        j                  || j                        }t        |      D cg c]  }t        |       c}|_        g |_        |D ]7  }|j                  j                  | j                  ||j                               9 |S c c}w )NSELECTr   utf-8	delimiter)r   
isinstancereadbytescodecs	getreadercsvreaderr   nextr   varsbindingsappendparseRow)r   sourcecontent_typerr)   xrows          r   parsezCSVResultParser.parse   s    8 fkk!ne, /V%%g.v6FFdjj9'+F|4|!(1+|4
CJJdmmC89   5s   4Cc                ~    t        d t        ||D cg c]  }| j                  |       c}      D              S c c}w )Nc              3  .   K   | ]  \  }}|||f  y wN ).0varvals      r   	<genexpr>z+CSVResultParser.parseRow.<locals>.<genexpr>0   s%      
FS #JFs   )dictzipconvertTerm)r   r3   vts       r   r.   zCSVResultParser.parseRow-   sB      
#EAD$4$4Q$7#EF
 
 	
#Es   :c                    |dk(  ry |j                  d      rt        |      S |j                  d      s|j                  d      rt        |      S t        |      S )N _:zhttp://zhttps://)
startswithr   r   r   )r   rA   s     r   r?   zCSVResultParser.convertTerm6   sL    7<<8O<<	"all:&>!9qzr   r7   )r/   r   r0   zOptional[str]returnr   )r3   z	List[str]r@   zList[Variable]rF   z-Dict[Variable, Union[BNode, URIRef, Literal]])rA   strrF   z'Optional[Union[BNode, URIRef, Literal]])__name__
__module____qualname__r   r4   r.   r?   r8   r   r   r   r      s.    $

!/
	6
r   r   c                  2    e Zd ZddZdddZ	 	 	 	 	 	 ddZy)	CSVResultSerializerc                r    t        j                  | |       d| _        |j                  dk7  rt	        d      y )Nr   r   z5CSVSerializer can only serialize select query results)r   r   r   type	Exception)r   results     r   r   zCSVResultSerializer.__init__A   s6    !!$/
;;("STT #r   c                   dd l }t        t        t        t        f   |      }t        |t              r|}n6t        t        |      }t        t          |j                  |      |            }t        j                  || j                        }| j                  j                  D 	cg c]  }	| j                  |	|       }
}	|j                  |
       | j                  j                  D ]T  }|j                  | j                  j                  D 	cg c]#  }	| j                  |j                  |	      |      % c}	       V y c c}	w c c}	w )Nr   r!   )r&   r   r
   r   r   r#   	getwriterr(   writerr   rP   r+   serializeTermwriterowr,   get)r   streamencodingkwargsr&   writable_streamstring_streambyte_streamoutr@   vsr3   s               r   	serializezCSVResultSerializer.serializeH   s   
 	 uZ%?@&Ioz2(7M~?K -G-=V-=-=h-G-TUMjj$**=7;{{7G7GH7G!d  H-7GHR;;''CLLCG;;CSCSTCSa##CGGAJ9CST ( I Us   $D>(E
c                6    |yt        |t              rd| S |S )NrC   rD   )r#   r   )r   termrX   s      r   rT   z!CSVResultSerializer.serializeTerm`   s'     <e$v;Kr   N)rP   r   )r    )rW   r   rX   rG   rF   None)ra   zOptional[Identifier]rX   rG   rF   zUnion[str, Identifier])rH   rI   rJ   r   r_   rT   r8   r   r   rL   rL   @   s*    U0(47	r   rL   )__doc__
__future__r   r&   r(   ior   r   typingr   r   r   r	   r
   r   rdflib.plugins.sparql.processorr   rdflib.queryr   r   r   rdflib.termr   r   r   r   r   r   rL   r8   r   r   <module>rj      sG    #  
 ) 8 8 8 ? ? D D'l 'T(* (r   