Source code for kappa_sdk.user_tasks.data_query_service
from datetime import datetime
from .. import UnitConverter
from .._private._data_api import DataAPI
from ..vector import Vector
from ..metadata import Metadata
from ..unit_enum import UnitEnum
from typing import Optional, cast
[docs]
class DataQueryService:
"""Python wrapper for a Data Query Service.
.. note:: Should not be instantiated directly.
"""
def __init__(self, data_api: DataAPI, unit_converter: UnitConverter):
self.__data_api = data_api
self.__max_read_size = 100000
self.__unit_converter = unit_converter
def get_metadata(self, vector_id: str) -> Metadata:
"""
Get metadata info of the vector
Parameters
----------
vector_id:
The id of the KAPPA Automate vector.
"""
return self.__data_api.get_metadata(vector_id)
def read_vector(self, vector_id: str, from_time: Optional[datetime] = None, to_time: Optional[datetime] = None, count: int = -1,
last: bool = False, unit: Optional[UnitEnum] = None) -> Vector:
""" Reads the data values as :class:`Vector`.
All parameters are optional, if none are given it will read all values.
Parameters
----------
vector_id:
The id of the KAPPA Automate vector.
from_time:
Date to start reading from.
to_time:
Date to read the data up to.
count:
Maximum count of points to return, regardless of from/to settings.
last:
Will return last (count) of points if set to true.
unit:
Convert values from internal units from a specific unit.
Returns
-------
:class:`Vector`:
Vector that contains the requested data values.
"""
metadata = self.__data_api.get_metadata(vector_id)
dates, values = self.__data_api.read_vector(vector_id, from_time, to_time, count, last)
if unit is not None:
values = [cast(float, self.__unit_converter.convert_to_internal(unit, value)) for value in values]
if metadata.is_by_step:
return Vector(dates, values, metadata.first_x, vector_id)
else:
return Vector(dates, values, vector_id=vector_id)