
    01i                        S r SSKJr  SSKrSSKrSSKJrJr  SSKJ	r	J
r
JrJrJrJr  SSKJr  SSKJrJrJr  SSKJrJrJrJrJr   " S	 S
\5      r " S S\5      rg)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                  L    \ rS rSrSrS rS	S
S jjr      SS jrSS jrSr	g)CSVResultParser   z/Parses SPARQL CSV results into a Result object.c                    SU l         g )N,delim)selfs    b/home/james-whalen/.local/lib/python3.13/site-packages/rdflib/plugins/sparql/results/csvresults.py__init__CSVResultParser.__init__   s	    
    Nc                   [        S5      n[        UR                  S5      [        5      (       a  [        R
                  " S5      " U5      n[        R                  " XR                  S9n[        U5       Vs/ s H  n[        U5      PM     snUl        / Ul        U H7  nUR                  R                  U R                  XcR                  5      5        M9     U$ s  snf )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   parseCSVResultParser.parse   s    8 fkk!ne,, %%g.v6FFjj9'+F|4|!(1+|4
CJJdmmC89   5s   7Cc                    [        S [        X! Vs/ s H  o0R                  U5      PM     sn5       5       5      $ s  snf )Nc              3  6   #    U  H  u  pUc  M
  X4v   M     g 7fN ).0varvals      r   	<genexpr>+CSVResultParser.parseRow.<locals>.<genexpr>0   s       
F SJFs   	
)dictzipconvertTerm)r   r6   vts       r   r1   CSVResultParser.parseRow-   s@      
#EA$4$4Q$7#EF
 
 	
#Es   ;c                    US:X  a  g UR                  S5      (       a  [        U5      $ UR                  S5      (       d  UR                  S5      (       a  [        U5      $ [        U5      $ )N _:zhttp://zhttps://)
startswithr   r   r   )r   rF   s     r   rD   CSVResultParser.convertTerm6   sU    7<<8O<<	""all:&>&>!9qzr    r   r;   )r2   r   r3   zOptional[str]returnr   )r6   z	List[str]rE   zList[Variable]rM   z-Dict[Variable, Union[BNode, URIRef, Literal]])rF   strrM   z'Optional[Union[BNode, URIRef, Literal]])
__name__
__module____qualname____firstlineno____doc__r   r7   r1   rD   __static_attributes__r<   r    r   r   r      s1    9$

!/
	6
r    r   c                  F    \ rS rSrSrSS jrS	S
S jjr      SS jrSrg)CSVResultSerializer@   z*Serializes SPARQL results into CSV format.c                t    [         R                  " X5        SU l        UR                  S:w  a  [	        S5      eg )Nr   r"   z5CSVSerializer can only serialize select query results)r   r   r   type	Exception)r   results     r   r   CSVResultSerializer.__init__C   s4    !!$/
;;("STT #r    c                   SS K n[        [        [        [        4   U5      n[        U[        5      (       a  UnO6[        [        U5      n[        [        UR                  " U5      " U5      5      n[        R                  " X`R                  S9nU R                  R                   V	s/ s H  oR                  X5      PM     n
n	UR                  U
5        U R                  R                   HW  nUR                  U R                  R                   V	s/ s H#  oR                  UR                  U	5      U5      PM%     sn	5        MY     g s  sn	f s  sn	f )Nr   r$   )r)   r   r
   r   r   r&   	getwriterr+   writerr   r[   r.   serializeTermwriterowr/   get)r   streamencodingkwargsr)   writable_streamstring_streambyte_streamoutrE   vsr6   s               r   	serializeCSVResultSerializer.serializeJ   s    
 	 uZ%?@&Ioz22(7M~?K V-=-=h-G-TUMjj**=7;{{7G7GH7G!  -7GHR;;''CLLCG;;CSCSTCSa##CGGAJ9CST ( I Us   &E*E

c                B    Uc  g[        U[        5      (       a  SU 3$ U$ )NrI   rJ   )r&   r   )r   termrd   s      r   r`   !CSVResultSerializer.serializeTermb   s*     <e$$v;Kr    r   N)r[   r   )r#   )rc   r   rd   rN   rM   None)rn   zOptional[Identifier]rd   rN   rM   zUnion[str, Identifier])	rO   rP   rQ   rR   rS   r   rk   r`   rT   r<   r    r   rV   rV   @   s-    4U0(47	r    rV   )rS   
__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   rV   r<   r    r   <module>rw      sG    #  
 ) 8 8 8 ? ? D D)l )X** *r    