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