From c07e7c7743e64a947f0427a14b474a1194bdad64 Mon Sep 17 00:00:00 2001 From: alaupin-ipsl Date: Tue, 12 May 2026 14:42:26 +0200 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20Permettre=20d'enregistrer=20plusieur?= =?UTF-8?q?s=20Affected=20Facet=20pour=20une=20Issue,=20extraits=20des=20d?= =?UTF-8?q?atasets=20associ=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- errata_ws/db/models.py | 2 +- errata_ws/handlers/publication/create.py | 4 ++-- errata_ws/handlers/publication/propose.py | 6 ++--- errata_ws/utils/publisher.py | 28 +++++++++++++++-------- 4 files changed, 24 insertions(+), 16 deletions(-) diff --git a/errata_ws/db/models.py b/errata_ws/db/models.py index 07e2086..163d592 100644 --- a/errata_ws/db/models.py +++ b/errata_ws/db/models.py @@ -130,7 +130,7 @@ def _get_facets(): for i in facets: if i.issue_uid == self.uid: - result[i.facet_type] = i.facet_value + result[i.facet_type].append(i.facet_value) return dict(result) diff --git a/errata_ws/handlers/publication/create.py b/errata_ws/handlers/publication/create.py index 0291ff2..814b6f4 100644 --- a/errata_ws/handlers/publication/create.py +++ b/errata_ws/handlers/publication/create.py @@ -51,7 +51,7 @@ def _validate_issue_datasets(): if re.search(constants.VERSION_REGEX, dset) is None: raise exceptions.MissingVersionNumber(dset) - validate_dataset_id(self.request.data[constants.JF_PROJECT], sanitized_datasets[0].split("#")[0]) + validate_dataset_id(self.request.data[constants.JF_PROJECT], dset.split("#")[0]) def _validate_user_access(): @@ -98,7 +98,7 @@ def _persist(): entities = get_entities_on_errata_create(self.request.data, self.user_id, self.user_role) # Insert issue first so that the foreign keys can be established. - db.session.insert(entities[0]) + db.session.insert(entities[0], auto_commit=False) # Insert facets/resources/pid-tasks. for entity in entities[1:]: diff --git a/errata_ws/handlers/publication/propose.py b/errata_ws/handlers/publication/propose.py index 373cdb3..963080c 100644 --- a/errata_ws/handlers/publication/propose.py +++ b/errata_ws/handlers/publication/propose.py @@ -53,8 +53,8 @@ def _validate_issue_datasets(): if re.search(constants.VERSION_REGEX, dset) is None: raise exceptions.MissingVersionNumber(dset) - # Exception if esgvoc dataset parsing fails. - validate_dataset_id(self.request.data[constants.JF_PROJECT], sanitized_datasets[0].split("#")[0]) + # Exception if esgvoc dataset parsing fails. + validate_dataset_id(self.request.data[constants.JF_PROJECT], dset.split("#")[0]) def _validate_issue_title(): @@ -89,7 +89,7 @@ def _persist(): entities = get_entities_on_errata_propose(self.request.data, self.request.data["userEmail"]) # Insert errata. - db.session.insert(entities[0]) + db.session.insert(entities[0], auto_commit=False) # Insert associated entities (facets/resources/pid-tasks). for entity in entities[1:]: diff --git a/errata_ws/utils/publisher.py b/errata_ws/utils/publisher.py index d036466..d39efe9 100644 --- a/errata_ws/utils/publisher.py +++ b/errata_ws/utils/publisher.py @@ -163,6 +163,7 @@ def _get_facets(issue, obj): """ facets = [] + unique_facets = set() # Core facets. for facet_type in { @@ -171,23 +172,30 @@ def _get_facets(issue, obj): FACET_TYPE_SEVERITY, FACET_TYPE_STATUS }: - facet = IssueFacet() - facet.project = issue.project - facet.issue_uid = issue.uid - facet.facet_type = facet_type if facet_type == FACET_TYPE_MODERATION_STATUS: - facet.facet_value = issue.moderation_status.lower() + facet_value = issue.moderation_status.lower() else: - facet.facet_value = getattr(issue, facet_type).lower() - facets.append(facet) + facet_value = getattr(issue, facet_type).lower() + unique_facets.add((facet_type, facet_value)) # Project specific facets. - for collection, term in validate_dataset_id(obj[JF_PROJECT], obj[JF_DATASETS][0].split("#")[0])["mapping_used"].items(): + for dataset in obj[JF_DATASETS]: + mapping = validate_dataset_id( + obj[JF_PROJECT], + dataset.split("#")[0] + )["mapping_used"] + + for collection, term in mapping.items(): + unique_facets.add((collection, term)) + + # Create entities. + for facet_type, facet_value in unique_facets: facet = IssueFacet() facet.project = issue.project facet.issue_uid = issue.uid - facet.facet_type = collection - facet.facet_value = term + facet.facet_type = facet_type + facet.facet_value = facet_value + facets.append(facet) return facets From 1afab392cf12dc5343fee4be7351a527b1b5d090 Mon Sep 17 00:00:00 2001 From: alaupin-ipsl Date: Tue, 12 May 2026 14:43:45 +0200 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20Corrige=20la=20transmission=20des=20?= =?UTF-8?q?messages=20d'erreurs=20via=20les=20requ=C3=AAtes=20envoy=C3=A9e?= =?UTF-8?q?s=20par=20le=20front?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- errata_ws/utils/http.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/errata_ws/utils/http.py b/errata_ws/utils/http.py index 289b770..38f2a5e 100644 --- a/errata_ws/utils/http.py +++ b/errata_ws/utils/http.py @@ -185,7 +185,7 @@ def write_error(handler, error): _write(handler, { 'error_code': ERROR_CODES.get(type(error), 999), 'error_field': getattr(error, 'field', '--'), - 'error_message': error.message.strip(), + 'error_message': str(error).strip(), 'error_type': type(error).__name__ }) @@ -210,8 +210,8 @@ def _write_success(handler): try: data = handler.output except AttributeError: - data = str() - encoding = None + data = {} + encoding = "json" # Write respponse. _write(handler, data, encoding)