|
6 | 6 | import src.services.cvat as cvat_service |
7 | 7 | from src.core.types import AssignmentStatuses, JobStatuses |
8 | 8 | from src.db import SessionLocal |
| 9 | +from sqlalchemy.exc import IntegrityError |
9 | 10 | from src.db.utils import ForUpdateParams |
10 | 11 | from src.log import ROOT_LOGGER_NAME |
11 | 12 | from src.schemas.cvat import CvatWebhook |
@@ -120,17 +121,28 @@ def handle_update_job_event_request(payload: CvatWebhook) -> None: |
120 | 121 | # We're only interested in state updates |
121 | 122 | return |
122 | 123 |
|
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 |
134 | 146 |
|
135 | 147 |
|
136 | 148 | def cvat_webhook_request_handler(cvat_webhook: CvatWebhook) -> None: |
|
0 commit comments