From addcf531f08dab5495b90632ae563050a72b9131 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 30 Apr 2024 16:37:43 +0500 Subject: [PATCH] owner.update_owner_history - optimization as it may be used very often --- .../api/owner/update_owner_history.py | 35 ++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/src/ifcopenshell-python/ifcopenshell/api/owner/update_owner_history.py b/src/ifcopenshell-python/ifcopenshell/api/owner/update_owner_history.py index 15c13d98f0..27230372fb 100644 --- a/src/ifcopenshell-python/ifcopenshell/api/owner/update_owner_history.py +++ b/src/ifcopenshell-python/ifcopenshell/api/owner/update_owner_history.py @@ -62,7 +62,8 @@ class Usecase: self.settings = {"element": element} def execute(self) -> Union[ifcopenshell.entity_instance, None]: - if not hasattr(self.settings["element"], "OwnerHistory"): + element = self.settings["element"] + if not element.is_a("IfcRoot"): return user = ifcopenshell.api.owner.settings.get_user(self.file) if not user: @@ -70,14 +71,24 @@ class Usecase: application = ifcopenshell.api.owner.settings.get_application(self.file) if not application: return - if not self.settings["element"].OwnerHistory: - self.settings["element"].OwnerHistory = ifcopenshell.api.run("owner.create_owner_history", self.file) - return self.settings["element"].OwnerHistory - if self.file.get_total_inverses(self.settings["element"].OwnerHistory) > 1: - new = ifcopenshell.util.element.copy(self.file, self.settings["element"].OwnerHistory) - self.settings["element"].OwnerHistory = new - self.settings["element"].OwnerHistory.ChangeAction = "MODIFIED" - self.settings["element"].OwnerHistory.LastModifiedDate = int(time.time()) - self.settings["element"].OwnerHistory.LastModifyingUser = user - self.settings["element"].OwnerHistory.LastModifyingApplication = application - return self.settings["element"].OwnerHistory + + # 1 IfcRoot IfcOwnerHistory + owner_history = element[1] + if not owner_history: + owner_history = ifcopenshell.api.run("owner.create_owner_history", self.file) + element[1] = owner_history + return owner_history + + if self.file.get_total_inverses(owner_history) > 1: + owner_history = ifcopenshell.util.element.copy(self.file, owner_history) + element[1] = owner_history + + # 3 IfcOwnerHistory ChangeAction + owner_history[3] = "MODIFIED" + # 4 IfcOwnerHistory LastModifiedDate + owner_history[4] = int(time.time()) + # 5 IfcOwnerHistory LastModifyingUser + owner_history[5] = user + # 6 IfcOwnerHistory LastModifyingApplication + owner_history[6] = application + return owner_history