Bläddra i källkod

Added ingredient_model and receipt_model

Vsevolod Levitan 1 år sedan
förälder
incheckning
422c9bd89b
2 ändrade filer med 172 tillägg och 0 borttagningar
  1. 91 0
      src/models/ingredient_model.py
  2. 81 0
      src/models/receipt_model.py

+ 91 - 0
src/models/ingredient_model.py

@@ -0,0 +1,91 @@
+from models.measurement_unit_model import measurement_unit_model
+from models.nomenclature_model import nomenclature_model
+from src.models.abstract_reference import abstract_reference
+from validation.validator import validator
+
+class ingredient_model (abstract_reference):
+    # Номенклатура ингредиента
+    __nomenclature = None
+
+    # Количество ингредиента в единицах измерения
+    __amount = 0
+
+    # Единица измерения количества ингредиента
+    __measurement_unit = None
+
+
+    # Валидатор
+    __vtor = validator()
+
+
+    def __init__(self, name, nomenclature:nomenclature_model, amount:int, unit:measurement_unit_model):
+        self.__vtor.check_type(nomenclature, nomenclature_model)
+        self.__vtor.check_number(amount)
+        self.__vtor.check_type(unit, measurement_unit_model)
+        self.__nomenclature = nomenclature
+        self.__amount = amount
+        self.__measurement_unit = unit
+        super().__init__(name)
+
+    
+    @property
+    def nomenclature(self):
+        """Номенклатура ингредиента"""
+
+        return self.__nomenclature
+    
+    @nomenclature.setter
+    def nomenclature(self, value: nomenclature_model):
+        """
+            Номенклатура ингредиента
+        Args:
+            value (nomenclature_model): номенклатура ингредиента
+        Raises:
+            argument_exception: Несоответствие типа аргумента
+        """
+
+        self.__vtor.check_type(value, nomenclature_model)
+
+        self.__nomenclature = value
+
+    
+    @property
+    def amount(self):
+        """Количество ингредиента"""
+
+        return self.__amount
+    
+    @amount.setter
+    def amount(self, value):
+        """
+            Количество ингредиента в его единице измерения
+        Args:
+            value (Number): количество ингредиента в его единице измерения
+        Raises:
+            argument_exception: Значение не является числом
+        """
+
+        self.__vtor.check_number(value)
+
+        self.__amount = value
+
+
+    @property
+    def measurement_unit(self):
+        """Единица измерения количества ингредиента"""
+
+        return self.__measurement_unit
+    
+    @measurement_unit.setter
+    def measurement_unit(self, value: measurement_unit_model):
+        """
+            Единица измерения количества ингредиента
+        Args:
+            value (measurement_unit_model): единица измерения количества ингредиента
+        Raises:
+            argument_exception: Несоответствие типа аргумента
+        """
+
+        self.__vtor.check_type(value, measurement_unit_model)
+
+        self.__measurement_unit = value

+ 81 - 0
src/models/receipt_model.py

@@ -0,0 +1,81 @@
+from models.ingredient_model import ingredient_model
+from src.models.abstract_reference import abstract_reference
+from validation.validator import validator
+
+class receipt_model (abstract_reference):
+    # Ингредиенты рецепта
+    __ingredients = list()
+
+    # Шаги приготовления рецепта
+    __steps = list()
+
+
+    # Валидатор
+    __vtor = validator()
+
+
+    def __init__(self, name, ingredients: list, steps: list):
+        self.__vtor.check_type(ingredients, list)
+        self.__vtor.check_collection_all(ingredients,
+                                               lambda item: self.__vtor.check_type(item, ingredient_model))
+        
+        self.__vtor.check_type(steps, list)
+        self.__vtor.check_collection_all(steps,
+                                               lambda item: self.__vtor.check_type(item, str))
+        self.__vtor.check_collection_all(steps,
+                                               lambda item: self.__vtor.check_length_greater(item, 0))
+        
+        self.__ingredients = ingredients
+        self.__steps = steps
+
+        super().__init__(name)
+
+    
+    @property
+    def ingredients(self):
+        """Ингредиенты рецепта"""
+
+        return self.__ingredients
+    
+    @ingredients.setter
+    def ingredients(self, ingredients: list):
+        """
+            Ингредиенты рецепта
+        Args:
+            ingredients (list): ингредиенты рецепта
+        Raises:
+            argument_exception: Несоответствие типа аргумента
+            argument_exception: Один из членов коллекции не прошел валидацию
+        """
+
+        self.__vtor.check_type(ingredients, list)
+        self.__vtor.check_collection_all(ingredients,
+                                               lambda item: self.__vtor.check_type(item, ingredient_model))
+        
+        self.__ingredients = ingredients
+
+
+    @property
+    def steps(self):
+        """Шаги рецепта"""
+
+        return self.__steps
+    
+    @steps.setter
+    def steps(self, steps: list):
+        """
+            Шаги рецепта
+        Args:
+            steps (list): шаги рецепта
+        Raises:
+            argument_exception: Несоответствие типа аргумента
+            argument_exception: Один из членов коллекции не прошел валидацию
+        """
+
+        self.__vtor.check_type(steps, list)
+        self.__vtor.check_collection_all(steps,
+                                               lambda item: self.__vtor.check_type(item, str))
+        self.__vtor.check_collection_all(steps,
+                                               lambda item: self.__vtor.check_length_greater(item, 0))
+        
+        self.__steps = steps