From c60eac879e491a218daf7d028529ddf44bd4d78d Mon Sep 17 00:00:00 2001 From: Tim Lorsbach Date: Tue, 15 Sep 2026 23:13:21 +0200 Subject: [PATCH] wip --- epdb/logic.py | 3 +++ epdb/models.py | 28 ++++++++++++++++++++++++++++ epdb/views.py | 13 ++++++++++++- 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/epdb/logic.py b/epdb/logic.py index 2aeffdce..f49cffc9 100644 --- a/epdb/logic.py +++ b/epdb/logic.py @@ -581,6 +581,9 @@ class PackageManager(object): if caller_perm != Permission.ALL[0] and not caller.is_superuser: raise ValueError("Only owner are allowed to modify permissions") + if isinstance(grantee, Group) and package.classification_level == package.Classification.SECRET: + raise ValueError("Cannot grant permissions to a Group on a secret package") + data = { "package": package, } diff --git a/epdb/models.py b/epdb/models.py index 0fa2182f..98318700 100644 --- a/epdb/models.py +++ b/epdb/models.py @@ -2456,6 +2456,20 @@ class Node(EnviPathModel, AliasMixin, ScenarioMixin, AdditionalInformationMixin) else: return self.default_node_label.name + def get_description(self, include_suffix=True): + default_desc = False + + if self.description == "no description": + default_desc = True + + if not default_desc: + return self.description + else: + if include_suffix: + return f"{self.default_node_label.description} (taken from underlying structure)" + else: + return self.default_node_label.description + def d3_json(self): app_domain_data = self.get_app_domain_assessment_data() @@ -2773,6 +2787,20 @@ class Edge(EnviPathModel, AliasMixin, ScenarioMixin, AdditionalInformationMixin) else: return self.edge_label.name + def get_description(self, include_suffix=True): + default_desc = False + + if self.description == "no description": + default_desc = True + + if not default_desc: + return self.description + else: + if include_suffix: + return f"{self.edge_label.description} (taken from underlying reaction)" + else: + return self.edge_label.description + class EPModel(PolymorphicModel, EnviPathModel, AdditionalInformationMixin): package = models.ForeignKey( diff --git a/epdb/views.py b/epdb/views.py index eed23dc6..2a2e392f 100644 --- a/epdb/views.py +++ b/epdb/views.py @@ -1292,7 +1292,7 @@ def package(request, package_uuid): "user_id", flat=True ) ) - users = users.filter(is_active=True) + users = users.filter(is_active=True).exclude(username="anonymous") group_perms = GroupPackagePermission.objects.filter(package=current_package) groups = Group.objects.exclude( @@ -1324,6 +1324,12 @@ def package(request, package_uuid): return redirect(s.SERVER_URL + "/package") elif hidden == "publish-package": + if current_package.classification_level == current_package.Classification.SECRET: + return error( + request, + "Cannot publish a secret package", + "You cannot publish a secret package.", + ) for g in Group.objects.filter(public=True): PackageManager.grant_read(current_user, current_package, g) return redirect(current_package.url) @@ -3314,6 +3320,11 @@ def jobs(request): "This Package was generated automatically for the batch prediction task.", ) + if current_user.default_package.classification_level == current_user.default_package.Classification.SECRET: + target_package.classification_level = current_user.default_package.Classification.SECRET + target_package.data_pool = current_user.default_package.data_pool + target_package.save() + from .tasks import batch_predict, dispatch res = dispatch(