Add service aggregates for autosync

This commit is contained in:
Zoe Roux 2024-03-20 21:04:41 +01:00
parent e1f889f862
commit a5c7aef3b8
No known key found for this signature in database
4 changed files with 59 additions and 5 deletions

View File

@ -4,11 +4,11 @@ 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 autosync.services.aggregate import Aggregate
from autosync.services.simkl import Simkl from autosync.services.simkl import Simkl
# TODO: declare multiples services service = Aggregate([Simkl()])
service = Simkl()
def on_message( def on_message(

View File

@ -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)

View File

@ -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

View File

@ -1,5 +1,9 @@
import os
from typing_extensions import assert_type
import requests import requests
import logging import logging
from autosync.services.service import Service
from ..models.user import User from ..models.user import User
from ..models.show import Show from ..models.show import Show
from ..models.movie import Movie from ..models.movie import Movie
@ -7,12 +11,20 @@ from ..models.episode import Episode
from ..models.watch_status import WatchStatus, Status from ..models.watch_status import WatchStatus, Status
class Simkl: class Simkl(Service):
def __init__(self) -> None: 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): 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 return
watch_date = status.played_date or status.added_date watch_date = status.played_date or status.added_date