def publish_component_telemetry(self, digital_twin_id, component_name, telemetry, **kwargs): # type: (str, str, object, **Any) -> None """Publish telemetry from a digital twin's component, which is then consumed by one or many destination endpoints (subscribers) defined under. :param str digital_twin_id: The ID of the digital twin. :param str component_name: The name of the DTDL component. :param object telemetry: The telemetry data to be sent. :keyword str message_id: The message ID. If not specified, a UUID will be generated. :return: None :rtype: None :raises ~azure.core.exceptions.HttpResponseError: :raises ~azure.core.exceptions.ResourceNotFoundError: If there is no digital twin with the provided ID or the component name is invalid. """ message_id = kwargs.pop('message_id', None) or str(uuid.uuid4()) timestamp = Serializer.serialize_iso(datetime.utcnow()) return self._client.digital_twins.send_component_telemetry( digital_twin_id, component_name, message_id=message_id, telemetry=telemetry, telemetry_source_time=timestamp, **kwargs)
def test_serialize_datetime(self): date_obj = isodate.parse_datetime('2015-01-01T00:00:00') date_str = Serializer.serialize_iso(date_obj) self.assertEqual(date_str, '2015-01-01T00:00:00.000Z') date_obj = isodate.parse_datetime('1999-12-31T23:59:59-12:00') date_str = Serializer.serialize_iso(date_obj) self.assertEqual(date_str, '2000-01-01T11:59:59.000Z') with self.assertRaises(SerializationError): date_obj = isodate.parse_datetime('9999-12-31T23:59:59-12:00') date_str = Serializer.serialize_iso(date_obj) with self.assertRaises(SerializationError): date_obj = isodate.parse_datetime('0001-01-01T00:00:00+23:59') date_str = Serializer.serialize_iso(date_obj) date_obj = isodate.parse_datetime("2015-06-01T16:10:08.0121-07:00") date_str = Serializer.serialize_iso(date_obj) self.assertEqual(date_str, '2015-06-01T23:10:08.0121Z') date_obj = datetime.min date_str = Serializer.serialize_iso(date_obj) self.assertEqual(date_str, '0001-01-01T00:00:00.000Z') date_obj = datetime.max date_str = Serializer.serialize_iso(date_obj) self.assertEqual(date_str, '9999-12-31T23:59:59.999999Z')
def test_serialize_datetime(self): date_obj = isodate.parse_datetime('2015-01-01T00:00:00') date_str = Serializer.serialize_iso(date_obj) self.assertEqual(date_str, '2015-01-01T00:00:00.000Z') date_obj = isodate.parse_datetime('1999-12-31T23:59:59-12:00') date_str = Serializer.serialize_iso(date_obj) self.assertEqual(date_str, '2000-01-01T11:59:59.000Z') with self.assertRaises(SerializationError): date_obj = isodate.parse_datetime('9999-12-31T23:59:59-12:00') date_str = Serializer.serialize_iso(date_obj) with self.assertRaises(SerializationError): date_obj = isodate.parse_datetime('0001-01-01T00:00:00+23:59') date_str = Serializer.serialize_iso(date_obj) date_obj = isodate.parse_datetime("2015-06-01T16:10:08.0121-07:00") date_str = Serializer.serialize_iso(date_obj) self.assertEqual(date_str, '2015-06-01T23:10:08.0121Z') date_obj = datetime.min date_str = Serializer.serialize_iso(date_obj) self.assertEqual(date_str, '0001-01-01T00:00:00.000Z') date_obj = datetime.max date_str = Serializer.serialize_iso(date_obj) self.assertEqual(date_str, '9999-12-31T23:59:59.999999Z')
def construct_data_feed_dict(update_kwargs): if "dataStartFrom" in update_kwargs: update_kwargs["dataStartFrom"] = Serializer.serialize_iso( update_kwargs["dataStartFrom"]) if "dataSourceParameter" in update_kwargs: update_kwargs["dataSourceParameter"] = update_kwargs[ "dataSourceParameter"]._to_generated_patch() return update_kwargs
def construct_data_feed_dict(update_kwargs): if "dataStartFrom" in update_kwargs: update_kwargs["dataStartFrom"] = Serializer.serialize_iso(update_kwargs["dataStartFrom"]) if "dataSourceParameter" in update_kwargs: update_kwargs["authenticationType"] = update_kwargs["dataSourceParameter"].authentication_type update_kwargs["credentialId"] = update_kwargs["dataSourceParameter"].credential_id update_kwargs["dataSourceParameter"] = update_kwargs["dataSourceParameter"]._to_generated_patch() return update_kwargs
def construct_iso8601(start=None, end=None, duration=None): iso_str = None if start is not None: start = Serializer.serialize_iso(start) if end is not None: end = Serializer.serialize_iso(end) iso_str = start + '/' + end elif duration is not None: iso_str = start + '/' + duration else: raise ValueError( "Start time must be provided aling with duration or end time.") elif end is not None: end = Serializer.serialize_iso(end) iso_str = duration + '/' + end else: iso_str = duration return iso_str
def construct_iso8601(timespan=None): if not timespan: return None try: start, end, duration = None, None, None if isinstance(timespan[1], datetime): # we treat thi as start_time, end_time start, end = timespan[0], timespan[1] elif isinstance( timespan[1], timedelta ): # we treat this as start_time, duration start, duration = timespan[0], timespan[1] else: raise ValueError( "Tuple must be a start datetime with a timedelta or an end datetime." ) except TypeError: duration = timespan # it means only duration (timedelta) is provideds if duration: try: duration = "PT{}S".format(duration.total_seconds()) except AttributeError: raise ValueError("timespan must be a timedelta or a tuple.") iso_str = None if start is not None: start = Serializer.serialize_iso(start) if end is not None: end = Serializer.serialize_iso(end) iso_str = start + "/" + end elif duration is not None: iso_str = start + "/" + duration else: # means that an invalid value None that is provided with start_time raise ValueError( "Duration or end_time cannot be None when provided with start_time." ) else: iso_str = duration return iso_str