Skip to content

Commit 7d6fb1b

Browse files
committed
Applied fixes from pre-commit
1 parent c45b3e8 commit 7d6fb1b

File tree

11 files changed

+60
-49
lines changed

11 files changed

+60
-49
lines changed

.readthedocs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
version: 2
22
formats: [htmlzip, pdf]
33
python:
4-
version: "3.7"
4+
version: "3.8"
55
install:
66
- method: pip
77
path: .

docs/conf.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#!/usr/bin/env python3
2-
import pkg_resources
2+
from importlib.metadata import get_version
33

4+
from packaging.version import parse
45

56
extensions = [
67
'sphinx.ext.autodoc',
@@ -17,7 +18,7 @@
1718
author = 'Alex Grönholm'
1819
copyright = '2017, ' + author
1920

20-
v = pkg_resources.get_distribution(project).parsed_version
21+
v = parse(get_version(project))
2122
version = v.base_version
2223
release = v.public
2324

@@ -33,11 +34,10 @@
3334
htmlhelp_basename = project.replace('-', '') + 'doc'
3435

3536
extlinks = {
36-
'github': ('https://github.com/asphalt-framework/%s/tree/%s/%%s' % (project, version),
37-
None)
37+
'github': (f'https://github.com/asphalt-framework/{project}/tree/{version}/%s', None)
3838
}
3939

4040
intersphinx_mapping = {
4141
'python': ('https://docs.python.org/3/', None),
42-
'asphalt': ('http://asphalt.readthedocs.io/en/latest/', None)
42+
'asphalt': ('https://asphalt.readthedocs.io/en/latest/', None)
4343
}

docs/extending.rst

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,4 +71,3 @@ And then during the startup of your component::
7171
async def start(ctx):
7272
...
7373
ctx.add_resource(MyExtrasProvider(), types=[ExtrasProvider])
74-

src/asphalt/exceptions/__init__.py

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
1+
from __future__ import annotations
2+
13
import inspect
24
import logging
35
import sys
4-
from typing import Union, Dict, Any # noqa: F401
6+
from typing import Any
57

6-
from asphalt.core import Context, qualified_name, merge_config
7-
from typeguard import check_argument_types
8+
from asphalt.core import Context, merge_config, qualified_name
89

9-
from asphalt.exceptions.api import ExtrasProvider
10+
from asphalt.exceptions.api import ExceptionReporter, ExtrasProvider
1011

1112
__all__ = ('report_exception',)
1213

1314
module_logger = logging.getLogger(__name__)
1415

1516

1617
def report_exception(ctx: Context, message: str, exception: BaseException = None, *,
17-
logger: Union[logging.Logger, str, bool] = True) -> None:
18+
logger: logging.Logger | str | bool = True) -> None:
1819
"""
1920
Report an exception to all exception reporters in the given context (and optionally log it too)
2021
@@ -27,35 +28,35 @@ def report_exception(ctx: Context, message: str, exception: BaseException = None
2728
the module where the exception was raised (or ``False`` to skip logging the exception)
2829
2930
"""
30-
from asphalt.exceptions.api import ExceptionReporter
31-
32-
assert check_argument_types()
33-
3431
if not exception:
3532
exception = sys.exc_info()[1]
3633
if not exception:
3734
raise ValueError('missing "exception" parameter and no current exception present in '
3835
'sys.exc_info()')
3936

37+
actual_logger: logging.Logger | None
4038
if isinstance(logger, bool):
41-
if logger:
42-
frame = exception.__traceback__.tb_frame
39+
tb = exception.__traceback__
40+
if logger and tb:
41+
frame = tb.tb_frame
4342
module = inspect.getmodule(frame)
44-
if module:
45-
logger = logging.getLogger(module.__spec__.name)
43+
if module and module.__spec__:
44+
actual_logger = logging.getLogger(module.__spec__.name)
4645
else: # pragma: no cover
47-
logger = logging.getLogger(frame.f_globals['__name__'])
46+
actual_logger = logging.getLogger(frame.f_globals['__name__'])
4847
else:
49-
logger = None
48+
actual_logger = None
5049
elif isinstance(logger, str):
51-
logger = logging.getLogger(logger)
50+
actual_logger = logging.getLogger(logger)
51+
else:
52+
actual_logger = logger
5253

53-
if logger:
54-
logger.error(message, exc_info=exception)
54+
if actual_logger:
55+
actual_logger.error(message, exc_info=exception)
5556

5657
extras_providers = ctx.get_resources(ExtrasProvider)
5758
for reporter in ctx.get_resources(ExceptionReporter):
58-
extra = {} # type: Dict[str, Any]
59+
extra: dict[str, Any] = {}
5960
for provider in extras_providers:
6061
try:
6162
new_extra = provider.get_extras(ctx, reporter)

src/asphalt/exceptions/api.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
from __future__ import annotations
2+
13
from abc import ABCMeta, abstractmethod
2-
from typing import Dict, Any, Optional
4+
from typing import Any
35

46
from asphalt.core import Context
57

@@ -14,7 +16,7 @@ class ExceptionReporter(metaclass=ABCMeta):
1416

1517
@abstractmethod
1618
def report_exception(self, ctx: Context, exception: BaseException, message: str,
17-
extra: Dict[str, Any]) -> None:
19+
extra: dict[str, Any]) -> None:
1820
"""
1921
Report the given exception to an external service.
2022
@@ -41,7 +43,7 @@ class ExtrasProvider(metaclass=ABCMeta):
4143
"""
4244

4345
@abstractmethod
44-
def get_extras(self, ctx: Context, reporter: ExceptionReporter) -> Optional[Dict[str, Any]]:
46+
def get_extras(self, ctx: Context, reporter: ExceptionReporter) -> dict[str, Any] | None:
4547
"""
4648
Return context specific extras for the given exception reporter backend.
4749

src/asphalt/exceptions/component.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1+
from __future__ import annotations
2+
13
import logging
4+
from asyncio import AbstractEventLoop
25
from functools import partial
3-
from typing import Any, Dict, List, Optional, Tuple
6+
from typing import Any, AsyncIterator, Dict, Optional
47

58
from asphalt.core import (
69
Component, Context, PluginContainer, context_teardown, merge_config, qualified_name)
@@ -13,7 +16,8 @@
1316
logger = logging.getLogger(__name__)
1417

1518

16-
def default_exception_handler(loop, context: Dict[str, Any], *, ctx: Context) -> None:
19+
def default_exception_handler(loop: AbstractEventLoop, context: dict[str, Any], *,
20+
ctx: Context) -> None:
1721
report_exception(ctx, context['message'], context['exception'])
1822

1923

@@ -55,15 +59,15 @@ def __init__(self, reporters: Dict[str, Optional[Dict[str, Any]]] = None,
5559
if not reporters:
5660
reporters = {'default': default_args}
5761

58-
self.reporters: List[Tuple] = []
62+
self.reporters: list[tuple] = []
5963
for resource_name, config in reporters.items():
60-
config = merge_config(default_args, config or {})
61-
type_ = config.pop('backend', resource_name)
62-
serializer = reporter_backends.create_object(type_, **config)
64+
merged_config = merge_config(default_args, config or {})
65+
type_ = merged_config.pop('backend', resource_name)
66+
serializer = reporter_backends.create_object(type_, **merged_config)
6367
self.reporters.append((resource_name, serializer))
6468

6569
@context_teardown
66-
async def start(self, ctx: Context) -> None:
70+
async def start(self, ctx: Context) -> AsyncIterator[None]:
6771
for resource_name, reporter in self.reporters:
6872
types = [ExceptionReporter, type(reporter)]
6973
ctx.add_resource(reporter, resource_name, types=types)

src/asphalt/exceptions/reporters/raygun.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
from typing import Dict, Any
1+
from __future__ import annotations
2+
3+
from typing import Any
24

35
from asphalt.core import Context
46
from raygun4py.raygunprovider import RaygunSender
@@ -27,5 +29,5 @@ def __init__(self, api_key: str, **config) -> None:
2729
self.client = RaygunSender(api_key, config)
2830

2931
def report_exception(self, ctx: Context, exception: BaseException, message: str,
30-
extra: Dict[str, Any]) -> None:
32+
extra: dict[str, Any]) -> None:
3133
self.client.send_exception(exception, **extra)

src/asphalt/exceptions/reporters/sentry.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
from __future__ import annotations
2+
13
import logging
2-
from typing import Dict, Any
4+
from typing import Any
35

46
from asphalt.core import Context
57
from raven import Client
@@ -41,6 +43,6 @@ def __init__(self, **client_args) -> None:
4143
self.client = Client(**client_args)
4244

4345
def report_exception(self, ctx: Context, exception: BaseException, message: str,
44-
extra: Dict[str, Any]) -> None:
46+
extra: dict[str, Any]) -> None:
4547
exc_info = type(exception), exception, exception.__traceback__
4648
self.client.captureException(exc_info, message=message, **extra)

tests/__init__.py

Whitespace-only changes.

tests/test_component.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
import logging
2-
31
import gc
2+
import logging
43
from asyncio import sleep
54
from collections import OrderedDict
65

76
import pytest
8-
97
from asphalt.core.context import Context
8+
109
from asphalt.exceptions.api import ExceptionReporter
1110
from asphalt.exceptions.component import ExceptionReporterComponent
1211

@@ -44,9 +43,9 @@ def report_exception(self, ctx: Context, exception: BaseException, message: str,
4443
assert len(messages) == 2
4544

4645
assert messages[0] == ('Configured exception reporter (dummy1; '
47-
'class=test_component.test_start.<locals>.DummyReporter)')
46+
'class=tests.test_component.test_start.<locals>.DummyReporter)')
4847
assert messages[1] == ('Configured exception reporter (dummy2; '
49-
'class=test_component.test_start.<locals>.DummyReporter2)')
48+
'class=tests.test_component.test_start.<locals>.DummyReporter2)')
5049

5150

5251
@pytest.mark.asyncio
@@ -56,6 +55,8 @@ async def test_default_exception_handler(event_loop):
5655
exception handler.
5756
5857
"""
58+
reported_exception = reported_message = None
59+
5960
async def fail_task():
6061
return 1 / 0
6162

@@ -66,7 +67,6 @@ def report_exception(self, ctx: Context, exception: BaseException, message: str,
6667
reported_exception = exception
6768
reported_message = message
6869

69-
reported_exception = reported_message = None
7070
async with Context() as ctx:
7171
component = ExceptionReporterComponent(backend=DummyExceptionReporter)
7272
await component.start(ctx)

0 commit comments

Comments
 (0)