roundabout,
created on Tuesday, 10 September 2024, 14:05:12 (1725977112),
received on Tuesday, 10 September 2024, 14:05:14 (1725977114)
Author identity: vlad <vlad.muntoiu@gmail.com>
5bd909227e172afef5be3e4cabef258b8b885fc8
app.py
@@ -10,6 +10,7 @@ from flask_httpauth import HTTPBasicAuth
from markupsafe import escape, Markup from flask_migrate import Migrate, current from jinja2_fragments.flask import render_block from sqlalchemy import falsefrom sqlalchemy.orm import backref import sqlalchemy.dialects.postgresql from os import path
@@ -1010,6 +1011,12 @@ def gallery_remove_user(id):
return flask.redirect("/gallery/" + str(gallery.id) + "/users") class APIError(Exception): def __init__(self, status_code, message): self.status_code = status_code self.message = message def get_picture_query(query_data): query = db.session.query(PictureResource)
@@ -1038,16 +1045,24 @@ def get_picture_query(query_data):
} if "want" in query_data: for i in query_data["want"]: if len(i) != 1: raise APIError(400, "Each requirement must have exactly one key")requirement, value = list(i.items())[0] condition = requirement_conditions.get(requirement)if condition:query = query.filter(condition(value))if requirement not in requirement_conditions: raise APIError(400, f"Unknown requirement type: {requirement}") condition = requirement_conditions[requirement] query = query.filter(condition(value))if "exclude" in query_data: for i in query_data["exclude"]: if len(i) != 1: raise APIError(400, "Each exclusion must have exactly one key")requirement, value = list(i.items())[0] condition = requirement_conditions.get(requirement)if condition:query = query.filter(~condition(value))if requirement not in requirement_conditions: raise APIError(400, f"Unknown requirement type: {requirement}") condition = requirement_conditions[requirement] query = query.filter(~condition(value))if not query_data.get("include_obsolete", False): query = query.filter(PictureResource.replaced_by_id.is_(None))
@@ -1064,7 +1079,10 @@ def graphical_query_pictures_results():
query_yaml = flask.request.args.get("query", "") yaml_parser = yaml.YAML() query_data = yaml_parser.load(query_yaml) or {} query = get_picture_query(query_data)try: query = get_picture_query(query_data) except APIError as e: flask.abort(e.status_code)page = int(flask.request.args.get("page", 1)) per_page = int(flask.request.args.get("per_page", 16))
@@ -1110,7 +1128,10 @@ def query_pictures():
yaml_parser = yaml.YAML() query_data = yaml_parser.load(flask.request.data) or {} query = get_picture_query(query_data)try: query = get_picture_query(query_data) except APIError as e: return flask.jsonify({"error": e.message}), e.status_codematch ordering: case "date-desc":