def to_xml(self): """Convert this datapoint into a form suitable for pushing to device cloud An XML string will be returned that will contain all pieces of information set on this datapoint. Values not set (e.g. quality) will be ommitted. """ type_converter = _get_encoder_method(self._data_type) # Convert from python native to device cloud encoded_data = type_converter(self._data) out = StringIO() out.write("<DataPoint>") out.write("<streamId>{}</streamId>".format(self.get_stream_id())) out.write("<data>{}</data>".format(encoded_data)) conditional_write(out, "<description>{}</description>", self.get_description()) if self.get_timestamp() is not None: out.write("<timestamp>{}</timestamp>".format( isoformat(self.get_timestamp()))) conditional_write(out, "<quality>{}</quality>", self.get_quality()) if self.get_location() is not None: out.write("<location>%s</location>" % ",".join(map(str, self.get_location()))) conditional_write(out, "<streamType>{}</streamType>", self.get_data_type()) conditional_write(out, "<streamUnits>{}</streamUnits>", self.get_units()) out.write("</DataPoint>") return out.getvalue()
def to_xml(self): """Convert this datapoint into a form suitable for pushing to device cloud An XML string will be returned that will contain all pieces of information set on this datapoint. Values not set (e.g. quality) will be ommitted. """ type_converter = _get_encoder_method(self._data_type) # Convert from python native to device cloud encoded_data = type_converter(self._data) out = StringIO() out.write("<DataPoint>") out.write("<streamId>{}</streamId>".format(self.get_stream_id())) out.write("<data>{}</data>".format(encoded_data)) conditional_write(out, "<description>{}</description>", self.get_description()) if self.get_timestamp() is not None: out.write("<timestamp>{}</timestamp>".format(isoformat(self.get_timestamp()))) conditional_write(out, "<quality>{}</quality>", self.get_quality()) if self.get_location() is not None: out.write("<location>%s</location>" % ",".join(map(str, self.get_location()))) conditional_write(out, "<streamType>{}</streamType>", self.get_data_type()) conditional_write(out, "<streamUnits>{}</streamUnits>", self.get_units()) out.write("</DataPoint>") return out.getvalue()
def create_stream(self, stream_id, data_type, description=None, data_ttl=None, rollup_ttl=None, units=None): """Create a new data stream on the device cloud This method will attempt to create a new data stream on the device cloud. This method will only succeed if the stream does not already exist. :param str stream_id: The path/id of the stream being created on the device cloud. :param str data_type: The type of this stream. This must be in the set `{ INTEGER, LONG, FLOAT, DOUBLE, STRING, BINARY, UNKNOWN }`. These values are available in constants like :attr:`~STREAM_TYPE_INTEGER`. :param str description: An optional description of this stream. See :meth:`~DataStream.get_description`. :param int data_ttl: The TTL for data points in this stream. See :meth:`~DataStream.get_data_ttl`. :param int rollup_ttl: The TTL for performing rollups on data. See :meth:~DataStream.get_rollup_ttl`. :param str units: Units for data in this stream. See :meth:`~DataStream.get_units` """ stream_id = validate_type(stream_id, *six.string_types) data_type = validate_type(data_type, type(None), *six.string_types) if isinstance(data_type, *six.string_types): data_type = str(data_type).upper() if not data_type in (set([None, ]) | set(list(DSTREAM_TYPE_MAP.keys()))): raise ValueError("data_type %r is not valid" % data_type) description = validate_type(description, type(None), *six.string_types) data_ttl = validate_type(data_ttl, type(None), *six.integer_types) rollup_ttl = validate_type(rollup_ttl, type(None), *six.integer_types) units = validate_type(units, type(None), *six.string_types) sio = StringIO() sio.write("<DataStream>") conditional_write(sio, "<streamId>{}</streamId>", stream_id) conditional_write(sio, "<dataType>{}</dataType>", data_type) conditional_write(sio, "<description>{}</description>", description) conditional_write(sio, "<dataTtl>{}</dataTtl>", data_ttl) conditional_write(sio, "<rollupTtl>{}</rollupTtl>", rollup_ttl) conditional_write(sio, "<units>{}</units>", units) sio.write("</DataStream>") self._conn.post("/ws/DataStream", sio.getvalue()) logger.info("Data stream (%s) created successfully", stream_id) stream = DataStream(self._conn, stream_id) return stream