Source code for ngsildclient.api.helper.temporal
#!/usr/bin/env python3
# Software Name: ngsildclient
# SPDX-FileCopyrightText: Copyright (c) 2021 Orange
# SPDX-License-Identifier: Apache 2.0
#
# This software is distributed under the Apache 2.0;
# see the NOTICE file for more details.
#
# Author: Fabien BATTELLO <fabien.battello@orange.com> et al.
"""
This module contains helper functions to generate temporal query params.
Notes
-----
NGSI-LD dates are expressed in UTC, using the ISO8601 format.
References
----------
.. [1] ETSI, 2021. "Supported data types for Values" in Context Information Management (CIM); NGSI-LD API
ETSI GS CIM 009 V1.4.2, pp. 41-42, 2021-04.
"""
from typing import Union, Optional
from datetime import datetime, timedelta
from ngsildclient.api.constants import TimeProperty
from ngsildclient.utils.iso8601 import from_datetime
[docs]class TemporalQuery(dict):
def __init__(self):
super().__init__()
def after(
self, start: Union[datetime, timedelta, str] = timedelta(days=30), timeprop: Optional[TimeProperty] = None
) -> dict:
self["timerel"] = "after"
if isinstance(start, timedelta):
self["timeAt"] = from_datetime(datetime.utcnow()-start)
elif isinstance(start, datetime):
self["timeAt"] = from_datetime(start)
else:
self["timeAt"] = start
if timeprop is not None:
self["timeproperty"] = timeprop.value
return self
def before(self, end: Union[datetime, str] = datetime.utcnow(), timeprop: Optional[TimeProperty] = None) -> dict:
self["timerel"] = "before"
self["timeAt"] = from_datetime(end) if isinstance(end, datetime) else end
if timeprop is not None:
self["timeproperty"] = timeprop.value
return self
def between(
self, start: Union[datetime, str], end: Union[datetime, str], timeprop: Optional[TimeProperty] = None
) -> dict:
self["timerel"] = "between"
self["timeAt"] = from_datetime(start) if isinstance(start, datetime) else start
self["endTimeAt"] = from_datetime(end) if isinstance(end, datetime) else end
if timeprop is not None:
self["timeproperty"] = timeprop.value
return self