From 590decf1b2391b2ebc50e8fafffbc8cfe1d6f191 Mon Sep 17 00:00:00 2001 From: Dan Yeaw Date: Sun, 10 Nov 2019 15:13:59 -0500 Subject: [PATCH] Give all except statements a checked for exception Signed-off-by: Dan Yeaw --- .flake8 | 2 +- gaphor/UML/diagram.py | 7 +++++-- gaphor/UML/element.py | 11 ++++++---- gaphor/UML/properties.py | 10 ++++----- gaphor/misc/gidlethread.py | 2 +- gaphor/storage/parser.py | 4 ++-- gaphor/storage/storage.py | 42 +++++++++----------------------------- gaphor/ui/filemanager.py | 24 +++++++++------------- 8 files changed, 41 insertions(+), 61 deletions(-) diff --git a/.flake8 b/.flake8 index 7f3415c6f4..549434ce8d 100644 --- a/.flake8 +++ b/.flake8 @@ -3,4 +3,4 @@ ignore = E203, E266, E501, W503, F403, F401 max-line-length = 88 max-complexity = 18 select = B,C,E,F,W,T4,B9 -exclude = uml2.py \ No newline at end of file +exclude = uml2.py,msgfmt.py,pygettext.py \ No newline at end of file diff --git a/gaphor/UML/diagram.py b/gaphor/UML/diagram.py index f181acb21f..6530e9c5dd 100644 --- a/gaphor/UML/diagram.py +++ b/gaphor/UML/diagram.py @@ -5,6 +5,7 @@ The DiagramCanvas class extends the gaphas.Canvas class. """ +import logging import uuid import gaphas @@ -12,6 +13,8 @@ from gaphor.UML.properties import umlproperty from gaphor.UML.uml2 import Namespace, PackageableElement +log = logging.getLogger(__name__) + class DiagramCanvas(gaphas.Canvas): """DiagramCanvas extends the gaphas.Canvas class. Updates to the canvas @@ -108,7 +111,7 @@ def unlink(self): for item in self.canvas.get_all_items(): try: item.unlink() - except: - pass + except AttributeError: + log.exception(f"Failed to unlink {item}") super().unlink() diff --git a/gaphor/UML/element.py b/gaphor/UML/element.py index 7998781945..24190dbd35 100644 --- a/gaphor/UML/element.py +++ b/gaphor/UML/element.py @@ -5,20 +5,23 @@ from __future__ import annotations +import logging import uuid from typing import TYPE_CHECKING, Optional, Sequence, Type, Union from gaphor.UML.elementdispatcher import EventWatcher from gaphor.UML.properties import relation_many, relation_one, umlproperty -__all__ = ["Element"] - - if TYPE_CHECKING: from gaphor.UML.elementfactory import ElementFactory # noqa from gaphor.UML.presentation import Presentation # noqa +__all__ = ["Element"] + +log = logging.getLogger(__name__) + + class UnlinkEvent: """Used to tell event handlers this element should be unlinked. """ @@ -101,7 +104,7 @@ def load(self, name, value): try: prop = getattr(type(self), name) except AttributeError: - raise AttributeError(f"'{type(self).__name__}' has no property '{name}'") + log.exception(f"'{type(self).__name__}' has no property '{name}'") else: prop.load(self, value) diff --git a/gaphor/UML/properties.py b/gaphor/UML/properties.py index 92c79c9e73..e75401b162 100644 --- a/gaphor/UML/properties.py +++ b/gaphor/UML/properties.py @@ -463,8 +463,8 @@ def _del_one(self, obj, value, from_opposite=False, do_notify=True): try: delattr(obj, self._name) - except: - pass + except AttributeError: + log.exception(f"Delete attribute failed for {obj} with {self._name}") else: if do_notify: self.handle(AssociationSet(obj, self, value, None)) @@ -480,8 +480,8 @@ def _del_many(self, obj, value, from_opposite=False, do_notify=True): items = c.items try: items.remove(value) - except: - pass + except ValueError: + log.exception(f"Removing {value} from list {items} failed") else: if do_notify: self.handle(AssociationDeleted(obj, self, value)) @@ -548,7 +548,7 @@ def unlink(self, obj): try: values = getattr(obj, self._name) except AttributeError: - pass + log.exception(f"Failed to unlink {self._name} from {obj}") else: for value in set(values): self.association.__delete__(value, obj) diff --git a/gaphor/misc/gidlethread.py b/gaphor/misc/gidlethread.py index 497982db8b..f89c248d75 100644 --- a/gaphor/misc/gidlethread.py +++ b/gaphor/misc/gidlethread.py @@ -128,7 +128,7 @@ def __generator_executer(self): except StopIteration: self._idle_id = 0 return False - except: + except QueueEmpty: self._exc_info = sys.exc_info() self._idle_id = 0 return False diff --git a/gaphor/storage/parser.py b/gaphor/storage/parser.py index 261ac48dfe..fc813fd19f 100644 --- a/gaphor/storage/parser.py +++ b/gaphor/storage/parser.py @@ -58,13 +58,13 @@ def __getattr__(self, key): def __getitem__(self, key): try: return self.values[key] - except: + except KeyError: return self.references[key] def get(self, key): try: return self.__getitem__(key) - except: + except KeyError: return None diff --git a/gaphor/storage/storage.py b/gaphor/storage/storage.py index 2779f62f46..abd864ce8c 100644 --- a/gaphor/storage/storage.py +++ b/gaphor/storage/storage.py @@ -234,48 +234,26 @@ def create_canvasitems(diagram, canvasitems, parent=None): # load attributes and references: for name, value in list(elem.values.items()): - try: - elem.element.load(name, value) - except: - log.error( - "Loading value %s (%s) for element %s failed." - % (name, value, elem.element) - ) - raise + elem.element.load(name, value) for name, refids in list(elem.references.items()): if isinstance(refids, list): for refid in refids: try: ref = elements[refid] - except: - raise ValueError( - "Invalid ID for reference (%s) for element %s.%s" - % (refid, elem.type, name) + except ValueError: + log.exception( + f"Invalid ID for reference ({refid}) for element {elem.type}.{name}" ) else: - try: - elem.element.load(name, ref.element) - except: - log.error( - "Loading %s.%s with value %s failed" - % (type(elem.element).__name__, name, ref.element.id) - ) - raise + elem.element.load(name, ref.element) else: try: ref = elements[refids] - except: - raise ValueError(f"Invalid ID for reference ({refids})") + except ValueError: + log.exception(f"Invalid ID for reference ({refids})") else: - try: - elem.element.load(name, ref.element) - except: - log.error( - "Loading %s.%s with value %s failed" - % (type(elem.element).__name__, name, ref.element.id) - ) - raise + elem.element.load(name, ref.element) # Before version 0.7.2 there was only decision node (no merge nodes). # This node could have many incoming and outgoing flows (edges). @@ -333,8 +311,8 @@ def load_generator(filename, factory): elements = loader.elements gaphor_version = loader.gaphor_version - except Exception: - log.error("File could no be parsed", exc_info=True) + except OSError: + log.exception("File could no be parsed") raise if version_lower_than(gaphor_version, (0, 17, 0)): diff --git a/gaphor/ui/filemanager.py b/gaphor/ui/filemanager.py index 5c2364b5d7..975acb5403 100644 --- a/gaphor/ui/filemanager.py +++ b/gaphor/ui/filemanager.py @@ -13,7 +13,7 @@ from gaphor.abc import ActionProvider, Service from gaphor.core import action, event_handler, translate from gaphor.misc.errorhandler import error_handler -from gaphor.misc.gidlethread import GIdleThread, Queue +from gaphor.misc.gidlethread import GIdleThread, Queue, QueueEmpty, QueueFull from gaphor.misc.xmlwriter import XMLWriter from gaphor.storage import storage, verify from gaphor.ui.event import FileLoaded, FileSaved, WindowClosed @@ -69,17 +69,13 @@ def load(self, filename): queue = Queue() status_window: Optional[StatusWindow] - try: - main_window = self.main_window - status_window = StatusWindow( - translate("Loading..."), - translate("Loading model from %s") % filename, - parent=main_window.window, - queue=queue, - ) - except: - log.warning("Could not create status window, proceding without.") - status_window = None + main_window = self.main_window + status_window = StatusWindow( + translate("Loading..."), + translate(f"Loading model from {filename}"), + parent=main_window.window, + queue=queue, + ) try: loader = storage.load_generator( @@ -95,7 +91,7 @@ def load(self, filename): self.filename = filename self.event_manager.handle(FileLoaded(self, filename)) - except: + except (QueueEmpty, QueueFull): error_handler( message=translate("Error while loading model from file %s") % filename ) @@ -175,7 +171,7 @@ def save(self, filename): self.filename = filename self.event_manager.handle(FileSaved(self, filename)) - except: + except (OSError, QueueEmpty, QueueFull): error_handler( message=translate("Error while saving model to file %s") % filename )