mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-05-24 02:02:36 -04:00
Add black to lint the scannre
This commit is contained in:
parent
89fbb3a3cf
commit
e2387158dc
13
.github/workflows/coding-style.yml
vendored
13
.github/workflows/coding-style.yml
vendored
@ -41,3 +41,16 @@ jobs:
|
||||
|
||||
- name: Lint
|
||||
run: yarn lint
|
||||
scanner:
|
||||
name: "Lint scanner"
|
||||
runs-on: ubuntu-latest
|
||||
defaults:
|
||||
run:
|
||||
working-directory: ./scanner
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
|
||||
- name: Run black
|
||||
run: |
|
||||
pip install black-with-tabs
|
||||
black . --check
|
||||
|
@ -15,41 +15,43 @@ class TheMovieDatabase(Provider):
|
||||
self.base = "https://api.themoviedb.org/3"
|
||||
self.api_key = api_key
|
||||
|
||||
|
||||
async def get(self, path: str, *, params: dict[str, Any] = {}):
|
||||
params = {k:v for k,v in params.items() if v is not None}
|
||||
async with self._client.get(f"{self.base}/{path}", params={ "api_key": self.api_key, **params }) as r:
|
||||
params = {k: v for k, v in params.items() if v is not None}
|
||||
async with self._client.get(
|
||||
f"{self.base}/{path}", params={"api_key": self.api_key, **params}
|
||||
) as r:
|
||||
r.raise_for_status()
|
||||
return await r.json()
|
||||
|
||||
|
||||
async def identify_movie(self, name: str, year: Optional[int], *, language: list[str]) -> Movie:
|
||||
movie_id = (await self.get("search/movie", params={ "query": name, "year": year }))["results"][0]["id"]
|
||||
async def identify_movie(
|
||||
self, name: str, year: Optional[int], *, language: list[str]
|
||||
) -> Movie:
|
||||
movie_id = (
|
||||
await self.get("search/movie", params={"query": name, "year": year})
|
||||
)["results"][0]["id"]
|
||||
|
||||
async def for_language(lng: str) -> Movie:
|
||||
movie = await self.get(f"/movie/{movie_id}", params={ "language": lng, "append_to_response": ""})
|
||||
movie = await self.get(
|
||||
f"/movie/{movie_id}", params={"language": lng, "append_to_response": ""}
|
||||
)
|
||||
logging.debug("TMDb responded: %s", movie)
|
||||
|
||||
ret = (
|
||||
Movie(
|
||||
aliases=[],
|
||||
release_date=None,
|
||||
status=Status.UNKNOWN,
|
||||
studio=None,
|
||||
genres=[],
|
||||
poster=[],
|
||||
thumbnails=[],
|
||||
logo=[],
|
||||
)
|
||||
ret = Movie(
|
||||
aliases=[],
|
||||
release_date=None,
|
||||
status=Status.UNKNOWN,
|
||||
studio=None,
|
||||
genres=[],
|
||||
poster=[],
|
||||
thumbnails=[],
|
||||
logo=[],
|
||||
)
|
||||
translation = (
|
||||
MovieTranslation(
|
||||
name=movie["title"],
|
||||
keywords=[],
|
||||
overview=movie["overview"],
|
||||
)
|
||||
translation = MovieTranslation(
|
||||
name=movie["title"],
|
||||
keywords=[],
|
||||
overview=movie["overview"],
|
||||
)
|
||||
ret.translations = { lng: translation }
|
||||
ret.translations = {lng: translation}
|
||||
return ret
|
||||
|
||||
# TODO: make the folllowing generic
|
||||
@ -58,4 +60,3 @@ class TheMovieDatabase(Provider):
|
||||
movie = movies[0]
|
||||
movie.translations = {k: v.translations[k] for k, v in zip(language, movies)}
|
||||
return movie
|
||||
|
||||
|
@ -8,18 +8,21 @@ from .types.movie import Movie
|
||||
|
||||
Self = TypeVar("Self", bound="Provider")
|
||||
|
||||
|
||||
class Provider:
|
||||
@classmethod
|
||||
def get_all(cls: type[Self], client: ClientSession) -> list[Self]:
|
||||
from providers.implementations.themoviedatabase import TheMovieDatabase
|
||||
providers = []
|
||||
|
||||
from providers.implementations.themoviedatabase import TheMovieDatabase
|
||||
tmdb =os.environ.get("THEMOVIEDB_APIKEY")
|
||||
tmdb = os.environ.get("THEMOVIEDB_APIKEY")
|
||||
if tmdb:
|
||||
providers.append(TheMovieDatabase(client, tmdb))
|
||||
|
||||
return providers
|
||||
|
||||
@abstractmethod
|
||||
async def identify_movie(self, name: str, year: Optional[int], *, language: list[str]) -> Movie:
|
||||
async def identify_movie(
|
||||
self, name: str, year: Optional[int], *, language: list[str]
|
||||
) -> Movie:
|
||||
raise NotImplementedError
|
||||
|
@ -6,12 +6,14 @@ from typing import Optional
|
||||
from .genre import Genre
|
||||
from .status import Status
|
||||
|
||||
|
||||
@dataclass
|
||||
class MovieTranslation:
|
||||
name: str
|
||||
keywords: list[str] = field(default_factory=list)
|
||||
overview: Optional[str] = None
|
||||
|
||||
|
||||
@dataclass
|
||||
class Movie:
|
||||
aliases: list[str] = field(default_factory=list)
|
||||
@ -30,9 +32,7 @@ class Movie:
|
||||
|
||||
translations: dict[str, MovieTranslation] = field(default_factory=dict)
|
||||
|
||||
|
||||
def to_kyoo(self):
|
||||
# For now, the API of kyoo only support one language so we remove the others.
|
||||
default_language = os.environ["LIBRARY_LANGUAGES"].split(',')[0]
|
||||
return { **asdict(self), **asdict(self.translations[default_language]) }
|
||||
|
||||
default_language = os.environ["LIBRARY_LANGUAGES"].split(",")[0]
|
||||
return {**asdict(self), **asdict(self.translations[default_language])}
|
||||
|
@ -1,5 +1,6 @@
|
||||
from enum import Enum
|
||||
|
||||
|
||||
class Status(Enum):
|
||||
UNKNOWN = "unknown"
|
||||
FINISHED = "finished"
|
||||
|
@ -1,2 +1,3 @@
|
||||
guessit
|
||||
aiohttp
|
||||
black-with-tabs
|
||||
|
@ -1,5 +1,6 @@
|
||||
from .scanner import Scanner
|
||||
|
||||
|
||||
async def main():
|
||||
import os
|
||||
import logging
|
||||
@ -17,4 +18,4 @@ async def main():
|
||||
if len(sys.argv) > 1 and sys.argv[1] == "-v":
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
async with ClientSession() as client:
|
||||
await Scanner(client, languages.split(',')).scan(path)
|
||||
await Scanner(client, languages.split(",")).scan(path)
|
||||
|
@ -5,6 +5,7 @@ from guessit import guessit
|
||||
from themoviedb.routes.base import ClientSession, os
|
||||
from providers.provider import Provider
|
||||
|
||||
|
||||
class Scanner:
|
||||
def __init__(self, client: ClientSession, languages: list[str]) -> None:
|
||||
self._client = client
|
||||
@ -23,7 +24,9 @@ class Scanner:
|
||||
# TODO: keep a list of processing shows to only fetch metadata once even if
|
||||
# multiples identify of the same show run on the same time
|
||||
if raw["type"] == "movie":
|
||||
movie = await self.provider.identify_movie(raw["title"], raw.get("year"), language=self.languages)
|
||||
movie = await self.provider.identify_movie(
|
||||
raw["title"], raw.get("year"), language=self.languages
|
||||
)
|
||||
logging.debug("Got movie: %s", movie)
|
||||
await self.post("movies", data=movie.to_kyoo())
|
||||
elif raw["type"] == "episode":
|
||||
@ -32,5 +35,7 @@ class Scanner:
|
||||
logging.warn("Unknown video file type: %s", raw["type"])
|
||||
|
||||
async def post(self, path: str, *, data: object):
|
||||
async with self._client.post(f"{os.environ['KYOO_URL']}/{path}", json=data) as r:
|
||||
async with self._client.post(
|
||||
f"{os.environ['KYOO_URL']}/{path}", json=data
|
||||
) as r:
|
||||
r.raise_for_status()
|
||||
|
Loading…
x
Reference in New Issue
Block a user