77import codecs
88import csv
99from datetime import datetime , timedelta
10- from typing import List , Generator , Any , Union , Iterable
10+ from typing import List , Generator , Any , Union , Iterable , Callable
1111
1212from influxdb_client import Dialect , IntegerLiteral , BooleanLiteral , FloatLiteral , DateTimeLiteral , StringLiteral , \
1313 VariableAssignment , Identifier , OptionStatement , File , DurationLiteral , Duration , UnaryExpression , Expression , \
2222class QueryOptions (object ):
2323 """Query options."""
2424
25- def __init__ (self , profilers : List [str ] = None ) -> None :
25+ def __init__ (self , profilers : List [str ] = None , profiler_callback : Callable = None ) -> None :
2626 """
2727 Initialize query options.
2828
2929 :param profilers: list of enabled flux profilers
30+ :param profiler_callback: callback function return profilers (FluxRecord)
3031 """
3132 self .profilers = profilers
33+ self .profiler_callback = profiler_callback
3234
3335
3436class QueryApi (object ):
@@ -101,7 +103,7 @@ def query(self, query: str, org=None, params: dict = None) -> List['FluxTable']:
101103 async_req = False , _preload_content = False , _return_http_data_only = False )
102104
103105 _parser = FluxCsvParser (response = response , serialization_mode = FluxSerializationMode .tables ,
104- profilers = self ._profilers ())
106+ query_options = self ._get_query_options ())
105107
106108 list (_parser .generator ())
107109
@@ -123,7 +125,7 @@ def query_stream(self, query: str, org=None, params: dict = None) -> Generator['
123125 response = self ._query_api .post_query (org = org , query = self ._create_query (query , self .default_dialect , params ),
124126 async_req = False , _preload_content = False , _return_http_data_only = False )
125127 _parser = FluxCsvParser (response = response , serialization_mode = FluxSerializationMode .stream ,
126- profilers = self ._profilers ())
128+ query_options = self ._get_query_options ())
127129
128130 return _parser .generator ()
129131
@@ -176,17 +178,18 @@ def query_data_frame_stream(self, query: str, org=None, data_frame_index: List[s
176178
177179 _parser = FluxCsvParser (response = response , serialization_mode = FluxSerializationMode .dataFrame ,
178180 data_frame_index = data_frame_index ,
179- profilers = self ._profilers ())
181+ query_options = self ._get_query_options ())
180182 return _parser .generator ()
181183
182- def _profilers (self ):
184+ def _get_query_options (self ):
183185 if self ._query_options and self ._query_options .profilers :
184- return self ._query_options . profilers
185- else :
186- return self ._influxdb_client .profilers
186+ return self ._query_options
187+ elif self . _influxdb_client . profilers :
188+ return QueryOptions ( profilers = self ._influxdb_client .profilers )
187189
188190 def _create_query (self , query , dialect = default_dialect , params : dict = None ):
189- profilers = self ._profilers ()
191+ query_options = self ._get_query_options ()
192+ profilers = query_options .profilers if query_options is not None else None
190193 q = Query (query = query , dialect = dialect , extern = QueryApi ._build_flux_ast (params , profilers ))
191194
192195 if profilers :
0 commit comments