diff --git a/plextraktsync/media/MediaFactory.py b/plextraktsync/media/MediaFactory.py index 8d856241ee..81134902c1 100644 --- a/plextraktsync/media/MediaFactory.py +++ b/plextraktsync/media/MediaFactory.py @@ -10,8 +10,8 @@ from plextraktsync.media.Media import Media if TYPE_CHECKING: + from plextraktsync.plex.guid.PlexGuid import PlexGuid from plextraktsync.plex.PlexApi import PlexApi - from plextraktsync.plex.PlexGuid import PlexGuid from plextraktsync.plex.PlexLibraryItem import PlexLibraryItem from plextraktsync.trakt.TraktApi import TraktApi from plextraktsync.trakt.TraktItem import TraktItem diff --git a/plextraktsync/plan/Walker.py b/plextraktsync/plan/Walker.py index 60d07683a8..9f618324a4 100644 --- a/plextraktsync/plan/Walker.py +++ b/plextraktsync/plan/Walker.py @@ -6,7 +6,7 @@ from plextraktsync.decorators.measure_time import measure_time from plextraktsync.factory import logging from plextraktsync.mixin.SetWindowTitle import SetWindowTitle -from plextraktsync.plex.PlexGuid import PlexGuid +from plextraktsync.plex.guid.PlexGuid import PlexGuid from plextraktsync.plex.PlexLibraryItem import PlexLibraryItem from plextraktsync.trakt.TraktApi import TraktApi from plextraktsync.trakt.TraktItem import TraktItem diff --git a/plextraktsync/plex/PlexApi.py b/plextraktsync/plex/PlexApi.py index f9ea298cf5..3ecd4f4172 100644 --- a/plextraktsync/plex/PlexApi.py +++ b/plextraktsync/plex/PlexApi.py @@ -105,7 +105,7 @@ def search_by_guid(self, guids: dict, libtype: str): fetchItem(ekey, guid__id__regex=r"(imdb|tmdb|tvdb)://") """ - from plextraktsync.plex.PlexGuid import PlexGuid + from plextraktsync.plex.guid.PlexGuid import PlexGuid # Build regex of possible matches keys = "|".join(guids.keys()) diff --git a/plextraktsync/plex/PlexGuidProvider.py b/plextraktsync/plex/PlexGuidProvider.py deleted file mode 100644 index a6e2bbb9a6..0000000000 --- a/plextraktsync/plex/PlexGuidProvider.py +++ /dev/null @@ -1,32 +0,0 @@ -from __future__ import annotations - -from typing import TYPE_CHECKING - -from plextraktsync.plex.PlexGuidProviderIMDB import PlexGuidProviderIMDB -from plextraktsync.plex.PlexGuidProviderLocal import PlexGuidProviderLocal -from plextraktsync.plex.PlexGuidProviderMbid import PlexGuidProviderMbid -from plextraktsync.plex.PlexGuidProviderTMDB import PlexGuidProviderTMDB -from plextraktsync.plex.PlexGuidProviderTVDB import PlexGuidProviderTVDB -from plextraktsync.plex.PlexGuidProviderYoutube import PlexGuidProviderYoutube - -if TYPE_CHECKING: - from plextraktsync.plex.PlexGuid import PlexGuid - - -class PlexGuidProvider: - @classmethod - def create(cls, guid: PlexGuid): - if guid.provider == "imdb": - return PlexGuidProviderIMDB(guid) - if guid.provider == "tmdb": - return PlexGuidProviderTMDB(guid) - if guid.provider == "tvdb": - return PlexGuidProviderTVDB(guid) - if guid.provider == "mbid": - return PlexGuidProviderMbid(guid) - if guid.provider == "youtube": - return PlexGuidProviderYoutube(guid) - if guid.provider in ["local", "none"]: - return PlexGuidProviderLocal(guid) - - raise RuntimeError(f"Unsupported provider: {guid.provider}") diff --git a/plextraktsync/plex/PlexLibraryItem.py b/plextraktsync/plex/PlexLibraryItem.py index 967dea3144..e37b2a3bb8 100644 --- a/plextraktsync/plex/PlexLibraryItem.py +++ b/plextraktsync/plex/PlexLibraryItem.py @@ -8,7 +8,7 @@ from plextraktsync.decorators.retry import retry from plextraktsync.factory import factory -from plextraktsync.plex.PlexGuid import PlexGuid +from plextraktsync.plex.guid.PlexGuid import PlexGuid from plextraktsync.rich.RichMarkup import RichMarkup from plextraktsync.util.Rating import Rating diff --git a/plextraktsync/plex/PlexGuid.py b/plextraktsync/plex/guid/PlexGuid.py similarity index 96% rename from plextraktsync/plex/PlexGuid.py rename to plextraktsync/plex/guid/PlexGuid.py index 0a6798eb23..5056e37f8a 100644 --- a/plextraktsync/plex/PlexGuid.py +++ b/plextraktsync/plex/guid/PlexGuid.py @@ -4,9 +4,10 @@ from typing import TYPE_CHECKING from plextraktsync.factory import factory -from plextraktsync.plex.PlexGuidProvider import PlexGuidProvider from plextraktsync.rich.RichMarkup import RichMarkup +from .provider.Factory import Factory as GuidProviderFactory + if TYPE_CHECKING: from plextraktsync.plex.PlexLibraryItem import PlexLibraryItem @@ -108,7 +109,7 @@ def title_link(self): @property def provider_link(self): - provider = PlexGuidProvider().create(self) + provider = GuidProviderFactory().create(self) link = provider.link if not link: diff --git a/plextraktsync/plex/guid/provider/Factory.py b/plextraktsync/plex/guid/provider/Factory.py new file mode 100644 index 0000000000..b371b93111 --- /dev/null +++ b/plextraktsync/plex/guid/provider/Factory.py @@ -0,0 +1,32 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING + +from .IMDB import IMDB +from .Local import Local +from .Mbid import Mbid +from .TMDB import TMDB +from .TVDB import TVDB +from .Youtube import Youtube + +if TYPE_CHECKING: + from plextraktsync.plex.guid.PlexGuid import PlexGuid + + +class Factory: + @classmethod + def create(cls, guid: PlexGuid): + if guid.provider == "imdb": + return IMDB(guid) + if guid.provider == "tmdb": + return TMDB(guid) + if guid.provider == "tvdb": + return TVDB(guid) + if guid.provider == "mbid": + return Mbid(guid) + if guid.provider == "youtube": + return Youtube(guid) + if guid.provider in ["local", "none"]: + return Local(guid) + + raise RuntimeError(f"Unsupported provider: {guid.provider}") diff --git a/plextraktsync/plex/PlexGuidProviderIMDB.py b/plextraktsync/plex/guid/provider/IMDB.py similarity index 81% rename from plextraktsync/plex/PlexGuidProviderIMDB.py rename to plextraktsync/plex/guid/provider/IMDB.py index a3c11e88b6..0018660d41 100644 --- a/plextraktsync/plex/PlexGuidProviderIMDB.py +++ b/plextraktsync/plex/guid/provider/IMDB.py @@ -3,10 +3,10 @@ from typing import TYPE_CHECKING if TYPE_CHECKING: - from plextraktsync.plex.PlexGuid import PlexGuid + from plextraktsync.plex.guid.PlexGuid import PlexGuid -class PlexGuidProviderIMDB: +class IMDB: def __init__(self, guid: PlexGuid): self.guid = guid diff --git a/plextraktsync/plex/PlexGuidProviderLocal.py b/plextraktsync/plex/guid/provider/Local.py similarity index 79% rename from plextraktsync/plex/PlexGuidProviderLocal.py rename to plextraktsync/plex/guid/provider/Local.py index f93e52edcd..2cccbc1ba6 100644 --- a/plextraktsync/plex/PlexGuidProviderLocal.py +++ b/plextraktsync/plex/guid/provider/Local.py @@ -3,10 +3,10 @@ from typing import TYPE_CHECKING if TYPE_CHECKING: - from plextraktsync.plex.PlexGuid import PlexGuid + from plextraktsync.plex.guid.PlexGuid import PlexGuid -class PlexGuidProviderLocal: +class Local: def __init__(self, guid: PlexGuid): self.guid = guid diff --git a/plextraktsync/plex/PlexGuidProviderMbid.py b/plextraktsync/plex/guid/provider/Mbid.py similarity index 86% rename from plextraktsync/plex/PlexGuidProviderMbid.py rename to plextraktsync/plex/guid/provider/Mbid.py index 3abdacdcf1..f9af0a5f8b 100644 --- a/plextraktsync/plex/PlexGuidProviderMbid.py +++ b/plextraktsync/plex/guid/provider/Mbid.py @@ -3,10 +3,10 @@ from typing import TYPE_CHECKING if TYPE_CHECKING: - from plextraktsync.plex.PlexGuid import PlexGuid + from plextraktsync.plex.guid.PlexGuid import PlexGuid -class PlexGuidProviderMbid: +class Mbid: def __init__(self, guid: PlexGuid): self.guid = guid diff --git a/plextraktsync/plex/PlexGuidProviderTMDB.py b/plextraktsync/plex/guid/provider/TMDB.py similarity index 92% rename from plextraktsync/plex/PlexGuidProviderTMDB.py rename to plextraktsync/plex/guid/provider/TMDB.py index e3695fb2c0..a024d02594 100644 --- a/plextraktsync/plex/PlexGuidProviderTMDB.py +++ b/plextraktsync/plex/guid/provider/TMDB.py @@ -3,10 +3,10 @@ from typing import TYPE_CHECKING if TYPE_CHECKING: - from plextraktsync.plex.PlexGuid import PlexGuid + from plextraktsync.plex.guid.PlexGuid import PlexGuid -class PlexGuidProviderTMDB: +class TMDB: url = "https://www.themoviedb.org" def __init__(self, guid: PlexGuid): diff --git a/plextraktsync/plex/PlexGuidProviderTVDB.py b/plextraktsync/plex/guid/provider/TVDB.py similarity index 82% rename from plextraktsync/plex/PlexGuidProviderTVDB.py rename to plextraktsync/plex/guid/provider/TVDB.py index 67feae0a75..99c155d60e 100644 --- a/plextraktsync/plex/PlexGuidProviderTVDB.py +++ b/plextraktsync/plex/guid/provider/TVDB.py @@ -3,10 +3,10 @@ from typing import TYPE_CHECKING if TYPE_CHECKING: - from plextraktsync.plex.PlexGuid import PlexGuid + from plextraktsync.plex.guid.PlexGuid import PlexGuid -class PlexGuidProviderTVDB: +class TVDB: def __init__(self, guid: PlexGuid): self.guid = guid diff --git a/plextraktsync/plex/PlexGuidProviderYoutube.py b/plextraktsync/plex/guid/provider/Youtube.py similarity index 83% rename from plextraktsync/plex/PlexGuidProviderYoutube.py rename to plextraktsync/plex/guid/provider/Youtube.py index 1ed1e94907..b3f6cb60d6 100644 --- a/plextraktsync/plex/PlexGuidProviderYoutube.py +++ b/plextraktsync/plex/guid/provider/Youtube.py @@ -3,10 +3,10 @@ from typing import TYPE_CHECKING if TYPE_CHECKING: - from plextraktsync.plex.PlexGuid import PlexGuid + from plextraktsync.plex.guid.PlexGuid import PlexGuid -class PlexGuidProviderYoutube: +class Youtube: def __init__(self, guid: PlexGuid): self.guid = guid diff --git a/plextraktsync/trakt/TraktApi.py b/plextraktsync/trakt/TraktApi.py index a13c5582ed..0e12780c14 100644 --- a/plextraktsync/trakt/TraktApi.py +++ b/plextraktsync/trakt/TraktApi.py @@ -34,7 +34,7 @@ from trakt.movies import Movie from trakt.tv import TVEpisode, TVShow - from plextraktsync.plex.PlexGuid import PlexGuid + from plextraktsync.plex.guid.PlexGuid import PlexGuid from plextraktsync.plex.PlexLibraryItem import PlexLibraryItem from plextraktsync.trakt.types import TraktLikedList, TraktMedia diff --git a/plextraktsync/trakt/TraktLookup.py b/plextraktsync/trakt/TraktLookup.py index 56f51f1448..abc9a97904 100644 --- a/plextraktsync/trakt/TraktLookup.py +++ b/plextraktsync/trakt/TraktLookup.py @@ -11,7 +11,7 @@ if TYPE_CHECKING: from trakt.tv import TVEpisode, TVShow - from plextraktsync.plex.PlexGuid import PlexGuid + from plextraktsync.plex.guid.PlexGuid import PlexGuid class TraktLookup: diff --git a/pyproject.toml b/pyproject.toml index beb85c64fa..5d2c63d6b3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,6 +54,8 @@ packages = [ "plextraktsync.factory", "plextraktsync.plan", "plextraktsync.plex", + "plextraktsync.plex.guid", + "plextraktsync.plex.guid.provider", "plextraktsync.plugin", "plextraktsync.queue", "plextraktsync.rich", diff --git a/tests/test_tv_lookup.py b/tests/test_tv_lookup.py index 8b982358ca..db5dbca86d 100755 --- a/tests/test_tv_lookup.py +++ b/tests/test_tv_lookup.py @@ -4,7 +4,7 @@ import pytest from trakt.tv import TVShow -from plextraktsync.plex.PlexGuid import PlexGuid +from plextraktsync.plex.guid.PlexGuid import PlexGuid from plextraktsync.plex.PlexLibraryItem import PlexLibraryItem from plextraktsync.trakt.TraktLookup import TraktLookup from tests.conftest import factory, make