Refactor logging setup and enhance debug information in FastAPI application
This commit is contained in:
4
.vscode/launch.json
vendored
4
.vscode/launch.json
vendored
@ -3,12 +3,14 @@
|
|||||||
"configurations": [
|
"configurations": [
|
||||||
{
|
{
|
||||||
"name": "Python: FastAPI",
|
"name": "Python: FastAPI",
|
||||||
"type": "python",
|
"type": "debugpy",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"module": "uvicorn",
|
"module": "uvicorn",
|
||||||
"args": [
|
"args": [
|
||||||
"discord_embed.main:app",
|
"discord_embed.main:app",
|
||||||
"--reload",
|
"--reload",
|
||||||
|
"--log-level",
|
||||||
|
"debug"
|
||||||
],
|
],
|
||||||
"jinja": true,
|
"jinja": true,
|
||||||
"justMyCode": true
|
"justMyCode": true
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
|
import logging
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from urllib.parse import urljoin
|
from urllib.parse import urljoin
|
||||||
|
|
||||||
from discord_embed import settings
|
from discord_embed import settings
|
||||||
|
|
||||||
|
logger: logging.Logger = logging.getLogger("uvicorn.error")
|
||||||
|
|
||||||
|
|
||||||
def generate_html_for_videos(
|
def generate_html_for_videos(
|
||||||
url: str,
|
url: str,
|
||||||
@ -54,4 +57,14 @@ def generate_html_for_videos(
|
|||||||
with Path.open(file_path, "w", encoding="utf-8") as f:
|
with Path.open(file_path, "w", encoding="utf-8") as f:
|
||||||
f.write(video_html)
|
f.write(video_html)
|
||||||
|
|
||||||
|
logger.info("Generated HTML file: %s", html_url)
|
||||||
|
logger.info("Saved HTML file to disk: %s", file_path)
|
||||||
|
logger.info("Screenshot URL: %s", screenshot)
|
||||||
|
logger.info("Video URL: %s", url)
|
||||||
|
logger.info("Video resolution: %dx%d", width, height)
|
||||||
|
logger.info("Filename: %s", filename)
|
||||||
|
logger.info("Domain: %s", domain)
|
||||||
|
logger.info("HTML URL: %s", html_url)
|
||||||
|
logger.info("Time now: %s", time_now_str)
|
||||||
|
|
||||||
return html_url
|
return html_url
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import logging
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Annotated
|
from typing import Annotated
|
||||||
from urllib.parse import urljoin
|
from urllib.parse import urljoin
|
||||||
@ -7,7 +8,7 @@ from urllib.parse import urljoin
|
|||||||
from fastapi import FastAPI, File, Request, UploadFile
|
from fastapi import FastAPI, File, Request, UploadFile
|
||||||
from fastapi.responses import HTMLResponse, JSONResponse
|
from fastapi.responses import HTMLResponse, JSONResponse
|
||||||
|
|
||||||
from discord_embed import settings
|
from discord_embed.settings import serve_domain, upload_folder, webhook_url
|
||||||
from discord_embed.video_file_upload import do_things
|
from discord_embed.video_file_upload import do_things
|
||||||
from discord_embed.webhook import send_webhook
|
from discord_embed.webhook import send_webhook
|
||||||
|
|
||||||
@ -18,6 +19,12 @@ app: FastAPI = FastAPI(
|
|||||||
"url": "https://github.com/TheLovinator1/discord-embed",
|
"url": "https://github.com/TheLovinator1/discord-embed",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
logger: logging.Logger = logging.getLogger("uvicorn.error")
|
||||||
|
|
||||||
|
logger.info("Server started on http://localhost:8000/")
|
||||||
|
logger.debug("\tServe domain: %s", serve_domain)
|
||||||
|
logger.debug("\tUpload folder: %s", upload_folder)
|
||||||
|
logger.debug("\tWebhook URL: %s", webhook_url)
|
||||||
|
|
||||||
|
|
||||||
@app.post("/uploadfiles/", description="Where to send a POST request to upload files.")
|
@app.post("/uploadfiles/", description="Where to send a POST request to upload files.")
|
||||||
@ -46,10 +53,10 @@ async def upload_file(file: Annotated[UploadFile, File()]) -> JSONResponse:
|
|||||||
else:
|
else:
|
||||||
filename: str = remove_illegal_chars(file.filename)
|
filename: str = remove_illegal_chars(file.filename)
|
||||||
|
|
||||||
with Path.open(Path(settings.upload_folder, filename), "wb+") as f:
|
with Path.open(Path(upload_folder, filename), "wb+") as f:
|
||||||
f.write(file.file.read())
|
f.write(file.file.read())
|
||||||
|
|
||||||
html_url: str = urljoin(settings.serve_domain, filename)
|
html_url: str = urljoin(serve_domain, filename)
|
||||||
|
|
||||||
send_webhook(f"{html_url} was uploaded.")
|
send_webhook(f"{html_url} was uploaded.")
|
||||||
return JSONResponse(content={"html_url": html_url})
|
return JSONResponse(content={"html_url": html_url})
|
||||||
@ -90,6 +97,7 @@ def remove_illegal_chars(file_name: str) -> str:
|
|||||||
]
|
]
|
||||||
for character in illegal_characters:
|
for character in illegal_characters:
|
||||||
filename: str = filename.replace(character, "")
|
filename: str = filename.replace(character, "")
|
||||||
|
logger.info("Removed illegal character: %s from filename", character)
|
||||||
|
|
||||||
return filename
|
return filename
|
||||||
|
|
||||||
|
@ -3,10 +3,10 @@ from __future__ import annotations
|
|||||||
import os
|
import os
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from dotenv import find_dotenv, load_dotenv
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
# Load environment variables
|
# Load environment variables
|
||||||
load_dotenv(find_dotenv(), verbose=True)
|
load_dotenv(verbose=True)
|
||||||
|
|
||||||
webhook_url: str = os.environ["WEBHOOK_URL"]
|
webhook_url: str = os.environ["WEBHOOK_URL"]
|
||||||
serve_domain: str = os.environ["SERVE_DOMAIN"].removesuffix("/")
|
serve_domain: str = os.environ["SERVE_DOMAIN"].removesuffix("/")
|
||||||
|
@ -8,7 +8,7 @@ import ffmpeg
|
|||||||
|
|
||||||
from discord_embed import settings
|
from discord_embed import settings
|
||||||
|
|
||||||
logger: logging.Logger = logging.getLogger(__name__)
|
logger: logging.Logger = logging.getLogger("uvicorn.error")
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import logging
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
@ -11,6 +12,8 @@ from discord_embed.video import Resolution, make_thumbnail, video_resolution
|
|||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from fastapi import UploadFile
|
from fastapi import UploadFile
|
||||||
|
|
||||||
|
logger: logging.Logger = logging.getLogger("uvicorn.error")
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class VideoFile:
|
class VideoFile:
|
||||||
@ -78,4 +81,5 @@ def do_things(file: UploadFile) -> str:
|
|||||||
screenshot=screenshot_url,
|
screenshot=screenshot_url,
|
||||||
filename=video_file.filename,
|
filename=video_file.filename,
|
||||||
)
|
)
|
||||||
|
logger.info("Generated HTML URL: %s", html_url)
|
||||||
return html_url
|
return html_url
|
||||||
|
@ -10,7 +10,7 @@ from discord_embed import settings
|
|||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from requests import Response
|
from requests import Response
|
||||||
|
|
||||||
logger: logging.Logger = logging.getLogger(__name__)
|
logger: logging.Logger = logging.getLogger("uvicorn.error")
|
||||||
|
|
||||||
|
|
||||||
def send_webhook(message: str) -> None:
|
def send_webhook(message: str) -> None:
|
||||||
@ -19,6 +19,7 @@ def send_webhook(message: str) -> None:
|
|||||||
Args:
|
Args:
|
||||||
message: The message to send.
|
message: The message to send.
|
||||||
"""
|
"""
|
||||||
|
logger.info("Sending webhook with message: %s", message)
|
||||||
webhook: DiscordWebhook = DiscordWebhook(
|
webhook: DiscordWebhook = DiscordWebhook(
|
||||||
url=settings.webhook_url,
|
url=settings.webhook_url,
|
||||||
content=message or "discord-nice-embed: No message was provided.",
|
content=message or "discord-nice-embed: No message was provided.",
|
||||||
|
Reference in New Issue
Block a user