2727from collections import defaultdict
2828from collector import SensorCollector , QueryPolicy
2929from utils import getTimeMultiplier , execution_time , cond_execution_time
30- from typing import List
30+ from typing import List , TypeVar
31+
32+ T = TypeVar ('T' , dict , list )
3133
3234
3335class OpenTsdbApi (object ):
@@ -158,6 +160,9 @@ def build_collector(self, jreq: dict) -> SensorCollector:
158160 args ['filters' ] = filters
159161 args ['grouptags' ] = grouptags
160162
163+ if 'arrays' in jreq :
164+ args ['dpsArrays' ] = jreq ['arrays' ]
165+
161166 args ['rawData' ] = q .get ('explicitTags' , False )
162167
163168 args ['sensor' ] = sensor
@@ -379,7 +384,7 @@ def GET(self, **params):
379384 @cherrypy .config (** {'tools.json_in.force' : False })
380385 @cherrypy .tools .json_in () # @UndefinedVariable
381386 @cherrypy .tools .json_out () # @UndefinedVariable
382- def POST (self ):
387+ def POST (self , ** params ):
383388 ''' Process POST. tools.json_in.force is set to False for
384389 compatability between versions of grafana < 3 and version 3.'''
385390
@@ -399,6 +404,9 @@ def POST(self):
399404 self .logger .error (MSG ['QueryError' ].format ('empty' ))
400405 raise cherrypy .HTTPError (400 , ERR [400 ])
401406
407+ if params and params .get ('arrays' ) == 'true' :
408+ jreq ['arrays' ] = True
409+
402410 return self .query (jreq )
403411
404412 def OPTIONS (self ):
@@ -446,7 +454,7 @@ def __init__(self, inputQuery, showQuery=False,
446454 self .tags = tags or defaultdict (list )
447455 self .aggregatedTags = aggrTags or []
448456
449- def to_dict (self , dps : dict = None ):
457+ def to_dict (self , dps : T = None ):
450458 ''' Converts the SingleTimeSeriesResponse object to dict. '''
451459 res = self .__dict__
452460 # Since a single Timeseries might have a huge number of datapoints (dps),
0 commit comments