diff --git a/autosync/autosync/__init__.py b/autosync/autosync/__init__.py index 6c8cfe64..d7e74d1f 100644 --- a/autosync/autosync/__init__.py +++ b/autosync/autosync/__init__.py @@ -4,11 +4,11 @@ import pika from pika import spec from pika.adapters.blocking_connection import BlockingChannel import pika.credentials +from autosync.services.aggregate import Aggregate from autosync.services.simkl import Simkl -# TODO: declare multiples services -service = Simkl() +service = Aggregate([Simkl()]) def on_message( diff --git a/autosync/autosync/services/aggregate.py b/autosync/autosync/services/aggregate.py new file mode 100644 index 00000000..e8771507 --- /dev/null +++ b/autosync/autosync/services/aggregate.py @@ -0,0 +1,21 @@ +import logging +from autosync.services.service import Service +from ..models.user import User +from ..models.show import Show +from ..models.movie import Movie +from ..models.episode import Episode +from ..models.watch_status import WatchStatus + + +class Aggregate(Service): + def __init__(self, services: list[Service]): + self._services = [x for x in services if x.enabled] + logging.info("Autosync enabled with %s", [x.name for x in self._services]) + + @property + def name(self) -> str: + return "aggragate" + + def update(self, user: User, resource: Movie | Show | Episode, status: WatchStatus): + for service in self._services: + service.update(user, resource, status) diff --git a/autosync/autosync/services/service.py b/autosync/autosync/services/service.py new file mode 100644 index 00000000..e6371135 --- /dev/null +++ b/autosync/autosync/services/service.py @@ -0,0 +1,21 @@ +from abc import abstractmethod, abstractproperty + +from ..models.user import User +from ..models.show import Show +from ..models.movie import Movie +from ..models.episode import Episode +from ..models.watch_status import WatchStatus + + +class Service: + @abstractproperty + def name(self) -> str: + raise NotImplementedError + + @abstractproperty + def enabled(self) -> bool: + return True + + @abstractmethod + def update(self, user: User, resource: Movie | Show | Episode, status: WatchStatus): + raise NotImplementedError diff --git a/autosync/autosync/services/simkl.py b/autosync/autosync/services/simkl.py index 12c18a21..8912e202 100644 --- a/autosync/autosync/services/simkl.py +++ b/autosync/autosync/services/simkl.py @@ -1,5 +1,9 @@ +import os +from typing_extensions import assert_type import requests import logging + +from autosync.services.service import Service from ..models.user import User from ..models.show import Show from ..models.movie import Movie @@ -7,12 +11,20 @@ from ..models.episode import Episode from ..models.watch_status import WatchStatus, Status -class Simkl: +class Simkl(Service): def __init__(self) -> None: - self._api_key = "" + self._api_key = os.environ.get("OIDC_SIMKL_CLIENTID") + + @property + def name(self) -> str: + return "simkl" + + @property + def enabled(self) -> bool: + return self._api_key is not None def update(self, user: User, resource: Movie | Show | Episode, status: WatchStatus): - if "simkl" not in user.external_id: + if "simkl" not in user.external_id or self._api_key is None: return watch_date = status.played_date or status.added_date