Skip to content

Commit 82995c0

Browse files
committed
Add handling for unexpected jobs in webhooks
1 parent f22f66e commit 82995c0

File tree

2 files changed

+25
-13
lines changed

2 files changed

+25
-13
lines changed

packages/examples/cvat/exchange-oracle/src/handlers/cvat_events.py

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import src.services.cvat as cvat_service
77
from src.core.types import AssignmentStatuses, JobStatuses
88
from src.db import SessionLocal
9+
from sqlalchemy.exc import IntegrityError
910
from src.db.utils import ForUpdateParams
1011
from src.log import ROOT_LOGGER_NAME
1112
from src.schemas.cvat import CvatWebhook
@@ -120,17 +121,28 @@ def handle_update_job_event_request(payload: CvatWebhook) -> None:
120121
# We're only interested in state updates
121122
return
122123

123-
with SessionLocal.begin() as session:
124-
cvat_service.incoming_webhooks.create_webhook(
125-
session,
126-
cvat_project_id=payload.job["project_id"], # all oracle jobs have project
127-
cvat_task_id=payload.job["task_id"],
128-
cvat_job_id=payload.job["id"],
129-
event_type=payload.event,
130-
event_data=payload.model_dump_json(indent=None),
131-
)
132-
133-
# TODO: handle unknown job, task and project ids
124+
try:
125+
with SessionLocal.begin() as session:
126+
cvat_service.incoming_webhooks.create_webhook(
127+
session,
128+
cvat_project_id=payload.job["project_id"], # all oracle jobs have project
129+
cvat_task_id=payload.job["task_id"],
130+
cvat_job_id=payload.job["id"],
131+
event_type=payload.event,
132+
event_data=payload.model_dump_json(indent=None),
133+
)
134+
except IntegrityError as e:
135+
if "is not present in table" in str(e.orig):
136+
logger = get_function_logger(module_logger_name)
137+
logger.warning(
138+
f"Received a webhook event '{payload.event}' for "
139+
f"project_id={payload.job['project_id']} "
140+
f"task_id={payload.job['task_id']} "
141+
f"job_id={payload.job['id']}. "
142+
"The corresponding object doesn't exist in the DB, ignoring"
143+
)
144+
else:
145+
raise
134146

135147

136148
def cvat_webhook_request_handler(cvat_webhook: CvatWebhook) -> None:

packages/examples/cvat/recording-oracle/src/core/types.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@ class TaskTypes(str, Enum, metaclass=BetterEnumMeta):
2020
image_skeletons_from_boxes = "image_skeletons_from_boxes"
2121

2222

23-
class OracleWebhookTypes(str, Enum):
23+
class OracleWebhookTypes(str, Enum, metaclass=BetterEnumMeta):
2424
exchange_oracle = "exchange_oracle"
2525
recording_oracle = "recording_oracle"
2626
reputation_oracle = "reputation_oracle"
2727

2828

29-
class OracleWebhookStatuses(str, Enum):
29+
class OracleWebhookStatuses(str, Enum, metaclass=BetterEnumMeta):
3030
pending = "pending"
3131
completed = "completed"
3232
failed = "failed"

0 commit comments

Comments
 (0)