Skip to content

Commit d50d871

Browse files
committed
added %header magic to prepend sparql query with some aritrary command
1 parent 20625a7 commit d50d871

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

README.rst

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,14 @@ value::
153153
%qparam <name>
154154

155155

156+
``%header``
157+
............
158+
Adds a certain header to each sparql queries. This can be used to set some
159+
(potentially non SPARQL) command in the query. For instance virtuoso endpoints
160+
accept the _define_ keyword which can be used to trigger the server reasoner.
161+
162+
163+
156164
``%auth``
157165
...........
158166

sparqlkernel/connection.py

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
'%endpoint' : [ '<url>', 'set SPARQL endpoint. **REQUIRED**'],
5656
'%auth': ['(basic|digest) <username> <passwd>', 'send HTTP authentication'],
5757
'%qparam' : [ '<name> [<value>]', 'add (or delete) a persistent custom parameter to the endpoint query'],
58+
'%header' : [ '<value>', 'set (or delete) a persistent header to all queries (precedes all other lines of the SPARQL query)'],
5859
'%prefix' : [ '<name> [<uri>]', 'set (or delete) a persistent URI prefix for all queries'],
5960
'%graph' : [ '<uri>', 'set default graph for the queries' ],
6061
'%format' : [ 'JSON | N3 | XML | any | default', 'set requested result format' ],
@@ -374,7 +375,7 @@ def __init__( self, logger=None ):
374375
self.log = logger or logging.getLogger(__name__)
375376
self.srv = None
376377
self.log.info( "START" )
377-
self.cfg = CfgStruct( pfx={}, lmt=20, fmt=None, out=None, aut=None,
378+
self.cfg = CfgStruct( header={}, pfx={}, lmt=20, fmt=None, out=None, aut=None,
378379
grh=None, dis='table', typ=False, lan=[], par={} )
379380

380381
def magic( self, line ):
@@ -521,8 +522,19 @@ def magic( self, line ):
521522
except ValueError:
522523
raise KrnlException( 'unknown log level: {}', param )
523524

525+
elif cmd == 'header':
526+
v = param.split(None, 1)
527+
if len(v) == 0:
528+
raise KrnlException("missing %header value")
529+
elif len(v) == 1:
530+
self.cfg.header.pop(v[0], None)
531+
return ['header deleted: {}', v[0]], 'magic'
532+
else:
533+
self.cfg.header[v[0]] = v[1]
534+
return ['header set: {} = {}'] + v, 'magic'
535+
524536
else:
525-
raise KrnlException( "magic not found: {}", cmd )
537+
raise KrnlException( "magic not found: {}", cmd )
526538

527539

528540
def query( self, query, num=0, silent=False ):
@@ -532,12 +544,19 @@ def query( self, query, num=0, silent=False ):
532544
if self.srv is None:
533545
raise KrnlException('no endpoint defined')
534546

535-
# Prepend to the query all predefined SPARQL prefixes
547+
# Add to the query all predefined SPARQL prefixes
536548
if self.cfg.pfx:
537-
prefix = '\n'.join( ( 'PREFIX {} {}'.format(*v)
549+
prefix = '\n'.join( ( 'PREFIX {} {}'.format(*v)
538550
for v in self.cfg.pfx.items() ) )
539551
query = prefix + '\n' + query
540552

553+
# Prepend to the query all predefined Header entries
554+
# The header should be before the prefix and other sparql commands
555+
if self.cfg.header:
556+
header = '\n'.join( ( '{}'.format(v[1])
557+
for v in self.cfg.header.items() ) )
558+
query = header + '\n' + query
559+
541560
if self.log.isEnabledFor(logging.DEBUG):
542561
self.log.debug( "\n%50s%s", query, '...' if len(query)>50 else '' )
543562

0 commit comments

Comments
 (0)