From 30e95f3ec067719df173b72086dc9265438167f8 Mon Sep 17 00:00:00 2001 From: Goldy <153996346+g0ldyy@users.noreply.github.com> Date: Sat, 29 Jun 2024 15:30:22 +0200 Subject: [PATCH] . --- .dockerignore | 9 -- .env-sample | 2 +- .github/workflows/docker-build-push.yml | 56 ------------- .gitignore | 1 - Dockerfile | 4 - comet/api/core.py | 14 +++- comet/main.py | 20 ++--- comet/templates/index.html | 19 ++--- comet/utils/db.py | 25 +----- comet/utils/models.py | 2 +- docker-compose-dev.yml | 17 ---- docker-compose.yml | 14 ---- makefile | 106 ------------------------ 13 files changed, 35 insertions(+), 254 deletions(-) delete mode 100644 .dockerignore delete mode 100644 .github/workflows/docker-build-push.yml delete mode 100644 docker-compose-dev.yml delete mode 100644 docker-compose.yml delete mode 100644 makefile diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index a48320e..0000000 --- a/.dockerignore +++ /dev/null @@ -1,9 +0,0 @@ -.github/ -*.env* -.gitignore -Dockerfile -LICENSE -*.md -docker-compose*.* -.vscode/ -config.json \ No newline at end of file diff --git a/.env-sample b/.env-sample index ba17f8e..19e88f8 100644 --- a/.env-sample +++ b/.env-sample @@ -7,7 +7,7 @@ DEBRID_PROXY_URL=http://127.0.0.1:1080 INDEXER_MANAGER_TYPE=jackett # or prowlarr INDEXER_MANAGER_URL=http://127.0.0.1:9117 INDEXER_MANAGER_API_KEY=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -INDEXER_MANAGER_INDEXERS=EXAMPLE1_CHANGETHIS,EXAMPLE2_CHANGETHIS INDEXER_MANAGER_TIMEOUT=30 +INDEXER_MANAGER_INDEXERS=EXAMPLE1_CHANGETHIS,EXAMPLE2_CHANGETHIS GET_TORRENT_TIMEOUT=5 CUSTOM_HEADER_HTML=None # only set it if you know what it is \ No newline at end of file diff --git a/.github/workflows/docker-build-push.yml b/.github/workflows/docker-build-push.yml deleted file mode 100644 index 1d9dd2a..0000000 --- a/.github/workflows/docker-build-push.yml +++ /dev/null @@ -1,56 +0,0 @@ -name: Docker Build and Push - -on: - push: - branches: - - main -# release: -# types: [created] - workflow_dispatch: - -jobs: - build-and-push: - runs-on: ubuntu-latest - permissions: - contents: write - packages: write - security-events: write - - steps: - - name: Checkout code - uses: actions/checkout@v4.1.2 - - - name: Docker Setup QEMU - uses: docker/setup-qemu-action@v3 - id: qemu - with: - platforms: amd64,arm64 - - - name: Log into ghcr.io registry - uses: docker/login-action@v3.1.0 - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3.2.0 - - - name: Log in to Docker Hub - uses: docker/login-action@v3.1.0 - with: - username: ${{ secrets.DOCKER_HUB_USERNAME }} - password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} - - - name: Build and push Docker image - uses: docker/build-push-action@v5.3.0 - with: - context: . - file: ./Dockerfile - platforms: linux/amd64,linux/arm64 - push: true - cache-from: type=gha - cache-to: type=gha,mode=max - tags: | - ghcr.io/g0ldyy/comet:latest - docker.io/g0ldyy/comet:latest diff --git a/.gitignore b/.gitignore index 8471c45..136a16a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ # Project Based *.db -config.json # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/Dockerfile b/Dockerfile index f79e46f..407c752 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,10 +11,6 @@ ENV PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 \ POETRY_NO_INTERACTION=1 \ POETRY_HOME="/usr/local" \ - FASTAPI_HOST=0.0.0.0 \ - FASTAPI_PORT=8000 \ - FASTAPI_WORKERS=1 \ - DATABASE_PATH=comet.db \ FORCE_COLOR=1 \ TERM=xterm-256color diff --git a/comet/api/core.py b/comet/api/core.py index d5d4863..6b6deed 100644 --- a/comet/api/core.py +++ b/comet/api/core.py @@ -1,3 +1,5 @@ +import RTN + from fastapi import APIRouter, Request from fastapi.responses import RedirectResponse from fastapi.templating import Jinja2Templates @@ -18,10 +20,20 @@ async def health(): return {"status": "ok"} +indexers = settings.INDEXER_MANAGER_INDEXERS + +webConfig = { + "indexers": indexers, + "languages": [indexer.replace(" ", "_") for indexer in RTN.patterns.language_code_mapping.keys()], + "resolutions": ["480p", "720p", "1080p", "1440p", "2160p", "2880p", "4320p"] +} + +print(f"aaaa : {webConfig}") + @main.get("/configure") @main.get("/{b64config}/configure") async def configure(request: Request): - return templates.TemplateResponse("index.html", {"request": request, "CUSTOM_HEADER_HTML": settings.CUSTOM_HEADER_HTML}) + return templates.TemplateResponse("index.html", {"request": request, "CUSTOM_HEADER_HTML": settings.CUSTOM_HEADER_HTML, "webConfig": webConfig}) @main.get("/manifest.json") diff --git a/comet/main.py b/comet/main.py index 72f6454..389da9d 100644 --- a/comet/main.py +++ b/comet/main.py @@ -15,7 +15,7 @@ from starlette.requests import Request from comet.api.core import main from comet.api.stream import streams -from comet.utils.db import setup_database, teardown_database, write_config +from comet.utils.db import setup_database, teardown_database from comet.utils.logger import logger from comet.utils.models import settings @@ -39,7 +39,6 @@ class LoguruMiddleware(BaseHTTPMiddleware): @asynccontextmanager async def lifespan(app: FastAPI): - write_config() await setup_database() yield await teardown_database() @@ -94,7 +93,7 @@ class Server(uvicorn.Server): def signal_handler(sig, frame): # This will handle kubernetes/docker shutdowns better # Toss anything that needs to be gracefully shutdown here - logger.log('COMET', 'Exiting Gracefully.') + logger.log("COMET", "Exiting Gracefully.") sys.exit(0) signal.signal(signal.SIGINT, signal_handler) @@ -110,15 +109,14 @@ config = uvicorn.Config( server = Server(config=config) def start_log(): - logger.log('COMET', f'Server started on {settings.FASTAPI_HOST}:{settings.FASTAPI_PORT}') - logger.log('COMET', f'Database: {settings.DATABASE_PATH}') - logger.log('COMET', f'Workers: {settings.FASTAPI_WORKERS}') - logger.log('COMET', f'Get Torrent Timeout: {settings.GET_TORRENT_TIMEOUT}') - logger.log('COMET', f"Debrid Proxy: {settings.DEBRID_PROXY_URL}") - logger.log('COMET', f'Indexers: {settings.INDEXER_MANAGER_INDEXERS}') + logger.log("COMET", f"Server started on http://{settings.FASTAPI_HOST}:{settings.FASTAPI_PORT} - {settings.FASTAPI_WORKERS} workers") + logger.log("COMET", f"Database: {settings.DATABASE_PATH} - TTL: {settings.CACHE_TTL}s") + logger.log("COMET", f"Debrid Proxy: {settings.DEBRID_PROXY_URL}") + logger.log("COMET", f"Indexer Manager: {settings.INDEXER_MANAGER_TYPE}|{settings.INDEXER_MANAGER_URL} - Timeout: {settings.INDEXER_MANAGER_TIMEOUT}s") + logger.log("COMET", f"Indexers: {settings.INDEXER_MANAGER_INDEXERS}") + logger.log("COMET", f"Get Torrent Timeout: {settings.GET_TORRENT_TIMEOUT}s") + logger.log("COMET", f"Custom Header HTML Enabled: {bool(settings.CUSTOM_HEADER_HTML)}") - if settings.CUSTOM_HEADER_HTML: - logger.log('COMET', f'Custom Header HTML Enabled: {bool(settings.CUSTOM_HEADER_HTML)}') with server.run_in_thread(): start_log() diff --git a/comet/templates/index.html b/comet/templates/index.html index 4cb9c96..9a97f9b 100644 --- a/comet/templates/index.html +++ b/comet/templates/index.html @@ -481,7 +481,7 @@
- +
@@ -507,16 +507,13 @@ let defaultResolutions = []; document.addEventListener("DOMContentLoaded", function() { - fetch("/static/config.json") - .then(response => response.json()) - .then(data => { - populateSelect("indexers", data.indexers); - populateSelect("languages", data.languages); - populateSelect("resolutions", data.resolutions); - - defaultLanguages = data.languages; - defaultResolutions = data.resolutions; - }); + const webConfig = {{webConfig|tojson}}; + populateSelect("indexers", webConfig.indexers); + populateSelect("languages", webConfig.languages); + populateSelect("resolutions", webConfig.resolutions); + + defaultLanguages = webConfig.languages; + defaultResolutions = webConfig.resolutions; }); function populateSelect(selectId, options) { diff --git a/comet/utils/db.py b/comet/utils/db.py index 96a980c..3a64b83 100644 --- a/comet/utils/db.py +++ b/comet/utils/db.py @@ -1,7 +1,5 @@ -import json import os -from comet.utils.general import lang_code_map from comet.utils.logger import logger from comet.utils.models import database, settings @@ -14,34 +12,17 @@ async def setup_database(): # Ensure the database file exists if not os.path.exists(settings.DATABASE_PATH): - open(settings.DATABASE_PATH, 'a').close() + open(settings.DATABASE_PATH, "a").close() await database.connect() await database.execute("CREATE TABLE IF NOT EXISTS cache (cacheKey BLOB PRIMARY KEY, timestamp INTEGER, results TEXT)") except Exception as e: logger.error(f"Error setting up the database: {e}") + async def teardown_database(): """Teardown the database by disconnecting.""" try: await database.disconnect() except Exception as e: - logger.error(f"Error tearing down the database: {e}") - -def write_config(): - """Write the config file.""" - indexers = settings.INDEXER_MANAGER_INDEXERS - if indexers: - if isinstance(indexers, str): - indexers = indexers.split(",") - elif not isinstance(indexers, list): - logger.error(f"Invalid indexers: {indexers}") - - config_data = { - "indexers": indexers, - "languages": lang_code_map, - "resolutions": ["480p", "720p", "1080p", "1440p", "2160p", "2880p", "4320p"] - } - - with open("comet/templates/config.json", "w", encoding="utf-8") as config_file: - json.dump(config_data, config_file, indent=4) \ No newline at end of file + logger.error(f"Error tearing down the database: {e}") \ No newline at end of file diff --git a/comet/utils/models.py b/comet/utils/models.py index aa48766..c9c0283 100644 --- a/comet/utils/models.py +++ b/comet/utils/models.py @@ -21,8 +21,8 @@ class AppSettings(BaseSettings): INDEXER_MANAGER_TYPE: str = "jackett" INDEXER_MANAGER_URL: str = "http://127.0.0.1:9117" INDEXER_MANAGER_API_KEY: str = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" - INDEXER_MANAGER_INDEXERS: List[str] = ["EXAMPLE1_CHANGETHIS", "EXAMPLE2_CHANGETHIS"] INDEXER_MANAGER_TIMEOUT: int = 30 + INDEXER_MANAGER_INDEXERS: List[str] = ["EXAMPLE1_CHANGETHIS", "EXAMPLE2_CHANGETHIS"] GET_TORRENT_TIMEOUT: int = 5 CUSTOM_HEADER_HTML: Optional[str] = None diff --git a/docker-compose-dev.yml b/docker-compose-dev.yml deleted file mode 100644 index 23bb556..0000000 --- a/docker-compose-dev.yml +++ /dev/null @@ -1,17 +0,0 @@ -services: - comet: - build: - context: . - dockerfile: Dockerfile - image: comet:dev - container_name: comet - environment: - - FASTAPI_HOST=0.0.0.0 - - FASTAPI_PORT=8000 - - FASTAPI_WORKERS=1 - - DATABASE_PATH=/app/data/comet.db - tty: true - ports: - - "8000:8000" - volumes: - - ./data:/app/data \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 7f82a30..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,14 +0,0 @@ -services: - comet: - image: g0ldyy/comet:latest - container_name: comet - tty: true - ports: - - "8000:8000" - environment: - - FASTAPI_HOST=0.0.0.0 - - FASTAPI_PORT=8000 - - FASTAPI_WORKERS=1 - - DATABASE_PATH=/app/data/comet.db - volumes: - - ./data:/app/data \ No newline at end of file diff --git a/makefile b/makefile deleted file mode 100644 index 27ca34c..0000000 --- a/makefile +++ /dev/null @@ -1,106 +0,0 @@ -.PHONY: help install run start start-dev stop restart logs logs-dev shell build push push-dev clean check lint sort test coverage pr-ready - -# Detect operating system -ifeq ($(OS),Windows_NT) - # For Windows - DATA_PATH := $(shell echo %cd%)\data -else - # For Linux - DATA_PATH := $(PWD)/data -endif - -help: - @echo "Comet Local Development Environment" - @echo "-------------------------------------------------------------------------" - @echo "install : Install the required packages" - @echo "run : Run Comet" - @echo "start : Build and run the Comet container (requires Docker)" - @echo "start-dev : Build and run the Comet container in development mode (requires Docker)" - @echo "stop : Stop and remove the Comet container (requires Docker)" - @echo "logs : Show the logs of the Comet container (requires Docker)" - @echo "logs-dev : Show the logs of the Comet container in development mode (requires Docker)" - @echo "clean : Remove all the temporary files" - @echo "format : Format the code using isort" - @echo "lint : Lint the code using ruff and isort" - @echo "test : Run the tests using pytest" - @echo "coverage : Run the tests and generate coverage report" - @echo "pr-ready : Run the linter and tests" - @echo "-------------------------------------------------------------------------" -# Docker related commands - -start: stop - @docker compose -f docker-compose.yml up --build -d --force-recreate --remove-orphans - @docker compose -f docker-compose.yml logs -f - -start-dev: stop - @docker compose -f docker-compose-dev.yml up --build -d --force-recreate --remove-orphans - @docker compose -f docker-compose-dev.yml logs -f - -stop: - @docker compose -f docker-compose.yml down - @docker compose -f docker-compose-dev.yml down - -restart: - @docker restart comet - @docker logs -f comet - -logs: - @docker logs -f comet - -logs-dev: - @docker compose -f docker-compose-dev.yml logs -f - -shell: - @docker exec -it comet fish - -build: - @docker build -t comet . - -push: build - @docker tag comet:latest g0ldyy/comet:latest - @docker push g0ldyy/comet:latest - -push-dev: build - @docker tag comet:latest g0ldyy/comet:dev - @docker push g0ldyy/comet:dev - -tidy: - @docker rmi $(docker images | awk '$1 == "" || $1 == "comet" {print $3}') -f - - -# Poetry related commands -clean: - @find . -type f -name '*.pyc' -exec rm -f {} + - @find . -type d -name '__pycache__' -exec rm -rf {} + - @find . -type d -name '.pytest_cache' -exec rm -rf {} + - @find . -type d -name '.ruff_cache' -exec rm -rf {} + - -install: - @poetry install --without dev --no-root - -install-dev: - @poetry install --with dev --no-root - -# Run the application -run: - @poetry run python comet/main.py - -# Code quality commands -check: - @poetry run pyright - -lint: - @poetry run ruff check comet - @poetry run isort --check-only comet - -sort: - @poetry run isort comet - -test: - @poetry run pytest comet - -coverage: clean - @poetry run pytest comet --cov=comet --cov-report=xml --cov-report=term - -# Run the linter and tests -pr-ready: clean lint test