Fix
roundabout,
created on Sunday, 6 October 2024, 11:02:23 (1728212543),
received on Saturday, 12 October 2024, 14:56:18 (1728744978)
Author identity: vlad <vlad.muntoiu@gmail.com>
fca9b839557558ce139ad697eacc4e7e9f019a81
app.py
@@ -443,8 +443,24 @@ def has_object(id):
if object_ is None: flask.abort(404) query = db.session.query(PictureResource).join(PictureRegion).filter(PictureRegion.object_id == id)descendants_cte = ( db.select(PictureObject.id) .where(PictureObject.id == id) .cte(name="descendants_cte", recursive=True) ) descendants_cte = descendants_cte.union_all( db.select(PictureObjectInheritance.child_id) .where(PictureObjectInheritance.parent_id == descendants_cte.c.id) ) query = db.session.query(PictureResource).filter( PictureResource.regions.any( PictureRegion.object_id.in_( db.select(descendants_cte.c.id) ) ) )page = int(flask.request.args.get("page", 1)) per_page = int(flask.request.args.get("per_page", 16))
@@ -1149,28 +1165,30 @@ class APIError(Exception):
def get_picture_query(query_data): query = db.session.query(PictureResource) descendants_cte = (db.select(PictureObject.id).where(PictureObject.id == PictureRegion.object_id).cte(name="descendants_cte", recursive=True))def has_condition(id): descendants_cte = ( db.select(PictureObject.id) .where(PictureObject.id == id) .cte(name=f"descendants_cte_{id}", recursive=True) )descendants_cte = descendants_cte.union_all(db.select(PictureObjectInheritance.child_id).where(PictureObjectInheritance.parent_id == descendants_cte.c.id))descendants_cte = descendants_cte.union_all( db.select(PictureObjectInheritance.child_id) .where(PictureObjectInheritance.parent_id == descendants_cte.c.id) ) return PictureResource.regions.any( PictureRegion.object_id.in_( db.select(descendants_cte.c.id) ) )requirement_conditions = { # Has an object with the ID in the given list "has_object": lambda value: PictureResource.regions.any( PictureRegion.object_id.in_(value)), # Has an object with the ID in the given list, or a subtype of it "has": lambda value: PictureResource.regions.any(PictureRegion.object_id.in_(db.select(descendants_cte.c.id))),"has": lambda value: db.or_(*[has_condition(id) for id in value]),"nature": lambda value: PictureResource.nature_id.in_(value), "licence": lambda value: PictureResource.licences.any( PictureLicence.licence_id.in_(value)),