roundabout,
created on Tuesday, 24 September 2024, 14:43:11 (1727188991),
received on Thursday, 26 September 2024, 08:09:39 (1727338179)
Author identity: vlad <vlad.muntoiu@gmail.com>
96d15a4b7ce80236cad8e63d71e0a2b91ead1d6f
app.py
@@ -174,9 +174,12 @@ with app.app_context():
foreign_keys=[PictureObjectInheritance.child_id],
back_populates="child")
def __init__(self, id, description):
def __init__(self, id, description, parents):
self.id = id
self.description = description
if parents:
for parent in parents:
db.session.add(PictureObjectInheritance(parent, self))
class PictureRegion(db.Model):
@@ -1140,9 +1143,28 @@ 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)
)
descendants_cte = descendants_cte.union_all(
db.select(PictureObjectInheritance.child_id)
.where(PictureObjectInheritance.parent_id == 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)
)
),
"nature": lambda value: PictureResource.nature_id.in_(value),
"licence": lambda value: PictureResource.licences.any(
PictureLicence.licence_id.in_(value)),