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.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(

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