def update_category(public_id: int, data: dict):
    """
    HTTP `PUT`/`PATCH` route for update a single category resource.

    Args:
        public_id (int): Public ID of the updatable category
        data (CategoryModel.SCHEMA): New category data to update

    Raises:
        ManagerGetError: When the category with the `public_id` was not found.
        ManagerUpdateError: When something went wrong during the update.

    Returns:
        UpdateSingleResponse: With update result of the new updated category.
    """
    category_manager: CategoryManager = CategoryManager(
        database_manager=current_app.database_manager)
    try:
        category = CategoryModel.from_data(data=data)
        category_manager.update(public_id=PublicID(public_id),
                                category=CategoryModel.to_json(category))
        api_response = UpdateSingleResponse(result=data,
                                            url=request.url,
                                            model=CategoryModel.MODEL)
    except ManagerGetError as err:
        return abort(404, err.message)
    except ManagerUpdateError as err:
        return abort(400, err.message)

    return api_response.make_response()
 def get_category(self, public_id: int) -> CategoryModel:
     """Get a category from the database"""
     try:
         raw_category: dict = self._get(collection=CategoryModel.COLLECTION,
                                        public_id=public_id)
         return CategoryModel.from_data(raw_category)
     except Exception as err:
         raise ObjectManagerGetError(err=err)
Esempio n. 3
0
 def get_categories_by(self, sort='public_id', **requirements: dict) -> List[CategoryModel]:
     """Get a list of categories by special requirements"""
     try:
         raw_categories = self._get_many(collection=CategoryModel.COLLECTION, sort=sort, **requirements)
     except Exception as err:
         raise ObjectManagerGetError(err)
     try:
         return [CategoryModel.from_data(category) for category in raw_categories]
     except Exception as err:
         raise ObjectManagerInitError(err)
Esempio n. 4
0
 def get_categories(self) -> List[CategoryModel]:
     """Get all categories as nested list"""
     try:
         raw_categories = self._get_many(collection=CategoryModel.COLLECTION, sort='public_id')
     except Exception as err:
         raise ObjectManagerGetError(err)
     try:
         return [CategoryModel.from_data(category) for category in raw_categories]
     except Exception as err:
         raise ObjectManagerInitError(err)
Esempio n. 5
0
    def get_category_by(self, **requirements) -> CategoryModel:
        """Get a single category by requirements
        Notes:
            Even if multiple categories match the requirements only the first matched will be returned
        """
        try:
            raw_category = self._get_by(collection=CategoryModel.COLLECTION, **requirements)
        except Exception as err:
            raise ObjectManagerGetError(err)

        try:
            return CategoryModel.from_data(raw_category)
        except Exception as err:
            raise ObjectManagerInitError(err)