From 380c80bbaf2f43a82b10837506a6044cf33378f1 Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Thu, 21 Mar 2024 01:14:59 +0100 Subject: [PATCH] Fix datetime parsing on autosync side --- autosync/autosync/__init__.py | 22 +++++++++++++++------- autosync/autosync/models/movie.py | 4 ++-- autosync/autosync/models/show.py | 4 ++-- autosync/autosync/models/user.py | 2 +- autosync/autosync/models/watch_status.py | 6 +++--- 5 files changed, 23 insertions(+), 15 deletions(-) diff --git a/autosync/autosync/__init__.py b/autosync/autosync/__init__.py index 3fcca024..e6e44ec2 100644 --- a/autosync/autosync/__init__.py +++ b/autosync/autosync/__init__.py @@ -1,20 +1,28 @@ import logging import os + 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 from pika import spec from pika.adapters.blocking_connection import BlockingChannel import pika.credentials -from datetime import date, datetime from autosync.models.message import Message from autosync.services.aggregate import Aggregate 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) service = Aggregate([Simkl()]) @@ -27,8 +35,8 @@ def on_message( body: bytes, ): try: - status = Message.from_json(body) - service.update(status.user, status.resource, status) + message = Message.from_json(body) # type: Message + service.update(message.value.user, message.value.resource, message.value) except Exception as e: logging.exception("Error processing message.", exc_info=e) logging.exception("Body: %s", body) diff --git a/autosync/autosync/models/movie.py b/autosync/autosync/models/movie.py index 03b2273d..dd109ec6 100644 --- a/autosync/autosync/models/movie.py +++ b/autosync/autosync/models/movie.py @@ -1,5 +1,5 @@ from typing import Literal, Optional -from datetime import date +from datetime import datetime from dataclasses import dataclass from dataclasses_json import dataclass_json, LetterCase @@ -10,7 +10,7 @@ from .metadataid import MetadataID @dataclass class Movie: name: str - air_date: Optional[date] + air_date: Optional[datetime] external_id: dict[str, MetadataID] kind: Literal["movie"] diff --git a/autosync/autosync/models/show.py b/autosync/autosync/models/show.py index 5400af70..261d215c 100644 --- a/autosync/autosync/models/show.py +++ b/autosync/autosync/models/show.py @@ -1,5 +1,5 @@ from typing import Literal, Optional -from datetime import date +from datetime import datetime from dataclasses import dataclass from dataclasses_json import dataclass_json, LetterCase @@ -10,7 +10,7 @@ from .metadataid import MetadataID @dataclass class Show: name: str - start_air: Optional[date] + start_air: Optional[datetime] external_id: dict[str, MetadataID] kind: Literal["show"] diff --git a/autosync/autosync/models/user.py b/autosync/autosync/models/user.py index 30f18b7a..fe393499 100644 --- a/autosync/autosync/models/user.py +++ b/autosync/autosync/models/user.py @@ -9,7 +9,7 @@ from typing import Optional class JwtToken: token_type: str access_token: str - refresh_token: str + refresh_token: Optional[str] expire_in: time expire_at: datetime diff --git a/autosync/autosync/models/watch_status.py b/autosync/autosync/models/watch_status.py index 6bd8bc7b..2e85b542 100644 --- a/autosync/autosync/models/watch_status.py +++ b/autosync/autosync/models/watch_status.py @@ -1,4 +1,4 @@ -from datetime import date +from datetime import datetime from dataclasses import dataclass from dataclasses_json import dataclass_json, LetterCase from typing import Optional @@ -16,8 +16,8 @@ class Status(str, Enum): @dataclass_json(letter_case=LetterCase.CAMEL) @dataclass class WatchStatus: - added_date: date - played_date: Optional[date] + added_date: datetime + played_date: Optional[datetime] status: Status watched_time: Optional[int] watched_percent: Optional[int]