From b7d122b993f5e20a9f83ee8da1648bdfd7e0c6a9 Mon Sep 17 00:00:00 2001 From: WojtekMs <62173407+WojtekMs@users.noreply.github.com> Date: Sun, 4 Feb 2024 16:58:41 +0100 Subject: [PATCH] Add support for logging to windows NTEventLog --- pyproject.toml | 3 ++- src/banker/__main__.py | 18 ++++++++---------- src/banker/common/filesystem.py | 19 ++++--------------- src/banker/executor/executor.py | 6 +++--- 4 files changed, 17 insertions(+), 29 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 8deb5b6..3d284df 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,7 +36,8 @@ dependencies = [ "py-moneyed", "openpyxl", "semver", - "importlib-resources" + "importlib-resources", + "pywin32" ] [project.optional-dependencies] # Optional diff --git a/src/banker/__main__.py b/src/banker/__main__.py index 48c69c5..c90090c 100644 --- a/src/banker/__main__.py +++ b/src/banker/__main__.py @@ -9,26 +9,24 @@ def configure_logging(): root_logger = logging.getLogger() root_logger.setLevel(logging.DEBUG) - log_formatter = logging.Formatter(fmt="[{asctime}][{name}][{funcName}][{levelname}] {message}", style='{') + log_formatter = logging.Formatter(fmt="[{asctime}][T:{thread}][{name}][{funcName}][{levelname}] {message}", style='{') console_handler = logging.StreamHandler() console_handler.setLevel(logging.WARNING) console_handler.setFormatter(log_formatter) root_logger.addHandler(console_handler) - syslog_identifier = "matusiak_dev_banker" + app_identifier = "matusiak_dev_banker" if os.name == "posix": syslog_handler = logging.handlers.SysLogHandler(address="/dev/log") syslog_handler.setLevel(logging.DEBUG) syslog_handler.setFormatter(log_formatter) - syslog_handler.ident = f"{syslog_identifier}: " + syslog_handler.ident = f"{app_identifier}: " root_logger.addHandler(syslog_handler) elif os.name == "nt": - date_format = datetime.today().strftime("%Y_%m_%d") - log_file_path = os.path.join(os.getenv('LOCALAPPDATA'), "Matusiak.dev", "Banker", f"Banker_{date_format}.log") - os.makedirs(log_file_path, exist_ok=True) - file_handler = logging.FileHandler(log_file_path) - file_handler.setLevel(logging.DEBUG) - file_handler.setFormatter(log_formatter) - root_logger.addHandler(file_handler) + nt_event_handler = logging.handlers.NTEventLogHandler(appname=app_identifier) + nt_event_handler.setLevel(logging.DEBUG) + nt_event_handler.setFormatter(log_formatter) + root_logger.addHandler(nt_event_handler) + root_logger.info("Logging configured") def main(): diff --git a/src/banker/common/filesystem.py b/src/banker/common/filesystem.py index 3fba831..2c48e84 100644 --- a/src/banker/common/filesystem.py +++ b/src/banker/common/filesystem.py @@ -1,19 +1,8 @@ -from banker.data.category import Category -from banker.data.transaction import Transaction -from banker.parser.interfaces.categories_parser import ICategoriesParser -from banker.parser.interfaces.transactions_parser import ITransactionsParser - - -def get_parsed_categories(categories_parser: ICategoriesParser, categories_filepath: str) -> list[Category]: - with open(categories_filepath, "r") as file: - return categories_parser.parse_categories(file.read()) - - -def get_parsed_transactions(transactions_parser: ITransactionsParser, transactions_filepath: str) -> list[Transaction]: - with open(transactions_filepath, "r") as transactions_file: - return transactions_parser.parse_transactions(transactions_file.read()) +def read_file(filepath: str) -> str: + with open(filepath, "r", encoding="utf-8") as file: + return file.read() def save_to_file(filepath: str, content: str): - with open(filepath, "w") as file: + with open(filepath, "w", encoding="utf-8") as file: file.write(content) diff --git a/src/banker/executor/executor.py b/src/banker/executor/executor.py index e041ff7..e18db58 100644 --- a/src/banker/executor/executor.py +++ b/src/banker/executor/executor.py @@ -1,7 +1,7 @@ import os from banker.analyzer.analyze import deduce_month_year, analyze_transactions -from banker.common.filesystem import get_parsed_categories, get_parsed_transactions, save_to_file +from banker.common.filesystem import save_to_file, read_file from banker.formatter.interfaces.transactions_formatter import ITransactionsFormatter from banker.formatter.month_year_formatter import format_month_year from banker.parser.interfaces.categories_parser import ICategoriesParser @@ -22,9 +22,9 @@ def execute(self, transactions_filepath: str, categories_filepath: str, output_d output_unmatched_transactions_filepath = os.path.join(output_directory, "unmatched_transactions.html") output_matched_categories_filepath = os.path.join(output_directory, "autogen_budget.xlsx") - all_transactions = get_parsed_transactions(self.__transactions_parser, transactions_filepath) + all_transactions = self.__transactions_parser.parse_transactions(read_file(transactions_filepath)) month_year = deduce_month_year(all_transactions) - supported_categories = get_parsed_categories(self.__categories_parser, categories_filepath) + supported_categories = self.__categories_parser.parse_categories(read_file(categories_filepath)) analyze_result = analyze_transactions(all_transactions, supported_categories) formatted_transactions = self.__transactions_formatter.format_transactions( analyze_result.unmatched_transactions)