Fix datetime parsing on autosync side

This commit is contained in:
Zoe Roux 2024-03-21 01:14:59 +01:00
parent a8fe8e2e13
commit 380c80bbaf
No known key found for this signature in database
5 changed files with 23 additions and 15 deletions

View File

@ -1,20 +1,28 @@
import logging import logging
import os import os
import dataclasses_json import dataclasses_json
from datetime import datetime
from marshmallow import fields
dataclasses_json.cfg.global_config.encoders[datetime] = datetime.isoformat
dataclasses_json.cfg.global_config.decoders[datetime] = datetime.fromisoformat
dataclasses_json.cfg.global_config.mm_fields[datetime] = fields.DateTime(format="iso")
dataclasses_json.cfg.global_config.encoders[datetime | None] = datetime.isoformat
dataclasses_json.cfg.global_config.decoders[datetime | None] = datetime.fromisoformat
dataclasses_json.cfg.global_config.mm_fields[datetime | None] = fields.DateTime(
format="iso"
)
import pika import pika
from pika import spec from pika import spec
from pika.adapters.blocking_connection import BlockingChannel from pika.adapters.blocking_connection import BlockingChannel
import pika.credentials import pika.credentials
from datetime import date, datetime
from autosync.models.message import Message from autosync.models.message import Message
from autosync.services.aggregate import Aggregate from autosync.services.aggregate import Aggregate
from autosync.services.simkl import Simkl from autosync.services.simkl import Simkl
dataclasses_json.cfg.global_config.encoders[date] = date.isoformat
dataclasses_json.cfg.global_config.decoders[date] = date.fromisoformat
dataclasses_json.cfg.global_config.encoders[datetime] = datetime.isoformat
dataclasses_json.cfg.global_config.decoders[datetime] = datetime.fromisoformat
logging.basicConfig(level=logging.INFO) logging.basicConfig(level=logging.INFO)
service = Aggregate([Simkl()]) service = Aggregate([Simkl()])
@ -27,8 +35,8 @@ def on_message(
body: bytes, body: bytes,
): ):
try: try:
status = Message.from_json(body) message = Message.from_json(body) # type: Message
service.update(status.user, status.resource, status) service.update(message.value.user, message.value.resource, message.value)
except Exception as e: except Exception as e:
logging.exception("Error processing message.", exc_info=e) logging.exception("Error processing message.", exc_info=e)
logging.exception("Body: %s", body) logging.exception("Body: %s", body)

View File

@ -1,5 +1,5 @@
from typing import Literal, Optional from typing import Literal, Optional
from datetime import date from datetime import datetime
from dataclasses import dataclass from dataclasses import dataclass
from dataclasses_json import dataclass_json, LetterCase from dataclasses_json import dataclass_json, LetterCase
@ -10,7 +10,7 @@ from .metadataid import MetadataID
@dataclass @dataclass
class Movie: class Movie:
name: str name: str
air_date: Optional[date] air_date: Optional[datetime]
external_id: dict[str, MetadataID] external_id: dict[str, MetadataID]
kind: Literal["movie"] kind: Literal["movie"]

View File

@ -1,5 +1,5 @@
from typing import Literal, Optional from typing import Literal, Optional
from datetime import date from datetime import datetime
from dataclasses import dataclass from dataclasses import dataclass
from dataclasses_json import dataclass_json, LetterCase from dataclasses_json import dataclass_json, LetterCase
@ -10,7 +10,7 @@ from .metadataid import MetadataID
@dataclass @dataclass
class Show: class Show:
name: str name: str
start_air: Optional[date] start_air: Optional[datetime]
external_id: dict[str, MetadataID] external_id: dict[str, MetadataID]
kind: Literal["show"] kind: Literal["show"]

View File

@ -9,7 +9,7 @@ from typing import Optional
class JwtToken: class JwtToken:
token_type: str token_type: str
access_token: str access_token: str
refresh_token: str refresh_token: Optional[str]
expire_in: time expire_in: time
expire_at: datetime expire_at: datetime

View File

@ -1,4 +1,4 @@
from datetime import date from datetime import datetime
from dataclasses import dataclass from dataclasses import dataclass
from dataclasses_json import dataclass_json, LetterCase from dataclasses_json import dataclass_json, LetterCase
from typing import Optional from typing import Optional
@ -16,8 +16,8 @@ class Status(str, Enum):
@dataclass_json(letter_case=LetterCase.CAMEL) @dataclass_json(letter_case=LetterCase.CAMEL)
@dataclass @dataclass
class WatchStatus: class WatchStatus:
added_date: date added_date: datetime
played_date: Optional[date] played_date: Optional[datetime]
status: Status status: Status
watched_time: Optional[int] watched_time: Optional[int]
watched_percent: Optional[int] watched_percent: Optional[int]