Skip to content

Commit 752a680

Browse files
committed
Add broad error handling and file logging
1 parent c54b0fd commit 752a680

7 files changed

Lines changed: 51 additions & 10 deletions

File tree

src/backend/rule_manager.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from src.backend.tile_status import TileStatus
66
from src.config.config_manager import ConfigManager
77
from src.widgets.widget_base_tile import BaseTile
8+
from src.logger import BroadErrorHandler
89

910
RuleConfig = Dict[str, List[str]]
1011

@@ -39,11 +40,13 @@ def _loadRuleFile(self, filename_base):
3940
self._header = []
4041
self._loadedRules = True
4142

43+
@BroadErrorHandler
4244
def loadRules(self, filename):
4345
if not self._loadedRules:
4446
filename = RuleManager._getFileBase(filename)
4547
self._loadRuleFile(filename)
4648

49+
@BroadErrorHandler
4750
def saveRule(self, filename, rule_name):
4851
filename = RuleManager._getFileBase(filename)
4952
if not self._loadedRules:

src/config/app_state.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,18 @@ def ruleManager(cls):
4141
def setImagePath(cls, image_path):
4242
cls.instance().main_image_path = image_path
4343
cls.instance().rule_manager.loadRules(Path(image_path).stem)
44-
cls.instance().signal_emitter.application_status_signal.emit(ApplicationStatusEnum.IMAGE_LOADED, "")
44+
cls.instance().signal_emitter.application_status_signal.emit(
45+
ApplicationStatusEnum.IMAGE_LOADED,
46+
f"image loaded: {str(image_path)}")
4547

4648
@classmethod
4749
def reset(cls):
4850
# do not call _init here, don't overwrite the signal emitter, reset manually
4951
cls.instance().rule_manager: RuleManager = RuleManager()
5052
cls.instance().main_image_path: Optional[str] = None
51-
cls.instance().signal_emitter.application_status_signal.emit(ApplicationStatusEnum.RESET_APP, "")
53+
cls.instance().signal_emitter.application_status_signal.emit(
54+
ApplicationStatusEnum.RESET_APP,
55+
"Reset rules and images")
5256

5357
@classmethod
5458
def setStatus(cls, status_type: ApplicationStatusEnum, message: str):

src/config/config_manager.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import logging
12
from pathlib import Path
23
from typing import Any
34

@@ -42,8 +43,16 @@ def _checkConfig(self) -> bool:
4243
return updated
4344

4445
def createConfig(self):
45-
client_path = StorageFinder.instance().getClientPath()
46-
data_path = StorageFinder.instance().getDataPath()
46+
client_path = ""
47+
data_path = ""
48+
# noinspection PyBroadException
49+
try:
50+
client_path = StorageFinder.instance().getClientPath()
51+
data_path = StorageFinder.instance().getDataPath()
52+
except Exception as e:
53+
logging.error("An error occured while creating the config")
54+
logging.error(str(e))
55+
4756
data = {
4857
'version': "1.0.0",
4958
'client_path': str(client_path),

src/config/storage_finder.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@
33
from abc import ABC, abstractmethod
44
from pathlib import Path
55
from typing import List
6-
import logging
7-
8-
logger = logging.getLogger(__name__)
6+
from src.logger import logger
97

108

119
class StorageFinderBase(ABC):
@@ -121,7 +119,7 @@ def _findLocations(self, paths: List[str], os_name):
121119
def _findClient(data_path, os_name):
122120
if data_path:
123121
pattern = "ddnet.exe" if os_name in ["win32", "cygwin"] else "ddnet*"
124-
for p in Path(data_path).parent.glob(pattern, case_sensitive=False):
122+
for p in Path(data_path).parent.glob(pattern):
125123
if p.is_file():
126124
return p
127125
return None

src/logger.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import logging
2+
import sys
3+
from logging.handlers import RotatingFileHandler
4+
5+
handlers = [RotatingFileHandler(filename="simple_ddnet_mapper.log",
6+
mode='w',
7+
maxBytes=512000,
8+
backupCount=4),
9+
logging.StreamHandler(sys.stdout)
10+
]
11+
logging.basicConfig(handlers=handlers,
12+
level=logging.DEBUG,
13+
format='%(levelname)s %(asctime)s %(message)s',
14+
datefmt='%m/%d/%Y%I:%M:%S %p')
15+
16+
17+
def BroadErrorHandler(func):
18+
def innerFunction(*args, **kwargs):
19+
try:
20+
func(*args, **kwargs)
21+
except Exception as e:
22+
logger.error(f"An error occurred at {func.__name__}")
23+
logger.error(str(e))
24+
25+
return innerFunction

src/main_window.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
from src.config.app_state import AppState
1111
from src.signals.signal_emitter import ApplicationStatusEnum
1212
from src.backend.tile_handler import TileHandler
13+
import src.logger
1314
import logging
14-
1515
logger = logging.getLogger(__name__)
1616

1717

@@ -67,7 +67,7 @@ def showAbout(self):
6767
QMessageBox.about(self, 'About', 'This is a PyQt6 menu example.')
6868

6969
def statusUpdateReceived(self, status_type: ApplicationStatusEnum, message: str):
70-
logger.debug(f"Status update received: {status_type}, {message}")
70+
logger.debug(f"Status update received: {status_type}{', ' if len(message) else ''}{message}")
7171
if status_type == ApplicationStatusEnum.IMAGE_LOADED:
7272
self.mapper_generator.setEnabled(True)
7373
self.mapper_generator.widget().rulesLoaded()

src/widgets/widget_mapper_generator.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from src.dialogs.dialog_check_map import CheckMapDialog
1212
from src.config.config_manager import ConfigManager
1313
from src.backend.map_generator import MapGenerator
14+
from src.logger import BroadErrorHandler
1415

1516

1617
class MapperGeneratorWidget(QWidget):
@@ -134,6 +135,7 @@ def ruleNameToggle(self):
134135
self.existing_mapper.show()
135136
self._updateGenerateButton()
136137

138+
@BroadErrorHandler
137139
def startDDNetCheck(self):
138140
# TODO
139141
# generate Map

0 commit comments

Comments
 (0)