From c9512021133841217d53fa8c16748b0199da0451 Mon Sep 17 00:00:00 2001 From: dev Date: Sat, 14 Jun 2025 18:52:13 +0200 Subject: [PATCH 1/4] Fix linters --- aperisolve/app.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/aperisolve/app.py b/aperisolve/app.py index c409c11..370d280 100644 --- a/aperisolve/app.py +++ b/aperisolve/app.py @@ -6,7 +6,7 @@ import os import time from datetime import datetime, timezone from pathlib import Path -from typing import Optional +from typing import Any, Optional from flask import Flask, Response, abort, jsonify, render_template, request, send_file from redis import Redis @@ -31,7 +31,8 @@ queue = Queue(connection=redis_conn) @app.errorhandler(413) -def too_large(e): +def too_large(_: Any) -> tuple[Response, int]: + """Error Handler for Max File Size.""" return jsonify({"error": "Image size exceeded"}), 413 From 57e7b775615f77a748febcaa9a5944d98f57a925 Mon Sep 17 00:00:00 2001 From: Zeecka Date: Sat, 14 Jun 2025 20:24:42 +0200 Subject: [PATCH 2/4] Fix max size bug --- aperisolve/app.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/aperisolve/app.py b/aperisolve/app.py index 370d280..f28b4cb 100644 --- a/aperisolve/app.py +++ b/aperisolve/app.py @@ -20,7 +20,9 @@ app: Flask = Flask(__name__) app.json.sort_keys = False # type: ignore app.config["SQLALCHEMY_DATABASE_URI"] = os.environ.get("DB_URI") app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False -app.config["MAX_CONTENT_LENGTH"] = os.environ.get("MAX_CONTENT_LENGTH") +app.config["MAX_CONTENT_LENGTH"] = int( + os.environ.get("MAX_CONTENT_LENGTH", 1024 * 1024) +) RESULT_FOLDER.mkdir(parents=True, exist_ok=True) From e937d4fc11d9b6c0e48ce7f8dfd2ccdd5d288793 Mon Sep 17 00:00:00 2001 From: Zeecka Date: Sun, 15 Jun 2025 18:14:47 +0200 Subject: [PATCH 3/4] Fix #74 and #75 --- README.md | 2 ++ aperisolve/app.py | 5 +++++ aperisolve/cleanup.py | 5 +++++ aperisolve/static/css/aperisolve.css | 7 +++++++ aperisolve/templates/error.html | 8 ++++++++ 5 files changed, 27 insertions(+) create mode 100644 aperisolve/templates/error.html diff --git a/README.md b/README.md index c413540..43ad0be 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,8 @@ Here is a batch of usefull commands. docker compose down -v # Remove volume containings results docker compose -f docker-compose-dev.yml up # Start application in developpement mode rm -rf aperisolve/results # Remove results from developpement mode +docker exec -it postgres psql -U aperiuser -d aperisolve # Get postgresql shell +docker exec -it aperisolve-web bash # Get shell in running web app ``` > Note, if you used [docker-compose-dev.yml](docker-compose-dev.yml), you must remove "results" when switching to [production docker](docker-compose.yml). diff --git a/aperisolve/app.py b/aperisolve/app.py index f28b4cb..235de2e 100644 --- a/aperisolve/app.py +++ b/aperisolve/app.py @@ -38,6 +38,11 @@ def too_large(_: Any) -> tuple[Response, int]: return jsonify({"error": "Image size exceeded"}), 413 +@app.errorhandler(404) +def not_found(e): + return render_template("error.html", message="Ressource not found", statuscode=404) + + @app.route("/") def index() -> str: """Render the main index page.""" diff --git a/aperisolve/cleanup.py b/aperisolve/cleanup.py index be77581..48ea6a6 100644 --- a/aperisolve/cleanup.py +++ b/aperisolve/cleanup.py @@ -47,4 +47,9 @@ def cleanup_old_entries() -> None: shutil.rmtree(RESULT_FOLDER / img.hash) # type: ignore db.session.delete(img) + # Delete Images with missing submission + if len(img.submissions) == 0 and delay > MAX_PENDING_TIME: + shutil.rmtree(RESULT_FOLDER / img.hash) # type: ignore + db.session.delete(img) + db.session.commit() diff --git a/aperisolve/static/css/aperisolve.css b/aperisolve/static/css/aperisolve.css index 79fd981..1d4c7be 100644 --- a/aperisolve/static/css/aperisolve.css +++ b/aperisolve/static/css/aperisolve.css @@ -407,4 +407,11 @@ footer a i { .glow-border { border: 1px solid var(--theme-green); box-shadow: 0 0 10px var(--theme-green-shadow); +} + +#httperror{ + padding-top: 100px; +} +#httperror h1, #httperror h2{ + text-align: center; } \ No newline at end of file diff --git a/aperisolve/templates/error.html b/aperisolve/templates/error.html new file mode 100644 index 0000000..903cef3 --- /dev/null +++ b/aperisolve/templates/error.html @@ -0,0 +1,8 @@ +{% extends 'base.html' %} +{% block body_content %} +
+

{{ statuscode }}

+
+

{{ message }}

+
+{% endblock %} \ No newline at end of file From 702fcf434ca7c8793742b34e3831a2e4affdeb2c Mon Sep 17 00:00:00 2001 From: Zeecka Date: Sun, 15 Jun 2025 18:18:28 +0200 Subject: [PATCH 4/4] Lint --- aperisolve/app.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/aperisolve/app.py b/aperisolve/app.py index 235de2e..5e92077 100644 --- a/aperisolve/app.py +++ b/aperisolve/app.py @@ -39,7 +39,8 @@ def too_large(_: Any) -> tuple[Response, int]: @app.errorhandler(404) -def not_found(e): +def not_found(_: Any) -> str: + """Error Handler for 404 not found.""" return render_template("error.html", message="Ressource not found", statuscode=404)