from marshmallow import validates_schema, ValidationError from apollo_utils.core.constants import ALL class ValidateCategoriesByWithIncludeMixin: @validates_schema def validate_categories_by_with_include(self, data, **kwargs): category_id_key = self.category_id_key if hasattr(self, "category_id_key") else "category_id" include_key = self.include_key if hasattr(self, "include_key") else "include" category_id = data.get(category_id_key) include = data.get(include_key, ()) if category_id and "categories" in include: raise ValidationError("Remove include categories to filter by category_id.") class ValidateOrderByWithIncludeMixin: @validates_schema def validate_order_by_with_include(self, data, **kwargs): if not hasattr(self, "order_by_dependencies"): raise ValueError() order_by_key = self.order_by_key if hasattr(self, "order_by_key") else "order_by" include_key = self.include_key if hasattr(self, "include_key") else "include" order_by = data.get(order_by_key) include = data.get(include_key, ()) if order_by: for order_by_item, include_item in self.order_by_dependencies.items(): if order_by_item in order_by and include_item not in include and ALL not in include: raise ValidationError("Include a field to sort by it.")