From 0e725a76ab4110f37c436a4fb5530b91604a331c Mon Sep 17 00:00:00 2001 From: Andrey Vertiprahov Date: Sun, 28 Feb 2021 15:42:01 +0500 Subject: [PATCH] Fix etl object loader change_object method. When delete data reset only RemoteSystem scope. --- core/etl/loader/object.py | 13 +++++++++++-- core/etl/remotesystem/base.py | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/core/etl/loader/object.py b/core/etl/loader/object.py index 0cac9cc448..5afa8454d9 100644 --- a/core/etl/loader/object.py +++ b/core/etl/loader/object.py @@ -35,11 +35,14 @@ class ObjectLoader(BaseLoader): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) + # @todo check None model self.clean_map["model"] = ObjectModel.get_by_name self.l_f_m = ObjectModel.objects.get(uuid=LOST_AND_FOUND_UUID) def merge_data(self, o: ObjectM, data: List[Dict[str, Any]]): + # @todo add test to merge_data r = {(attr.interface, attr.attr, attr.scope): attr.value for attr in o.data if attr.scope} + self.logger.debug("Merge data object: %s, Data: %s", o.data, data) for d in data: k = (d["interface"], d["attr"], d["scope"]) if k in r and d["value"] == r[k]: @@ -81,8 +84,14 @@ class ObjectLoader(BaseLoader): if (not o.container and v.get("container")) or ( v.get("container") and v["container"] != str(o.container.id) ): - o.container = self.model.get_by_id(v["container"]) - if not (o.data and v["data"]): + o.container = v["container"] + if "data" not in v or not v["data"]: + # reset only RemoteSystem Scope + # o.data = [] + for item in o.data: + if item.scope == self.system.name: + o.reset_data(interface=item.interface, key=item.attr, scope=self.system.name) + elif v["data"]: self.merge_data(o, v["data"]) o.save() return o diff --git a/core/etl/remotesystem/base.py b/core/etl/remotesystem/base.py index 81e8b2315a..e25b7d563f 100644 --- a/core/etl/remotesystem/base.py +++ b/core/etl/remotesystem/base.py @@ -21,6 +21,7 @@ class BaseRemoteSystem(object): "admdiv", "networksegmentprofile", "networksegment", + "object", "container", "resourcegroup", "managedobjectprofile", @@ -29,7 +30,6 @@ class BaseRemoteSystem(object): "ttsystem", "project", "managedobject", - "object", "link", "subscriberprofile", "subscriber", -- GitLab