1
1

start_factory.py 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. from src.models.recipe_model import recipe_model
  2. from src.models.ingredient_model import ingredient_model
  3. from src.models.nomenclature_group_model import nomenclature_group_model
  4. from src.models.measurement_unit_model import measurement_unit_model
  5. from src.models.nomenclature_model import nomenclature_model
  6. from src.settings.settings import settings
  7. from src.storage.storage import storage
  8. from src.validation.validator import validator
  9. #
  10. # Класс для обработки начало работы приложения
  11. #
  12. class start_factory:
  13. __options: settings = None
  14. __storage: storage = None
  15. __vtor = validator()
  16. def __init__(self, _options: settings, _storage: storage = None) -> None:
  17. self.__vtor.check_type(_options, settings)
  18. self.__vtor.check_type(_storage, storage)
  19. self.__options = _options
  20. self.__storage = _storage
  21. def __save(self, key: str, items: list):
  22. """
  23. Сохранить данные
  24. Args:
  25. key (str): ключ доступ
  26. items (list): список
  27. """
  28. self.__vtor.check_type(key, str)
  29. if self.__storage is None:
  30. self.__storage = storage()
  31. self.__storage.data[key] = items
  32. @property
  33. def storage(self):
  34. """
  35. Ссылка на объект хранилище данных
  36. Returns:
  37. _type_: _description_
  38. """
  39. return self.__storage
  40. @staticmethod
  41. def create_recipes():
  42. """
  43. Фабричный метод Создать список рецептов
  44. """
  45. result = []
  46. g = measurement_unit_model.create_g()
  47. pcs = measurement_unit_model.create_pcs()
  48. group = nomenclature_group_model("group")
  49. ingredients = [
  50. ingredient_model(
  51. "Мука", nomenclature_model("Мука", "Мука пшеничная", g, group), 100, g
  52. ),
  53. ingredient_model(
  54. "Сахар", nomenclature_model("Сахар", "Сахарный песок", g, group), 80, g
  55. ),
  56. ingredient_model(
  57. "Масло", nomenclature_model("Масло", "Масло сливочное", g, group), 70, g
  58. ),
  59. ingredient_model(
  60. "Яйцо", nomenclature_model("Яйцо", "Яйцо куриное", pcs, group), 1, pcs
  61. ),
  62. ingredient_model(
  63. "Ванилин",
  64. nomenclature_model("Ванилин", "Ванилин продуктовый", g, group),
  65. 5,
  66. g,
  67. ),
  68. ]
  69. steps = [
  70. "Как испечь вафли хрустящие в вафельнице? Подготовьте необходимые продукты. Из данного количества у меня получилось 8 штук диаметром около 10 см.",
  71. "Масло положите в сотейник с толстым дном. Растопите его на маленьком огне на плите, на водяной бане либо в микроволновке.",
  72. "Добавьте в теплое масло сахар. Перемешайте венчиком до полного растворения сахара. От тепла сахар довольно быстро растает.",
  73. "Добавьте в масло яйцо. Предварительно все-таки проверьте масло, не горячее ли оно, иначе яйцо может свариться. Перемешайте яйцо с маслом до однородности.",
  74. "Всыпьте муку, добавьте ванилин.",
  75. "Перемешайте массу венчиком до состояния гладкого однородного теста.",
  76. "Разогрейте вафельницу по инструкции к ней. У меня очень старая, еще советских времен электровафельница. Она может и не очень красивая, но печет замечательно! Я не смазываю вафельницу маслом, в тесте достаточно жира, да и к ней уже давно ничего не прилипает. Но вы смотрите по своей модели. Выкладывайте тесто по столовой ложке. Можно класть немного меньше теста, тогда вафли будут меньше и их получится больше.",
  77. "Пеките вафли несколько минут до золотистого цвета. Осторожно откройте вафельницу, она очень горячая! Снимите вафлю лопаткой. Горячая она очень мягкая, как блинчик. Но по мере остывания становится твердой и хрустящей. Такие вафли можно свернуть трубочкой. Но делать это надо сразу же после выпекания, пока она мягкая и горячая, потом у вас ничего не получится, вафля поломается. Приятного аппетита!",
  78. ]
  79. result.append(
  80. recipe_model.create("Вафли хрустящие в вафельнице", ingredients, steps)
  81. )
  82. return result
  83. def create(self):
  84. """
  85. В зависимости от настроек, сформировать начальную номенклатуру
  86. Returns:
  87. _type_: _description_
  88. """
  89. result = []
  90. if self.__options.is_first_run:
  91. self.__options.is_first_run = False
  92. # Формируем и зпоминаем номеклатуру
  93. res = self.create_recipes()
  94. ingredients = set()
  95. for x in res:
  96. for ing in x.ingredients:
  97. ingredients.add(ing)
  98. recipes = res.copy()
  99. nomenclatures = set()
  100. for ingredient in ingredients:
  101. nomenclatures.add(ingredient.nomenclature)
  102. result = nomenclatures
  103. munits = set([x.measurement_unit for x in nomenclatures])
  104. nomgroups = set([x.nomenclature_group for x in nomenclatures])
  105. self.__save(storage.nomenclature_key(), nomenclatures)
  106. self.__save(storage.measurement_unit_key(), munits)
  107. self.__save(storage.nomenclature_group_key(), nomgroups)
  108. self.__save(storage.ingredient_key(), ingredients)
  109. self.__save(storage.recipe_key(), recipes)
  110. return result