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