Fixed python time again.. and again..
This commit is contained in:
parent
9780923e6a
commit
dd3de9b380
@ -1,17 +1,19 @@
|
|||||||
import json
|
import json
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
from uuid import UUID
|
||||||
from db.database import Database
|
from db.database import Database
|
||||||
from models.enums import TaskStatus
|
from models.enums import TaskStatus
|
||||||
from models.event import MetadataSearchResultEvent
|
from models.event import MetadataSearchResultEvent
|
||||||
from models.task import MetadataSearchPayload, Task, MetadataSearchTask, MetadataSearchData
|
from models.task import MetadataSearchPayload, MetadataSearchTask
|
||||||
from utils.logger import logger
|
from utils.logger import logger
|
||||||
from utils.time import parse_mysql_ts, utc_now
|
from utils.time import parse_mysql_ts, utc_now
|
||||||
|
|
||||||
def fetch_next_task(db: Database) -> Optional[Task]:
|
def fetch_next_task(db: Database) -> Optional[MetadataSearchTask]:
|
||||||
db.validate()
|
db.validate()
|
||||||
cursor = db.conn.cursor(dictionary=True)
|
cursor = db.conn.cursor(dictionary=True)
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
"SELECT * FROM TASKS WHERE TASK='MetadataSearchTask' AND STATUS='Pending' AND CLAIMED=0 AND CONSUMED=0 "
|
"SELECT * FROM TASKS "
|
||||||
|
"WHERE TASK='MetadataSearchTask' AND STATUS='Pending' AND CLAIMED=0 AND CONSUMED=0 "
|
||||||
"ORDER BY PERSISTED_AT ASC LIMIT 1"
|
"ORDER BY PERSISTED_AT ASC LIMIT 1"
|
||||||
)
|
)
|
||||||
row = cursor.fetchone()
|
row = cursor.fetchone()
|
||||||
@ -19,29 +21,41 @@ def fetch_next_task(db: Database) -> Optional[Task]:
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if row["TASK"] == "MetadataSearchTask":
|
# 1. Parse payload (JSON → Pydantic)
|
||||||
# hele JSON ligger i DATA
|
|
||||||
payload = MetadataSearchPayload.model_validate_json(row["DATA"])
|
payload = MetadataSearchPayload.model_validate_json(row["DATA"])
|
||||||
|
|
||||||
|
# 2. Parse UUIDs (DB gir str → modellen krever UUID)
|
||||||
|
reference_id = UUID(row["REFERENCE_ID"])
|
||||||
|
task_id = UUID(row["TASK_ID"])
|
||||||
|
|
||||||
|
# 3. Parse enum (DB gir str → modellen krever TaskStatus)
|
||||||
|
status = TaskStatus(row["STATUS"])
|
||||||
|
|
||||||
|
# 4. Parse timestamps (DB gir str → modellen krever datetime)
|
||||||
|
last_check_in = parse_mysql_ts(row["LAST_CHECK_IN"])
|
||||||
|
persisted_at = parse_mysql_ts(row["PERSISTED_AT"])
|
||||||
|
|
||||||
|
# 5. Bygg modellen med riktige typer
|
||||||
return MetadataSearchTask(
|
return MetadataSearchTask(
|
||||||
referenceId=row["REFERENCE_ID"],
|
referenceId=reference_id,
|
||||||
taskId=row["TASK_ID"],
|
taskId=task_id,
|
||||||
task=row["TASK"],
|
task=row["TASK"],
|
||||||
status=row["STATUS"],
|
status=status,
|
||||||
data=payload.data,
|
data=payload.data,
|
||||||
claimed=row["CLAIMED"],
|
claimed=row["CLAIMED"],
|
||||||
claimedBy=row["CLAIMED_BY"],
|
claimedBy=row["CLAIMED_BY"],
|
||||||
consumed=row["CONSUMED"],
|
consumed=row["CONSUMED"],
|
||||||
lastCheckIn=parse_mysql_ts(row["LAST_CHECK_IN"]),
|
lastCheckIn=last_check_in,
|
||||||
persistedAt=parse_mysql_ts(row["PERSISTED_AT"])
|
persistedAt=persisted_at
|
||||||
)
|
)
|
||||||
else:
|
|
||||||
return None
|
except Exception:
|
||||||
except Exception as e:
|
logger.exception(f"❌ Feil ved deserialisering av task {row.get('TASK_ID')}")
|
||||||
logger.error(f"❌ Feil ved deserialisering av task {row.get('TASK_ID')}: {e}")
|
|
||||||
mark_failed(db, row["TASK_ID"])
|
mark_failed(db, row["TASK_ID"])
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def mark_failed(db: Database, task_id: str) -> None:
|
def mark_failed(db: Database, task_id: str) -> None:
|
||||||
cursor = db.conn.cursor()
|
cursor = db.conn.cursor()
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
|
|||||||
@ -8,3 +8,4 @@ def parse_mysql_ts(value):
|
|||||||
if value is None:
|
if value is None:
|
||||||
return None
|
return None
|
||||||
return datetime.strptime(value, "%Y-%m-%d %H:%M:%S.%f").replace(tzinfo=timezone.utc)
|
return datetime.strptime(value, "%Y-%m-%d %H:%M:%S.%f").replace(tzinfo=timezone.utc)
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user