Browse Source

ref: replace reraise_as with native traceback preservation (#35055)

anthony sottile 2 years ago
parent
commit
b91b69afa2
3 changed files with 9 additions and 40 deletions
  1. 1 3
      src/sentry/runner/importer.py
  2. 6 7
      src/sentry/runner/initializer.py
  3. 2 30
      src/sentry/utils/settings.py

+ 1 - 3
src/sentry/runner/importer.py

@@ -40,14 +40,12 @@ class Importer:
         try:
             mod = self._load_module(fullname)
         except Exception as e:
-            from sentry.utils.settings import reraise_as
-
             msg = str(e)
             if msg:
                 msg = f"{type(e).__name__}: {msg}"
             else:
                 msg = type(e).__name__
-            reraise_as(ConfigurationError(msg))
+            raise ConfigurationError(msg).with_traceback(e.__traceback__)
         else:
             # Install into sys.modules explicitly
             sys.modules[fullname] = mod

+ 6 - 7
src/sentry/runner/initializer.py

@@ -397,7 +397,6 @@ def setup_services(validate=True):
         tagstore,
         tsdb,
     )
-    from sentry.utils.settings import reraise_as
 
     from .importer import ConfigurationError
 
@@ -419,16 +418,16 @@ def setup_services(validate=True):
             try:
                 service.validate()
             except AttributeError as e:
-                reraise_as(
-                    ConfigurationError(f"{service.__name__} service failed to call validate()\n{e}")
-                )
+                raise ConfigurationError(
+                    f"{service.__name__} service failed to call validate()\n{e}"
+                ).with_traceback(e.__traceback__)
         try:
             service.setup()
         except AttributeError as e:
             if not hasattr(service, "setup") or not callable(service.setup):
-                reraise_as(
-                    ConfigurationError(f"{service.__name__} service failed to call setup()\n{e}")
-                )
+                raise ConfigurationError(
+                    f"{service.__name__} service failed to call setup()\n{e}"
+                ).with_traceback(e.__traceback__)
             raise
 
 

+ 2 - 30
src/sentry/utils/settings.py

@@ -1,6 +1,3 @@
-import inspect
-import sys
-
 from sentry.utils.imports import import_string
 
 PACKAGES = {
@@ -11,31 +8,6 @@ PACKAGES = {
 }
 
 
-def reraise_as(new_exception_or_type):
-    """
-    Obtained from https://github.com/dcramer/reraise/blob/master/src/reraise.py
-    >>> try:
-    >>>     do_something_crazy()
-    >>> except Exception:
-    >>>     reraise_as(UnhandledException)
-    """
-    __traceback_hide__ = True  # NOQA
-
-    e_type, e_value, e_traceback = sys.exc_info()
-
-    if inspect.isclass(new_exception_or_type):
-        new_exception = new_exception_or_type()
-    else:
-        new_exception = new_exception_or_type
-
-    new_exception.__cause__ = e_value
-
-    try:
-        raise new_exception.with_traceback(e_traceback)
-    finally:
-        del e_traceback
-
-
 def validate_settings(settings):
     for key, engine_key, engine_type in [
         ("DATABASES", "ENGINE", "database engine"),
@@ -53,9 +25,9 @@ def validate_settings(settings):
 def validate_dependency(settings, dependency_type, dependency, package):
     try:
         import_string(package)
-    except ImportError:
+    except ImportError as e:
         msg = ConfigurationError.get_error_message(f"{dependency_type} {dependency}", package)
-        reraise_as(ConfigurationError(msg))
+        raise ConfigurationError(msg).with_traceback(e.__traceback__)
 
 
 class ConfigurationError(ValueError):