Source code for microesb.transformer
# ]*[ --------------------------------------------------------------------- ]*[
#  .                  Micro ESB transformer Python Module                    .
# ]*[ --------------------------------------------------------------------- ]*[
#  .                                                                         .
#  .  Copyright Claus Prüfer 2016-2024                                       .
#  .                                                                         .
#  .                                                                         .
# ]*[ --------------------------------------------------------------------- ]*[
import json
import copy
[docs]class JSONTransformer(object):
    """ JSON transfomer class.
    """
[docs]    def __init__(self):
        """
        :ivar dict[dict] _json_dict: recursive internal properties processing dict
        """
        self._json_dict = {}
[docs]    def json_transform(self):
        """ json_transform() method.
        Recursive generate _json_dict for complete object hierarchy.
        """
        root_instance = copy.copy(self)
        for element in root_instance.iterate():
            element.set_json_dict()
            self.logger.debug('JSON:{} properties:{}'.format(
                    element.json_dict,
                    element._SYSProperties
                )
            )
        while root_instance.class_count > 0:
            for element in root_instance.iterate():
                if element.class_count == 0 and element._SYSType != 'multiclass_instance':
                    cname = element.class_name
                    parent_element = element.parent_object
                    parent_element._json_dict[cname] = element.json_dict[cname]
                    class_names_list = parent_element._SYSClassNames
                    del class_names_list[class_names_list.index(cname)]
        self._json_dict = root_instance.json_dict
        del root_instance
    @property
    def json(self):
        """ json() method.
        :return: json.dumps(self._json_dict)
        :rtype: str (json dump)
        Decorated with @property so direct property access possible
        """
        return json.dumps(self._json_dict)
    @property
    def json_dict(self):
        """ json_dict() method.
        :return: self._json_dict
        :rtype: dict
        Decorated with @property so direct property access possible
        """
        return self._json_dict