def convert(self, config, data):
        try:
            if data["data"].get("id") is None:
                attribute_key = list(data["data"].keys())[0]
                attribute_value = list(data["data"].values())[0]

                result = {"url": self.__config["requestUrlExpression"].replace("${attributeKey}", attribute_key) \
                    .replace("${attributeValue}", attribute_value) \
                    .replace("${deviceName}", data["device"]),
                          "data": self.__config["valueExpression"].replace("${attributeKey}", attribute_key) \
                              .replace("${attributeValue}", attribute_value) \
                              .replace("${deviceName}", data["device"])}
            else:
                rest_id = str(data["data"]["id"])
                method_name = data["data"]["method"]
                params = dumps(data["data"]["params"]) or str(
                    data["data"]["params"])

                result = {"url": self.__config["requestUrlExpression"].replace("${restId}", rest_id) \
                    .replace("${methodName}", method_name) \
                    .replace("${params}", params) \
                    .replace("${deviceName}", data["device"]),
                          "data": self.__config["valueExpression"].replace("${restId}", rest_id) \
                              .replace("${methodName}", method_name) \
                              .replace("${params}", params) \
                              .replace("${deviceName}", data["device"])}
            return result
        except Exception as e:
            log.exception(e)
예제 #2
0
    def convert(self, config, data):
        try:
            if data["data"].get("id") is None:
                attribute_key = list(data["data"].keys())[0]
                attribute_value = list(data["data"].values())[0]

                result = {
                    "url":
                    self.__config["requestUrlExpression"].replace(
                        "${attributeKey}", quote(attribute_key)).replace(
                            "${attributeValue}",
                            quote(attribute_value)).replace(
                                "${deviceName}", quote(data["device"])),
                    "data":
                    self.__config["valueExpression"].replace(
                        "${attributeKey}", quote(attribute_key)).replace(
                            "${attributeValue}",
                            quote(attribute_value)).replace(
                                "${deviceName}", quote(data["device"]))
                }
            else:
                rest_id = str(data["data"]["id"])
                method_name = data["data"]["method"]

                result = {
                    "url":
                    self.__config["requestUrlExpression"].replace(
                        "${restId}",
                        rest_id).replace("${methodName}", method_name).replace(
                            "${deviceName}", quote(data["device"])),
                    "data":
                    self.__config["valueExpression"].replace(
                        "${restId}",
                        rest_id).replace("${methodName}", method_name).replace(
                            "${deviceName}", quote(data["device"]))
                }

                result['url'] = TBUtility.replace_params_tags(
                    result['url'], data)

                data_tags = TBUtility.get_values(config.get('valueExpression'),
                                                 data['data'],
                                                 'params',
                                                 get_tag=True)
                data_values = TBUtility.get_values(
                    config.get('valueExpression'),
                    data['data'],
                    'params',
                    expression_instead_none=True)

                for (tag, value) in zip(data_tags, data_values):
                    result['data'] = result["data"].replace(
                        '${' + tag + '}', str(value))

            return result
        except Exception as e:
            log.exception(e)
 def convert(self, config, data):
     datatypes = {"attributes": "attributes",
                  "timeseries": "telemetry"}
     dict_result = {"deviceName": None, "deviceType": None, "attributes": [], "telemetry": []}
     try:
         if self.__config.get("deviceNameExpression") is not None:
             dict_result["deviceName"] = TBUtility.get_value(self.__config.get("deviceNameExpression"), data, expression_instead_none=True)
         else:
             log.error("The expression for looking \"deviceName\" not found in config %s", dumps(self.__config))
         if self.__config.get("deviceTypeExpression") is not None:
             dict_result["deviceType"] = TBUtility.get_value(self.__config.get("deviceTypeExpression"), data, expression_instead_none=True)
         else:
             log.error("The expression for looking \"deviceType\" not found in config %s", dumps(self.__config))
     except Exception as e:
         log.error('Error in converter, for config: \n%s\n and message: \n%s\n', dumps(self.__config), data)
         log.exception(e)
     try:
         for datatype in datatypes:
             dict_result[datatypes[datatype]] = []
             for datatype_config in self.__config.get(datatype, []):
                 value = TBUtility.get_value(datatype_config["value"], data, datatype_config["type"], expression_instead_none=True)
                 value_tag = TBUtility.get_value(datatype_config["value"], data, datatype_config["type"], get_tag=True)
                 key = TBUtility.get_value(datatype_config["key"], data, datatype_config["type"], expression_instead_none=True)
                 key_tag = TBUtility.get_value(datatype_config["key"], data, get_tag=True)
                 if ("${" not in str(value) and "}" not in str(value)) \
                         and ("${" not in str(key) and "}" not in str(key)):
                     is_valid_key = isinstance(key, str) and "${" in datatype_config["key"] and "}" in datatype_config["key"]
                     is_valid_value = isinstance(value, str) and "${" in datatype_config["value"] and "}" in datatype_config["value"]
                     full_key = datatype_config["key"].replace('${' + str(key_tag) + '}', str(key)) if is_valid_key else key
                     full_value = datatype_config["value"].replace('${' + value_tag + '}', value) if is_valid_value else value
                     if datatype == 'timeseries' and (data.get("ts") is not None or data.get("timestamp") is not None):
                         dict_result[datatypes[datatype]].append(
                             {"ts": data.get('ts', data.get('timestamp', int(time()))), 'values': {full_key: full_value}})
                     else:
                         dict_result[datatypes[datatype]].append({full_key: full_value})
     except Exception as e:
         log.error('Error in converter, for config: \n%s\n and message: \n%s\n', dumps(self.__config), str(data))
         log.exception(e)
     return dict_result