
    Pi,                       d Z ddlmZ ddlZddlZddlZddlZddlZddl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 n# e$ r	 ddlmZ Y nw xY wddl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! ddl"m#Z# ddl$m%Z% ddl&m'Z' dgZ( G d de)          Z* G d de)          Z+ G d de)          Z,di dddfd3d&Z-d4d(Z.d4d)Z/d5d,Z0d6d.Z1d/ Z2d7d0Z3d1 Z4e5d2k    r e4             dS dS )8ae  
A commandline tool for querying with SPARQL on local files and remote sparql endpoints with custom serialization.

example usage:
```bash
    sq path/to/data.ttl -q "SELECT ?x WHERE {?x a foaf:Person. }"
    rdfpipe test.ttl | sparqlquery - -q "SELECT ?x WHERE {?x a foaf:Person. }" --format json
    sq data.ttl -q "ASK {:john a foaf:Person}" --format xml | grep true
    sq path/to/data.ttl --query-file query.rq
    sq data1.ttl data2.ttl -q "DESCRIBE <http://example.com/john>" --format turtle:+spacious
    sq http://example.com/sparqlendpoint --query-file query.rq
    sq http://example.com/sparqlendpoint --query-file query.rq --username user --password secret
    sq /pyth/to/berkeley.db -q "SELECT ?x WHERE {?x a foaf:Person. }" --remote-storetype BerkeleyDB
```

Tip: You can check the truth value for an ASK query, by regex in stdout for 'true'
or 'false'.
    )annotationsN)	Parameter)AnyDictListOptionalTupleType)urlparse)ParseException)DatasetGraph)PluginException)get)plugins)ResultResultSerializer)
Serializer)Store   )_format_and_kwssparqlqueryc                      e Zd ZdS )_ArgumentErrorN__name__
__module____qualname__     l/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/rdflib/tools/sparqlquery.pyr   r   3           Dr    r   c                      e Zd ZdS )_PrintHelpErrorNr   r   r    r!   r$   r$   7   r"   r    r$   c                      e Zd ZdS )InvalidQueryErrorNr   r   r    r!   r&   r&   ;   r"   r    r&   F	endpoints	List[str]querystrresult_formatOptional[str]result_keywordsDict[str, str]authOptional[Tuple[str, str]]	use_stdinboolremote_storetypec                ~   |r,t                                          t          j                  }nt	          | ||          }	 |                    |          }n"# t          $ r}	t          |          |	d }	~	ww xY w| |j        dd|i|}
n |j        di |}
|
#t          |

                                           d S d S )Nformatr   )r   parsesysstdin
_get_graphr)   r   r&   	serializeprintdecode)r'   r)   r+   r-   r/   r1   r3   gresultserr	ret_bytess              r!   r   r   ?   s      :GGMM#)$$y$(8990''%.. 0 0 0&&C/0  %G%NN]NoNN		%G%8888	i  !!!!! s   A 
A6!A11A6destc                    t           j                            |           rdS t          |           }t	          |j                  dk    r|j                                        rdS |j        dv S )NTr   ) file)ospathisabsr   lenschemeisalpharA   qs     r!   _dest_is_localrM   Y   s`    	w}}T tA
18}}ah..00t8|##r    c                2    t          |           }|j        dv S )N)httphttps)r   rI   rK   s     r!   _dest_is_internet_addrrQ   e   s    A8(((r    returnr   c                    |Lt          |t                    }|r || d         |          }n || d                   }t          |          }n)t                      }| D ]}|                    |           |S )Nr   )r/   )location)
get_pluginr   r   r   r6   )r'   r/   r3   storepluginstoregraphxs          r!   r9   r9   j   s     # !1599 	.K	!4888EEK	!--E 	$ 	$AKKK####Lr    $Tuple[Dict[str, Any], Optional[str]]c                   i }|                                  \  }}|j        r|j        |j        }nR|j        rI|j        Bt          |j        d          5 }|                                }d d d            n# 1 swxY w Y   nd }|d}nd|v sd|v rd}nd}|j        t          |j                  \  }}n|ri }d}d}ni }d}t          ||          }	|||d}||	fS )	NrFDESCRIBE	CONSTRUCTTturtlejson)r)   r+   r-   )parse_known_argsr)   	queryfileopenreadr5   r   _create_epilog_from_format)
parseroptstmp_args	rest_argsr)   f	constructformat_format_keywordsepilogs
             r!   _extract_query_and_formatro   |   sb   D 1133Hi~ (,4		  6($c** 	aFFHHE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 }			u		u 4 4			"#28?#C#C 	 		';;F * D
 <s   A44A8;A8c                    i } t           j        dk    rd| d<   t          j        d:dt          dt          j        d| }|                    ddt          d	           |                    d
dt          d	           |                    ddt          d	           t          |          \  }|_	        |                    ddt          d           |                    ddddd           |                    dddd           |                    ddt          d 	           |                    d!d"t          d#	           |                    d$d%t          d&	           	 |
                                }n-# t          j        $ r}|                                 |d }~ww xY wd' |                    d(t                                D             }|rt          d)          |                    d*          #|                                 t          d+          |j        }t#          |j                  d,k    rX|j        d-         d.k    r|t          d/          g }d0|d1<   nt'          |j        d-                   r|j        }|d2}nZ|j        }nR|t          d3          t)          |j                  }t+          d4 |j        D                       rt-          d5          |j        ,|j        %|d6vrt          d7          |j        |j        f|d8<   n2|j        |j        n#|                                 t          d9          |||j        |fS );N)   	   Fexit_on_errorr   )progdescriptionadd_helpformatter_classz-qz--queryz:Sparql query. Cannot be set together with -qf/--queryfile.)typehelpz-qfz--queryfilezPFile from where the sparql query is read. Cannot be set together with -q/--queryz-fz--formatzPrint sparql result in given format. Defaults to 'json' on SELECT, to 'xml' on ASK and to 'turtle' on DESCRIBE and CONSTRUCT. Keywords as described in epilog can be given after format like: FORMAT:(+)KW1,-KW2,KW3=VALUE.endpoint+z\Endpoints for sparql query. Can be set to multiple files. Reads from stdin if '-' is given. )nargsrx   ry   z-wz--warn
store_truez<Output warnings to stderr (by default only critical errors).)actiondefaultry   z-hz--helpry   zGshow help message and exit. Also prints information about given format.)r~   ry   z-uz
--usernamez$Username used during authentication.z-pz
--passwordz$Password used during authentication.z-rsz--remote-storetypezYou can specify which storetype should be used. Can only be set, when using a single endpoint and not stdin. Will default to 'SparqlStore' when endpoint is an internetaddress.c                    g | ]}|d v |	S )>   selfr5   streamencodingr   .0rY   s     r!   
<listcomp>zparse_args.<locals>.<listcomp>   s.     ! ! !888 	
888r    r-   zP'self', 'stream', 'encoding' and 'format' mustnt be used as keywords for format.r)   z5Either -q/--query or -qf/--queryfile must be providedr   r   -z3Cant us remote graphtype, when endpoint is stdin(-)Tr1   SPARQLStorez<If remote graphtype is set, only a single endpoint is valid.c              3  6   K   | ]}t          |           V  d S )N)rM   r   s     r!   	<genexpr>zparse_args.<locals>.<genexpr>  s-      >>1N1%%&>>>>>>r    z9If multiple endpoints are given, all must be local files.)r   zKCan use password and username only, when remote-storetype is 'SPARQLStore'.r/   z/User only provided one of password and usernamer   )r7   version_infoargparseArgumentParser__doc__RawDescriptionHelpFormatteradd_argumentr*   ro   rn   
parse_argsArgumentError
print_helpr   dictr   r3   rH   rz   rQ   listanyNotImplementedErrorusernamepasswordwarn)extra_kwargsrf   rg   argsr?   forbidden_format_keywordsr3   r'   s           r!   r   r      sS   #%L
&  (-_%$  <	   F I	     1	     (	  
 
 
 4F;;D&-
-	     N      6     l+Q     l+Q     M	      ""!   	! !+TVV44! ! !
 ! 
5
 
 	

 xx TUUU,
4=Q=s""+$I   I $D#DM!$455 	&I'#0 II' N   ''	>>>>>>> 	%K   } T]%>?22 :   t}5V		4=#8NOOO&	477s   E/ /F>FFc                   |rt           }nt          }	 t          | |          }n7# t          $ r* d t	          d t                    D             }d|  d| cY S w xY w|j        }t          j        |          }|d S d                    |j	        |j
        g          }t          j        |          }d |j                                        D             }	|	                    d           |	                    d           |t           k    r|	                    d           n|	                    d           d|  d	| d
}
t          |	          dk    r	|
d|	 dz  }
|
dz  }
|
S )Nc                    g | ]	}|j         
S r   )namer   s     r!   r   z._create_epilog_from_format.<locals>.<listcomp>7  s    QQQQVQQQr    z2No plugin registered for sparql result in format 'z'. available plugins: .c                V    g | ]&\  }}|j         t          j        t          j        fv $|'S r   )kindr   KEYWORD_ONLYPOSITIONAL_OR_KEYWORD)r   rY   ys      r!   r   z._create_epilog_from_format.<locals>.<listcomp>B  s>       Aq6i,i.MNNN 	
NNNr    r   r   z#For more customization for format 'z' use `pydoc z`. zKnown keywords are z! Further keywords might be valid.)r   r   rU   r   get_pluginsr:   inspect	getmodulejoinr   r   	signature
parametersitemspoprH   )rl   rk   serializer_plugin_typepluginavailable_pluginsserialize_methodmodulepydoc_targetsigavailable_keywordsrn   s              r!   re   re   .  s    2!+!1
G%;<< 
 
 
QQ[?O-P-PQQQ6 6 6"36 6	
 	
 	

 '/00F~t88V_.>.KLMML

,
-
-C N((**  
 11++q!!!!q!!!	(g 	( 	("	( 	( 	(  ""=(:====
11FMs   $ 1AAc                 z   	 t                      \  } }}}nf# t          $ r t                       Y nLt          t          j        f$ r4}t          |t          j                   t          d           Y d }~nd }~ww xY w|rt          j
        }nt          j        }t          j        |           t          | fd|i| d S )N)rD      )levelr3   )r   r$   exitr   r   r   r;   r7   stderrloggingWARNINGCRITICALbasicConfigr   )r'   r3   r   rg   r?   loglevels         r!   mainr   Y  s     LL	
D   H23   c
####Q  $?#h'''' )     s    A9A9*A44A9__main__)r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r,   )rA   r*   )r/   r0   r3   r,   rR   r   )rR   rZ   )rR   r,   )6r   
__future__r   r   r   r   rE   r7   r   typingr   r   r   r   r	   r
   urllib.parser   pyparsing.exceptionsr   ImportError	pyparsingrdflib.graphr   r   rdflib.pluginr   r   rU   r   r   rdflib.queryr   r   rdflib.serializerr   rdflib.storer   rdfpiper   __all__	Exceptionr   r$   r&   r   rM   rQ   r9   ro   r   re   r   r   r   r    r!   <module>r      s   $ # " " " " "    				 



       9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ! ! ! ! ! !)3333333 ) ) )(((((((() ( ' ' ' ' ' ' ' ) ) ) ) ) ) + + + + + + 0 0 0 0 0 0 1 1 1 1 1 1 1 1 ( ( ( ( ( (       $ $ $ $ $ $/	 	 	 	 	Y 	 	 		 	 	 	 	i 	 	 		 	 	 	 		 	 	 	 $(&(&*&*" " " " "4	$ 	$ 	$ 	$) ) ) )
   $! ! ! !HK8 K8 K8\( ( ( (V  6 zDFFFFF s   A AA