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)
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)
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)
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)