def query_to_json(query: BaseQuery, limit: int = 100, offset: int = 0) -> dict: """Serialize a list of objects into a JSON-compatible dict.""" total_items = query.count() query = query.limit(limit).offset(offset) query_json = { "count": query.count(), "limit": limit, "offset": offset or 0, "total": total_items, } for item in query: if isinstance(item, models.Molt): molt_list = query_json.get("molts", list()) molt_list.append(molt_to_json(item)) query_json["molts"] = molt_list elif isinstance(item, models.Bookmark): molt_list = query_json.get("molts", list()) molt_list.append(molt_to_json(item.molt)) query_json["molts"] = molt_list elif isinstance(item, models.Crab): crab_list = query_json.get("crabs", list()) crab_list.append(crab_to_json(item)) query_json["crabs"] = crab_list return query_json
def __init__(self, query: BaseQuery, page: int = 1, order_by: str = None, order_dir: str = None): self.total = query.count() self.offset = (page * self.per_page) - self.per_page self.total_pages = ceil(self.total / self.per_page) self.query = query self.page = page if order_by: order_by = getattr(self.query.column_descriptions[0]['type'], order_by) order_dir = getattr(order_by, order_dir if order_dir else 'asc') self.query = self.query.order_by(order_dir())
def add_category_sections(category, sections: BaseQuery) -> bool: non_existing_category_sections = list( filter(lambda section: section not in category.section, sections) ) category.add_sections(non_existing_category_sections) return len(non_existing_category_sections) == sections.count()