Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions Result9/Src/Logics/Services/logging.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
from Src.errors import error_proxy
from Src.Storage.storage import storage
from Src.Logics.Services.storage_observer import storage_observer
from Src.Logics.Services.service import service
from Src.Models.event_type import event_type
from Src.Logics.convert_factory import reference_convertor
import json

class logging(service):
__storage = None
__log = None
__save_path = './logs.txt'
__save_path_json = './logs.json'

def __init__(self):
self.__storage = storage()
storage_observer.observers.append(self)

def handle_event(self, event: str):
event = event.split(' ')
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Некорректно. В handle_event нужно передавать ключ , а не набор данных.
Вы вызываете метод так

  storage_observer().raise_event(event_type.debug_log(), f"Добавлен новый элемент: (ID: {item.id}; NAME: {item.name})")

У Вас тут два параметра, а в обработчике - один
Более того, Ваш сервис будет все сообщения ловить (нет условия по ключу).

if event[0] == event_type.make_log_key():
self._create_log(event[1], event[2], event[3])
self._save_log()

def _create_log(self, log_type: str, text: str, source: str):
self.__log = error_proxy(text, source)
self.__log.log_type = log_type
print(list(self.__storage.data.keys()))
self.__storage.data[storage.logs_key()].append(self.__log)

def _save_log(self):
ref = reference_convertor(error_proxy)
ref = ref.convert(self.__log)
get = None
to_write = json.dumps(ref, ensure_ascii=False)

with open(self.__save_path, 'a') as saved:
if saved.tell() != 0:
saved.write('\n')
saved.write(to_write)

with open(self.__save_path_json, 'a') as saved_json:
if saved_json.tell() != 0:
saved_json.write('\n')
get = json.load(saved_json)
get['logs'].append(to_write)
saved_json.seek(0)
json.dump(get, saved_json)


8 changes: 4 additions & 4 deletions Result9/Src/Logics/Services/post_processing_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@ def __init__(self, data: list, nomenclature) -> None:
super().__init__(data)

self.nomenclature = nomenclature
# storage_observer.observers.append(self)

storage_observer.observers.append(self)


def handle_event(self, handle_type: str):
Expand All @@ -23,6 +22,7 @@ def handle_event(self, handle_type: str):

def nomenclature_deleted(self, nomenclature: nomenclature_model):
for recipe in self.data:
if self.nomenclature.name in recipe._rows:
del recipe._rows[self.nomenclature.name]
if self.nomenclature in recipe._rows:
del recipe._rows[self.nomenclature]
recipe.__calc_brutto()

10 changes: 6 additions & 4 deletions Result9/Src/Logics/Services/reference_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ def add(self, item: reference) -> bool:
if len(found) > 0:
return False

storage_observer().raise_event(event_type.debug_log(), f"Добавлен новый элемент: (ID: {item.id}; NAME: {item.name})")

self.data.append(item)
return True

Expand All @@ -34,11 +36,11 @@ def delete(self, item: reference) -> bool:
found = list(filter(lambda x: x.id == item.id , self.data))
if len(found) == 0:
return False

item_to_delete = found[0] # Сохраняем объект, который мы собираемся удалить

self.data.remove(item_to_delete)
storage_observer.raise_event(event_type.nomenclature_deleted(item_to_delete))
storage_observer().raise_event(event_type.debug_log(), f"Удалён элемент: (ID: {item.id}; NAME: {item.name})")

self.data.remove( found[0] )
storage_observer.raise_event( event_type.nomenclature_deleted() )

return True

Expand Down
5 changes: 3 additions & 2 deletions Result9/Src/Logics/Services/storage_observer.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,13 @@ class storage_observer:
_observers = []


def raise_event(handle_event: str, reference: None):
def raise_event(handle_event: str, reference = None):
""" Сформировать события """

exception_proxy.validate( handle_event, str )
for object in storage_observer._observers:

if object is not None:
object.handle_event(handle_event)



19 changes: 18 additions & 1 deletion Result9/Src/Logics/Services/storage_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,10 @@ def create_turns(self, start_period: datetime, stop_period:datetime ) -> list:

# Рассчитанные обороты
calculated_turns = self.__build_turns( filter. data )

storage_observer().raise_event(event_type.debug_log(),
f"Вызов create_turns (ARGS: {start_period.strftime('%m/%d/%Y')}, {
stop_period.strftime('%m/%d/%Y')})")

# Сформируем результат
aggregate_key = process_factory.aggregate_key()
Expand Down Expand Up @@ -120,7 +124,11 @@ def create_turns_by_nomenclature(self, start_period: datetime, stop_period: date
raise operation_exception(f"Невозможно сформировать обороты по указанным данных: {filter.error}")

# Рассчитанные обороты
calculated_turns = self.__build_turns( filter. data )
calculated_turns = self.__build_turns( filter. data )

storage_observer().raise_event(event_type.debug_log(),
f"Вызов create_turns_by_nomenclature (ARGS: {start_period.strftime('%m/%d/%Y')},
{stop_period.strftime('%m/%d/%Y')}, {nomenclature.id})")

# Сформируем результат
aggregate_key = process_factory.aggregate_key()
Expand All @@ -141,6 +149,9 @@ def create_turns_only_nomenclature(self, nomenclature: nomenclature_model) -> li
filter = prototype.filter_by_nomenclature( nomenclature )
if not filter.is_empty:
raise operation_exception(f"Невозможно сформировать обороты по указанным данных: {filter.error}")

storage_observer().raise_event(event_type.debug_log(),
f"Вызов create_turns_only_nomenclature (ARGS: {nomenclature.id})")

return self.__build_turns( filter. data )

Expand Down Expand Up @@ -168,6 +179,9 @@ def create_turns_by_receipt(self, receipt: receipe_model) -> list:
transactions.append( transaction )

filter.data = self.data

storage_observer().raise_event(event_type.debug_log(),
f"Вызов create_turns_by_receipt (ARGS: {receipt.id})")

return self.__build_turns( transactions )

Expand Down Expand Up @@ -206,6 +220,9 @@ def handle_event(self, handle_type: event_value, reference: None): # Дор

super().handle_event(handle_type)

storage_observer().raise_event(event_type.debug_log(),
f"Вызов handle_event:changed_block_period")

if handle_type == event_type.changed_block_period:
self.__build_blocked_turns()

Expand Down
30 changes: 18 additions & 12 deletions Result9/Src/Logics/start_factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
from Src.Models.receipe_model import receipe_model
from Src.Models.storage_row_model import storage_row_model
from Src.Models.storage_model import storage_model
from Src.Logics.Services.storage_observer import storage_observer
from Src.Logics.Services.post_processing_service import post_processing_service
from Src.Models.event_type import event_type

# Системное
from Src.settings import settings
Expand Down Expand Up @@ -230,7 +233,12 @@ def create_storage_transactions(data: dict) -> list:
result.append(row)

return result


""" @staticmethod
def create_observers(data: dict) -> list:
observers = []
storage.data """


# Основной метод
def create(self) -> bool:
Expand All @@ -241,7 +249,7 @@ def create(self) -> bool:
"""

if self.__storage == None:
self.__storage = storage()
self.__storage = storage()

if self.__oprions.is_first_start == True:

Expand Down Expand Up @@ -273,16 +281,14 @@ def create(self) -> bool:
# Другой вариант. Загрузка из источника данных
try:
self.__storage.load()

except Exception as ex:
raise operation_exception(f"Ошибка при формировании шаблонных данных!\n{ex}")









# Добавляем наблюдателя к каждому элементу номенклатуры
for nomen in self.__storage.data:
if nomen == storage.nomenclature_key():
storage_observer.raise_event(event_type.nomenclature_deleted())


16 changes: 15 additions & 1 deletion Result9/Src/Models/event_type.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,18 @@ def nomenclature_deleted() -> str:
"""
Событие удаления номенклатуры из рецептов
"""
return "nomenclature_deleted"
return "nomenclature_deleted"

@staticmethod
def create_log() -> str:
"""
Событие для логирования
"""
return "create_log"

@staticmethod
def debug_log() -> str:
"""
Событие для логирования
"""
return "debug_log"
7 changes: 7 additions & 0 deletions Result9/Src/errors.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import json
from Src.Logics.Services.storage_observer import storage_observer
from Src.Models.event_type import event_type

#
# Класс для обработки и хранения текстовой информации об ошибке
Expand Down Expand Up @@ -40,6 +42,9 @@ def set_error(self, exception: Exception):
return

self._error_text = "Ошибка! " + str(exception)

storage_observer.raise_event( event_type.create_log(), str(exception) )


@property
def is_empty(self) -> bool:
Expand Down Expand Up @@ -82,6 +87,8 @@ def create_error_response( app, message: str, http_code: int = 0):

# Формируем описание
json_text = json.dumps({"details" : message}, sort_keys = True, indent = 4, ensure_ascii = False)

storage_observer.raise_event( event_type.create_log(), f"error response: {message}" )

# Формируем результат
result = app.response_class(
Expand Down
4 changes: 3 additions & 1 deletion Result9/Src/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,5 +95,7 @@ def block_period(self, value):
raise argument_exception("Некорректно переданы параметры!")

if legacy_period == self._block_period:
storage_observer.raise_event( event_type.changed_block_period() )
arg1 = event_type.changed_block_period( )
arg2 = None
storage_observer.raise_event( arg1, arg2 )

8 changes: 3 additions & 5 deletions Result9/Tst/service_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -257,17 +257,15 @@ def test_check_observer_nomenclature_deleted(self):
manager = settings_manager()
start = start_factory(manager.settings)
start.create()
nomenclature = nomenclature_model()
service = reference_service(nomenclature)
key = storage.nomenclature_key()
nomen_data = start.storage.data[ key ]
service = reference_service( nomen_data )

# Действие
try:
storage_observer.raise_event( event_type.nomenclature_deleted() )
service.delete(nomenclature)
pass
except Exception as ex:
print(f"{ex}")

# Проверка
assert nomenclature is None

7 changes: 0 additions & 7 deletions Result9/Tst/settings_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,10 +97,3 @@ def test_fail_open_settings(self):
# Проверки
assert manager.error.is_empty == False








2 changes: 1 addition & 1 deletion Result9/csv_report.csv
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
description;group;id;is_error;name;unit
Ингредиент для салата;1c9b78ecc0cf4465ac07a682a518ad86;0d6674afc728471b99b30ced559b87bb;True;Тушка бройлера;c9161d641ac44f1f80d784cc105de86f
Ингредиент для салата;0e5258cab7af471ab085e3bf0f498fac;6bbb34ba07864c50abebf9f6e55327cf;True;Тушка бройлера;65c8db5eedec4d37a8eb8fe3a3247d0e
Loading