From c0085e3b2b92b291dc4983d9ba090686d63852e9 Mon Sep 17 00:00:00 2001 From: Bastien Abadie <bastien@nextcairn.com> Date: Fri, 16 Oct 2020 13:27:22 +0200 Subject: [PATCH] Reload known ML classes when a 400 is received on creation --- arkindex_worker/worker.py | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/arkindex_worker/worker.py b/arkindex_worker/worker.py index be46a870..fbec01a3 100644 --- a/arkindex_worker/worker.py +++ b/arkindex_worker/worker.py @@ -8,6 +8,7 @@ import uuid from enum import Enum from pathlib import Path +import apistar import gnupg import yaml from apistar.exceptions import ErrorResponse @@ -294,11 +295,23 @@ class ElementsWorker(BaseWorker): ml_class_id = self.classes[corpus_id].get(ml_class) if ml_class_id is None: logger.info(f"Creating ML class {ml_class} on corpus {corpus_id}") - response = self.api_client.request( - "CreateMLClass", id=corpus_id, body={"name": ml_class} - ) + try: + response = self.api_client.request( + "CreateMLClass", id=corpus_id, body={"name": ml_class} + ) + logger.debug(f"Created ML class {response['id']}") + except apistar.exceptions.ErrorResponse as e: + # Only reload for 400 errors + if e.status_code != 400: + raise + + # Reload and make sure we have the class + self.load_corpus_classes(corpus_id) + assert ( + ml_class in self.classes[corpus_id] + ), "Missing class {ml_class} even after reloading" + ml_class_id = self.classes[corpus_id][ml_class] = response["id"] - logger.debug(f"Created ML class {ml_class_id}") return ml_class_id -- GitLab