Exemplo n.º 1
0
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
Exemplo n.º 2
0
    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())
Exemplo n.º 3
0
 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()