webp support

This commit is contained in:
Mateusz Gruszczyński
2025-07-20 17:34:53 +02:00
parent 3ebb364322
commit ae89f55446
6 changed files with 272 additions and 61 deletions

22
app.py
View File

@@ -48,7 +48,7 @@ from functools import wraps
app = Flask(__name__)
app.config.from_object(Config)
register_heif_opener() # pillow_heif dla HEIC
register_heif_opener() # pillow_heif dla HEIC
ALLOWED_EXTENSIONS = {"png", "jpg", "jpeg", "gif", "webp", "heic"}
SQLALCHEMY_ECHO = True
@@ -142,6 +142,7 @@ class Expense(db.Model):
receipt_filename = db.Column(db.String(255), nullable=True)
list = db.relationship("ShoppingList", backref="expenses", lazy=True)
class Receipt(db.Model):
id = db.Column(db.Integer, primary_key=True)
list_id = db.Column(db.Integer, db.ForeignKey("shopping_list.id"), nullable=False)
@@ -150,6 +151,7 @@ class Receipt(db.Model):
shopping_list = db.relationship("ShoppingList", backref="receipts", lazy=True)
filesize = db.Column(db.Integer, nullable=True)
with app.app_context():
db.create_all()
from werkzeug.security import generate_password_hash
@@ -297,7 +299,6 @@ def delete_receipts_for_list(list_id):
print(f"Nie udało się usunąć pliku {filename}: {e}")
# zabezpieczenie logowani do systemu - błędne hasła
def is_ip_blocked(ip):
now = time.time()
@@ -937,6 +938,7 @@ def upload_receipt(list_id):
from datetime import datetime
@app.route("/upload_receipt/<int:list_id>", methods=["POST"])
def upload_receipt(list_id):
if "receipt" not in request.files:
@@ -961,12 +963,15 @@ def upload_receipt(list_id):
list_id=list_id,
filename=webp_filename,
filesize=filesize,
uploaded_at=uploaded_at
uploaded_at=uploaded_at,
)
db.session.add(new_receipt)
db.session.commit()
if request.is_json or request.headers.get("X-Requested-With") == "XMLHttpRequest":
if (
request.is_json
or request.headers.get("X-Requested-With") == "XMLHttpRequest"
):
url = url_for("uploaded_file", filename=webp_filename)
socketio.emit("receipt_added", {"url": url}, to=str(list_id))
return jsonify({"success": True, "url": url})
@@ -977,7 +982,6 @@ def upload_receipt(list_id):
return _receipt_error("Niedozwolony format pliku")
@app.route("/uploads/<filename>")
def uploaded_file(filename):
response = send_from_directory(app.config["UPLOAD_FOLDER"], filename)
@@ -1198,6 +1202,7 @@ def delete_user(user_id):
flash("Użytkownik usunięty", "success")
return redirect(url_for("list_users"))
@app.route("/admin/receipts/<id>")
@login_required
@admin_required
@@ -1250,7 +1255,6 @@ def delete_receipt(filename):
return redirect(next_url or url_for("admin_receipts", id="all"))
@app.route("/admin/delete_selected_lists", methods=["POST"])
@login_required
@admin_required
@@ -1286,7 +1290,11 @@ def edit_list(list_id):
db.session.query(Item).filter_by(list_id=list_id).order_by(Item.id.desc()).all()
)
receipts = Receipt.query.filter_by(list_id=list_id).order_by(Receipt.uploaded_at.desc()).all()
receipts = (
Receipt.query.filter_by(list_id=list_id)
.order_by(Receipt.uploaded_at.desc())
.all()
)
if request.method == "POST":
action = request.form.get("action")