From 8ac042303cd7a17398bb0fcfa6b6e946ff1f5910 Mon Sep 17 00:00:00 2001 From: davidemarcoli Date: Mon, 22 Jul 2024 17:46:39 +0200 Subject: [PATCH 1/3] feat: Add endpoint to manually request items --- src/controllers/actions.py | 33 +++++++++++++++++++++++++++++++++ src/main.py | 2 ++ 2 files changed, 35 insertions(+) create mode 100644 src/controllers/actions.py diff --git a/src/controllers/actions.py b/src/controllers/actions.py new file mode 100644 index 00000000..fddbc7c5 --- /dev/null +++ b/src/controllers/actions.py @@ -0,0 +1,33 @@ +from typing import Any, Dict, Optional + +import pydantic +from fastapi import APIRouter, Request +from program.content.overseerr import Overseerr +from program.indexers.trakt import TraktIndexer, get_imdbid_from_tmdb +from program.media.item import MediaItem, Show +from requests import RequestException +from utils.logger import logger + +from .models.overseerr import OverseerrWebhook + +router = APIRouter( + prefix="/actions", + responses={404: {"description": "Not found"}}, +) + + +@router.post("/request") +async def request(request: Request, imdb_id: Optional[str]) -> Dict[str, Any]: + if not imdb_id: + logger.log("API", "No imdb id passed, skipping requesting") + return {"success": False, "message": "Invalid request"} + + + try: + new_item = MediaItem({"imdb_id": imdb_id, "requested_by": "manually"}) + request.app.program.add_to_queue(new_item) + except Exception as e: + logger.error(f"Failed to create item from imdb_id: {imdb_id}") + return {"success": False, "message": "Failed to create item from imdb_id"} + + return {"success": True, "message": f"Added {imdb_id} to queue"} diff --git a/src/main.py b/src/main.py index a7a1be70..5075ad3b 100644 --- a/src/main.py +++ b/src/main.py @@ -14,6 +14,7 @@ from controllers.settings import router as settings_router from controllers.tmdb import router as tmdb_router from controllers.webhooks import router as webhooks_router +from controllers.actions import router as actions_router from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from program import Program @@ -74,6 +75,7 @@ async def dispatch(self, request: Request, call_next): app.include_router(items_router) app.include_router(webhooks_router) app.include_router(tmdb_router) +app.include_router(actions_router) # app.include_router(metrics_router) From 8bb7432655abb67ccb47dfec1137bc8752407731 Mon Sep 17 00:00:00 2001 From: davidemarcoli Date: Mon, 22 Jul 2024 17:53:48 +0200 Subject: [PATCH 2/3] fix: made imdb_id required in request endpoint --- src/controllers/actions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/actions.py b/src/controllers/actions.py index fddbc7c5..91228087 100644 --- a/src/controllers/actions.py +++ b/src/controllers/actions.py @@ -17,7 +17,7 @@ @router.post("/request") -async def request(request: Request, imdb_id: Optional[str]) -> Dict[str, Any]: +async def request(request: Request, imdb_id: str) -> Dict[str, Any]: if not imdb_id: logger.log("API", "No imdb id passed, skipping requesting") return {"success": False, "message": "Invalid request"} From fa369053ca90bb5023ff39666952cb7e0cec6b44 Mon Sep 17 00:00:00 2001 From: davidemarcoli Date: Mon, 22 Jul 2024 18:00:06 +0200 Subject: [PATCH 3/3] fix: let fastapi handle invalid params --- src/controllers/actions.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/controllers/actions.py b/src/controllers/actions.py index 91228087..6c4f3b30 100644 --- a/src/controllers/actions.py +++ b/src/controllers/actions.py @@ -16,13 +16,8 @@ ) -@router.post("/request") +@router.post("/request/{imdb_id}") async def request(request: Request, imdb_id: str) -> Dict[str, Any]: - if not imdb_id: - logger.log("API", "No imdb id passed, skipping requesting") - return {"success": False, "message": "Invalid request"} - - try: new_item = MediaItem({"imdb_id": imdb_id, "requested_by": "manually"}) request.app.program.add_to_queue(new_item)