Source code for allthingstalk.asset_state
# _ _ _ _____ _ _ _____ _ _ ___ ___ _ __
# /_\ | | |_ _| |_ (_)_ _ __ _ __|_ _|_ _| | |__ / __| \| |/ /
# / _ \| | | | | | ' \| | ' \/ _` (_-< | |/ _` | | / / \__ \ |) | ' <
# /_/ \_\_|_| |_| |_||_|_|_||_\__, /__/ |_|\__,_|_|_\_\ |___/___/|_|\_\
# |___/
#
# Copyright 2017 AllThingsTalk
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import datetime
import dateutil.tz
from dateutil.parser import parse as parse_date
[docs]class AssetState:
"""AssetState is used instead of primitive state values (like ``2``, ``"a"``
or ``True``) when publishing data with a custom timestamp, i.e. not the
current timestamp at the time of publishing."""
[docs] def __init__(self, value, at=None):
"""Initializes the asset state.
:param value: Any JSON-serializable value applicable to the given :class:`~allthingstalk.Asset`.
:param datetime.datetime at: Optional timestamp
"""
self.value = value
if at is None:
self.at = datetime.datetime.utcnow()
elif isinstance(at, str):
self.at = parse_date(at)
elif isinstance(at, datetime.datetime):
self.at = at
else:
raise ValueError('Invalid timestamp in at: %s' % at)
if self.at.tzinfo is None:
self.at = self.at.replace(tzinfo=dateutil.tz.tzutc())
def __repr__(self):
return 'AssetState(value=%s, at=%s)' % (self.value, self.at)
def __str__(self):
return str(self.value)