From 9a9e04667276cebfbd24f2eaf2781d9ac896dae7 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Wed, 15 Nov 2023 09:00:32 +0100 Subject: [PATCH 1/4] Add ability to have a different name for folder --- README.md | 2 ++ app/src/config.py | 1 + app/src/connect.py | 2 +- app/src/series.py | 9 ++++++++- app/src/static_types.py | 1 + config.sample.json | 3 ++- 6 files changed, 15 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index aec7e05..a47205f 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,7 @@ An example configuration is provided in the docker-compose.yml file. Configure t - `TA_TOKEN`: Tube Archivist API token, accessible from the settings page - `JF_URL`: Full URL where Jellyfin is reachable - `JF_TOKEN`: Jellyfin API token + - `JF_FOLDER`: Folder override if your folder is not named "YouTube" on your Filesystem. - `LISTEN_PORT`: Optionally change the port where the integration is listening for messages. Defaults to `8001`. If you change this, make sure to also change the json link for auto trigger as described below. Mount the `/youtube` folder from Tube Archivist also in this container at `/youtube` to give this integration access to the media archive. @@ -83,6 +84,7 @@ pip install requests - `ta_token`: Tube Archivist API token, accessible from the settings page - `jf_url`: Full URL where Jellyfin is reachable - `jf_token`: Jellyfin API token + - `jf_folder`: Name of the folder where TubeArchivist puts the files into Then run the script from the main folder with python, e.g. ```python diff --git a/app/src/config.py b/app/src/config.py index 7a27663..58b428a 100644 --- a/app/src/config.py +++ b/app/src/config.py @@ -38,6 +38,7 @@ def get_config_env() -> ConfigType | Literal[False]: "ta_token": os.environ["TA_TOKEN"], "jf_url": os.environ["JF_URL"], "jf_token": os.environ["JF_TOKEN"], + "jf_folder": os.environ['JF_FOLDER'] } return config_content diff --git a/app/src/connect.py b/app/src/connect.py index 7c41c1f..4478f5e 100644 --- a/app/src/connect.py +++ b/app/src/connect.py @@ -9,7 +9,7 @@ from src.static_types import ConfigType, TAChannel, TAVideo CONFIG: ConfigType = get_config() TIMEOUT = 60 -EXPECTED_ENV = {"ta_url", "ta_token", "jf_url", "jf_token", "ta_video_path"} +EXPECTED_ENV = {"ta_url", "ta_token", "jf_url", "jf_token", "ta_video_path"} # js_folder is optional class Jellyfin: diff --git a/app/src/series.py b/app/src/series.py index 0e9a7f2..82f55e8 100644 --- a/app/src/series.py +++ b/app/src/series.py @@ -22,8 +22,15 @@ class Library: """get collection id for youtube folder""" path: str = "Items?Recursive=true&includeItemTypes=Folder" folders: dict = Jellyfin().get(path) + folder_name: str | None = get_config()["jf_folder"] + + if not folder_name or len(folder_name) < 1: + folder_name = "youtube" + else: + folder_name = folder_name.lower() + for folder in folders["Items"]: - if folder.get("Name").lower() == "youtube": + if folder.get("Name").lower() == folder_name: return folder.get("Id") raise ValueError("youtube folder not found") diff --git a/app/src/static_types.py b/app/src/static_types.py index bf011b1..1c2d62a 100644 --- a/app/src/static_types.py +++ b/app/src/static_types.py @@ -11,6 +11,7 @@ class ConfigType(TypedDict): ta_token: str jf_url: str jf_token: str + jf_folder: str | None class TAChannel(TypedDict): diff --git a/config.sample.json b/config.sample.json index 444b661..fab8ff2 100644 --- a/config.sample.json +++ b/config.sample.json @@ -3,5 +3,6 @@ "ta_url": "http://tubearchivist.local", "ta_token": "xxxxxxxxxxxxxxxx", "jf_url": "http://jellyfin.local:8096", - "jf_token": "yyyyyyyyyyyyyyyy" + "jf_token": "yyyyyyyyyyyyyyyy", + "jf_folder": "YouTube" } From d4b19c81eeea0e0d623096090ea09b0830192ee2 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Thu, 21 Dec 2023 06:29:37 +0100 Subject: [PATCH 2/4] Ignore venv folder from jetbrains --- deploy.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/deploy.sh b/deploy.sh index 8ab1d49..f8181e7 100755 --- a/deploy.sh +++ b/deploy.sh @@ -17,12 +17,12 @@ function validate { echo "running black" black --force-exclude "migrations/*" --diff --color --check -l 79 "$check_path" echo "running codespell" - codespell --skip="./.git,./.venv,./.mypy_cache" "$check_path" + codespell --skip="./.git,./.venv,venv,./.mypy_cache" "$check_path" echo "running flake8" - flake8 "$check_path" --exclude "migrations,.venv" --count --max-complexity=10 \ + flake8 "$check_path" --exclude "migrations,.venv,venv" --count --max-complexity=10 \ --max-line-length=79 --show-source --statistics echo "running isort" - isort --skip "migrations" --skip ".venv" --check-only --diff --profile black -l 79 "$check_path" + isort --skip "migrations" --skip ".venv" --skip "venv" --check-only --diff --profile black -l 79 "$check_path" printf " \n> all validations passed\n" } From 16bfe4ab597359305548c05ffb94f4a74d880bb9 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Thu, 21 Dec 2023 06:29:43 +0100 Subject: [PATCH 3/4] Fixes --- app/src/config.py | 10 +++++++++- app/src/connect.py | 8 +++++++- app/src/series.py | 9 ++------- app/src/static_types.py | 2 +- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/app/src/config.py b/app/src/config.py index 58b428a..1fbaffd 100644 --- a/app/src/config.py +++ b/app/src/config.py @@ -29,6 +29,12 @@ def get_config_file() -> ConfigType | Literal[False]: return False +def get_variable_or_default(variable: str, default: str) -> str: + if not variable or len(variable) < 1: + return default + return variable + + def get_config_env() -> ConfigType | Literal[False]: """read config from environment""" if "TA_URL" in os.environ: @@ -38,7 +44,9 @@ def get_config_env() -> ConfigType | Literal[False]: "ta_token": os.environ["TA_TOKEN"], "jf_url": os.environ["JF_URL"], "jf_token": os.environ["JF_TOKEN"], - "jf_folder": os.environ['JF_FOLDER'] + "jf_folder": get_variable_or_default( + os.environ["JF_FOLDER"], "youtube" + ), } return config_content diff --git a/app/src/connect.py b/app/src/connect.py index 4478f5e..8d18541 100644 --- a/app/src/connect.py +++ b/app/src/connect.py @@ -9,7 +9,13 @@ from src.static_types import ConfigType, TAChannel, TAVideo CONFIG: ConfigType = get_config() TIMEOUT = 60 -EXPECTED_ENV = {"ta_url", "ta_token", "jf_url", "jf_token", "ta_video_path"} # js_folder is optional +EXPECTED_ENV = { + "ta_url", + "ta_token", + "jf_url", + "jf_token", + "ta_video_path", +} # jf_folder is optional class Jellyfin: diff --git a/app/src/series.py b/app/src/series.py index 82f55e8..ad884dd 100644 --- a/app/src/series.py +++ b/app/src/series.py @@ -22,15 +22,10 @@ class Library: """get collection id for youtube folder""" path: str = "Items?Recursive=true&includeItemTypes=Folder" folders: dict = Jellyfin().get(path) - folder_name: str | None = get_config()["jf_folder"] - - if not folder_name or len(folder_name) < 1: - folder_name = "youtube" - else: - folder_name = folder_name.lower() + folder_name: str = get_config()["jf_folder"] for folder in folders["Items"]: - if folder.get("Name").lower() == folder_name: + if folder.get("Name").lower() == folder_name.lower(): return folder.get("Id") raise ValueError("youtube folder not found") diff --git a/app/src/static_types.py b/app/src/static_types.py index 1c2d62a..ecf7fee 100644 --- a/app/src/static_types.py +++ b/app/src/static_types.py @@ -11,7 +11,7 @@ class ConfigType(TypedDict): ta_token: str jf_url: str jf_token: str - jf_folder: str | None + jf_folder: str class TAChannel(TypedDict): From fd264a9f70145de5234889c926d65fa6faf6a0d7 Mon Sep 17 00:00:00 2001 From: CommanderRedYT Date: Thu, 21 Dec 2023 11:31:40 +0100 Subject: [PATCH 4/4] Relace function with builtin --- app/src/config.py | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/app/src/config.py b/app/src/config.py index 1fbaffd..d30e51f 100644 --- a/app/src/config.py +++ b/app/src/config.py @@ -29,12 +29,6 @@ def get_config_file() -> ConfigType | Literal[False]: return False -def get_variable_or_default(variable: str, default: str) -> str: - if not variable or len(variable) < 1: - return default - return variable - - def get_config_env() -> ConfigType | Literal[False]: """read config from environment""" if "TA_URL" in os.environ: @@ -44,9 +38,7 @@ def get_config_env() -> ConfigType | Literal[False]: "ta_token": os.environ["TA_TOKEN"], "jf_url": os.environ["JF_URL"], "jf_token": os.environ["JF_TOKEN"], - "jf_folder": get_variable_or_default( - os.environ["JF_FOLDER"], "youtube" - ), + "jf_folder": os.environ.get("JF_FOLDER", "youtube"), } return config_content