debug mode

This commit is contained in:
Mateusz Gruszczyński
2025-07-25 21:07:56 +02:00
parent 0357a63dcf
commit 1a98b7165d
3 changed files with 28 additions and 34 deletions

54
app.py
View File

@@ -8,10 +8,11 @@ import platform
import psutil
import hashlib
import re
import traceback
from pillow_heif import register_heif_opener
from datetime import datetime, timedelta, UTC, timezone
from urllib.parse import urlparse, urlunparse
from flask import (
Flask,
@@ -52,20 +53,12 @@ from functools import wraps
from flask_talisman import Talisman
# OCR
from collections import Counter
import pytesseract
from collections import Counter
from pytesseract import Output
import logging
if os.environ.get("FLASK_RUN_FROM_CLI") == "true":
print("""
NIE URUCHAMIAJ aplikacji przez `flask run`!
Socket.IO wymaga uruchamiania przez `python app.py`, bo `flask run`
nie obsługuje WebSocketów poprawnie (działa tylko z Werkzeugem).
Użyj: `python app.py`
""")
sys.exit(1)
logging.getLogger("werkzeug").setLevel(logging.INFO)
app = Flask(__name__)
app.config.from_object(Config)
@@ -74,17 +67,15 @@ app.config.from_object(Config)
csp_policy = None
if app.config.get("ENABLE_CSP", True):
csp_policy = {
'default-src': "'self'",
'script-src': "'self'", # wciąż bez inline JS
'style-src': "'self' 'unsafe-inline'", # dopuszczamy style w HTML-u
'img-src': "'self' data:", # pozwalamy na data:image (np. SVG)
'connect-src': "'self'", # WebSockety
'script-src': "'self' 'unsafe-inline'"
"default-src": "'self'",
"script-src": "'self'", # wciąż bez inline JS
"style-src": "'self' 'unsafe-inline'", # dopuszczamy style w HTML-u
"img-src": "'self' data:", # pozwalamy na data:image (np. SVG)
"connect-src": "'self'", # WebSockety
"script-src": "'self' 'unsafe-inline'",
}
permissions_policy = {
"browsing-topics": "()"
} if app.config["ENABLE_PP"] else None
permissions_policy = {"browsing-topics": "()"} if app.config["ENABLE_PP"] else None
talisman = Talisman(
app,
@@ -94,8 +85,7 @@ talisman = Talisman(
permissions_policy=permissions_policy,
content_security_policy=csp_policy,
x_content_type_options=app.config.get("ENABLE_XCTO", True),
strict_transport_security_include_subdomains=False
strict_transport_security_include_subdomains=False,
)
register_heif_opener() # pillow_heif dla HEIC
@@ -115,6 +105,7 @@ SESSION_TIMEOUT_MINUTES = int(app.config.get("SESSION_TIMEOUT_MINUTES", 10080))
app.config["COMPRESS_ALGORITHM"] = ["zstd", "br", "gzip", "deflate"]
app.config["PERMANENT_SESSION_LIFETIME"] = timedelta(minutes=SESSION_TIMEOUT_MINUTES)
app.wsgi_app = ProxyFix(app.wsgi_app, x_for=1, x_proto=1, x_host=1)
DEBUG_MODE = app.config.get("DEBUG_MODE", False)
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
@@ -437,9 +428,6 @@ def preprocess_image_for_tesseract(image):
def extract_total_tesseract(image):
import pytesseract
from pytesseract import Output
import re
text = pytesseract.image_to_string(image, lang="pol", config="--psm 4")
lines = text.splitlines()
@@ -627,8 +615,6 @@ def require_system_password():
if request.path == "/":
return redirect(url_for("system_auth"))
from urllib.parse import urlparse, urlunparse
parsed = urlparse(request.url)
fixed_url = urlunparse(parsed._replace(netloc=request.host))
return redirect(url_for("system_auth", next=fixed_url))
@@ -1416,8 +1402,6 @@ def analyze_receipts_for_list(list_id):
value, lines = extract_total_tesseract(image)
except Exception as e:
import traceback
print(f"OCR error for {receipt.filename}:\n{traceback.format_exc()}")
value = 0.0
lines = []
@@ -2609,11 +2593,15 @@ def create_db():
extra_cols = actual_columns - expected_columns
if missing_cols:
print(f"Brakuje kolumn w tabeli '{table}': {', '.join(sorted(missing_cols))}")
print(
f"Brakuje kolumn w tabeli '{table}': {', '.join(sorted(missing_cols))}"
)
critical_error = True
if extra_cols:
print(f"Dodatkowe kolumny w tabeli '{table}': {', '.join(sorted(extra_cols))}")
print(
f"Dodatkowe kolumny w tabeli '{table}': {', '.join(sorted(extra_cols))}"
)
if missing_tables or critical_error:
print("Struktura bazy jest niekompletna lub niezgodna. Przerwano.")
@@ -2627,4 +2615,4 @@ def create_db():
if __name__ == "__main__":
socketio.run(app, host="0.0.0.0", port=8000, debug=True)
socketio.run(app, host="0.0.0.0", port=8000, debug=DEBUG_MODE)