mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-05-24 02:02:36 -04:00
Making the scanner send data to the back
This commit is contained in:
parent
8b2dd048d3
commit
541a7c9e2b
@ -106,6 +106,8 @@ namespace Kyoo.Core.Controllers
|
||||
/// <inheritdoc />
|
||||
protected override async Task Validate(Show resource)
|
||||
{
|
||||
resource.Slug ??= Utility.ToSlug(resource.Title);
|
||||
|
||||
await base.Validate(resource);
|
||||
if (resource.Studio != null)
|
||||
{
|
||||
|
@ -42,9 +42,10 @@ class TheMovieDatabase(Provider):
|
||||
status=Status.UNKNOWN,
|
||||
studio=None,
|
||||
genres=[],
|
||||
poster=[],
|
||||
posters=[],
|
||||
thumbnails=[],
|
||||
logo=[],
|
||||
logos=[],
|
||||
trailers=[],
|
||||
)
|
||||
translation = MovieTranslation(
|
||||
name=movie["title"],
|
||||
|
@ -22,9 +22,10 @@ class Movie:
|
||||
studio: Optional[int | str] = None
|
||||
genres: list[Genre] = field(default_factory=list)
|
||||
|
||||
poster: list[str] = field(default_factory=list)
|
||||
posters: list[str] = field(default_factory=list)
|
||||
thumbnails: list[str] = field(default_factory=list)
|
||||
logo: list[str] = field(default_factory=list)
|
||||
logos: list[str] = field(default_factory=list)
|
||||
trailers: list[str] = field(default_factory=list)
|
||||
|
||||
path: Optional[str] = None
|
||||
# TODO: handle staff
|
||||
@ -35,4 +36,14 @@ class Movie:
|
||||
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])}
|
||||
return {
|
||||
**asdict(self),
|
||||
**asdict(self.translations[default_language]),
|
||||
"poster": next(iter(self.posters), None),
|
||||
"thumbnail": next(iter(self.thumbnails), None),
|
||||
"logo": next(iter(self.logos), None),
|
||||
"trailer": next(iter(self.trailers), None),
|
||||
"start_air": self.release_date,
|
||||
"title": self.translations[default_language].name,
|
||||
"isMovie": True,
|
||||
}
|
||||
|
@ -15,7 +15,20 @@ async def main():
|
||||
if not languages:
|
||||
print("Missing environment variable 'LIBRARY_LANGUAGES'.")
|
||||
exit(2)
|
||||
api_key = os.environ.get("KYOO_APIKEY")
|
||||
if not api_key:
|
||||
api_key = os.environ.get("KYOO_APIKEYS")
|
||||
if not api_key:
|
||||
print("Missing environment variable 'KYOO_APIKEY'.")
|
||||
exit(2)
|
||||
api_key = api_key.split(",")[0]
|
||||
|
||||
if len(sys.argv) > 1 and sys.argv[1] == "-v":
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
if len(sys.argv) > 1 and sys.argv[1] == "-vv":
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
|
||||
async with ClientSession() as client:
|
||||
await Scanner(client, languages.split(",")).scan(path)
|
||||
await Scanner(client, languages=languages.split(","), api_key=api_key).scan(
|
||||
path
|
||||
)
|
||||
|
@ -1,4 +1,5 @@
|
||||
from functools import wraps
|
||||
import json
|
||||
import os
|
||||
import asyncio
|
||||
import logging
|
||||
@ -7,6 +8,7 @@ from pathlib import Path
|
||||
from guessit import guessit
|
||||
from providers.provider import Provider
|
||||
|
||||
|
||||
def log_errors(f):
|
||||
@wraps(f)
|
||||
async def internal(*args, **kwargs):
|
||||
@ -14,12 +16,16 @@ def log_errors(f):
|
||||
await f(*args, **kwargs)
|
||||
except Exception as e:
|
||||
logging.exception("Unhandled error", exc_info=e)
|
||||
|
||||
return internal
|
||||
|
||||
|
||||
class Scanner:
|
||||
def __init__(self, client: ClientSession, languages: list[str]) -> None:
|
||||
def __init__(
|
||||
self, client: ClientSession, *, languages: list[str], api_key: str
|
||||
) -> None:
|
||||
self._client = client
|
||||
self._api_key = api_key
|
||||
self.provider = Provider.get_all(client)[0]
|
||||
self.languages = languages
|
||||
|
||||
@ -41,14 +47,18 @@ class Scanner:
|
||||
)
|
||||
logging.debug("Got movie: %s", movie)
|
||||
await self.post("movies", data=movie.to_kyoo())
|
||||
movie.path = str(path)
|
||||
elif raw["type"] == "episode":
|
||||
pass
|
||||
else:
|
||||
logging.warn("Unknown video file type: %s", raw["type"])
|
||||
|
||||
async def post(self, path: str, *, data: object):
|
||||
url = os.environ.get('KYOO_URL', "http://back:5000")
|
||||
url = os.environ.get("KYOO_URL", "http://back:5000")
|
||||
print(json.dumps(data, indent=4))
|
||||
async with self._client.post(
|
||||
f"{url}/{path}", json=data
|
||||
f"{url}/{path}", json=data, headers={"X-API-Key": self._api_key}
|
||||
) as r:
|
||||
if not r.ok:
|
||||
print(await r.text())
|
||||
r.raise_for_status()
|
||||
|
18
shell.nix
18
shell.nix
@ -16,13 +16,15 @@ in
|
||||
];
|
||||
|
||||
shellHook = ''
|
||||
# Install python modules
|
||||
SOURCE_DATE_EPOCH=$(date +%s)
|
||||
if [ ! -d "${venvDir}" ]; then
|
||||
${pkgs.python3}/bin/python3 -m venv "${venvDir}"
|
||||
fi
|
||||
source "${venvDir}/bin/activate"
|
||||
export PIP_DISABLE_PIP_VERSION_CHECK=1
|
||||
pip install -r ${pythonPkgs}
|
||||
# Install python modules
|
||||
SOURCE_DATE_EPOCH=$(date +%s)
|
||||
if [ ! -d "${venvDir}" ]; then
|
||||
${pkgs.python3}/bin/python3 -m venv ${venvDir}
|
||||
source ${venvDir}/bin/activate
|
||||
export PIP_DISABLE_PIP_VERSION_CHECK=1
|
||||
pip install -r ${pythonPkgs} >&2
|
||||
else
|
||||
source ${venvDir}/bin/activate
|
||||
fi
|
||||
'';
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user