Skip to content

Commit 7bfc823

Browse files
committed
Avoid using deprecated flask.__version__
1 parent 563063f commit 7bfc823

File tree

5 files changed

+40
-10
lines changed

5 files changed

+40
-10
lines changed

CHANGELOG.md

+7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
Changelog
22
=========
33

4+
## TBD
5+
6+
### Enhancements
7+
8+
* Avoid using deprecated `flask.__version__` attribute
9+
[#365](https://github.com/bugsnag/bugsnag-python/pull/365)
10+
411
## v4.6.0 (2023-09-05)
512

613
### Enhancements

bugsnag/flask/__init__.py

+10-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from bugsnag.wsgi import request_path
66
from bugsnag.legacy import _auto_leave_breadcrumb
77
from bugsnag.breadcrumbs import BreadcrumbType
8-
from bugsnag.utils import remove_query_from_url
8+
from bugsnag.utils import remove_query_from_url, get_package_version
99

1010

1111
__all__ = ('handle_exceptions',)
@@ -36,9 +36,16 @@ def add_flask_request_to_notification(event: bugsnag.Event):
3636

3737

3838
def handle_exceptions(app):
39-
middleware = bugsnag.configure().internal_middleware
40-
bugsnag.configure().runtime_versions['flask'] = flask.__version__
39+
configuration = bugsnag.configure()
40+
41+
version = get_package_version("flask")
42+
43+
if version is not None:
44+
configuration.runtime_versions["flask"] = version
45+
46+
middleware = configuration.internal_middleware
4147
middleware.before_notify(add_flask_request_to_notification)
48+
4249
flask.got_request_exception.connect(__log_exception, app)
4350
flask.request_started.connect(_on_request_started, app)
4451

bugsnag/utils.py

+17
Original file line numberDiff line numberDiff line change
@@ -461,3 +461,20 @@ def to_rfc3339(dt: datetime) -> str:
461461
int(dt.microsecond / 1000),
462462
_get_timezone_offset(dt)
463463
)
464+
465+
466+
def get_package_version(package_name: str) -> Optional[str]:
467+
try:
468+
from importlib import metadata
469+
470+
return metadata.version(package_name) # type: ignore
471+
except ImportError:
472+
try:
473+
import pkg_resources
474+
except ImportError:
475+
return None
476+
477+
try:
478+
return pkg_resources.get_distribution(package_name).version
479+
except pkg_resources.DistributionNotFound:
480+
return None

tests/integrations/test_flask.py

+5-7
Original file line numberDiff line numberDiff line change
@@ -261,16 +261,14 @@ def hello():
261261
handle_exceptions(app)
262262
app.test_client().get('/hello')
263263

264-
self.assertEqual(len(self.server.received), 1)
264+
assert self.server.sent_report_count == 1
265265

266266
payload = self.server.received[0]['json_body']
267-
device_data = payload['events'][0]['device']
267+
versions = payload['events'][0]['device']['runtimeVersions']
268268

269-
self.assertEquals(len(device_data['runtimeVersions']), 2)
270-
self.assertTrue(re.match(r'\d+\.\d+\.\d+',
271-
device_data['runtimeVersions']['python']))
272-
self.assertTrue(re.match(r'\d+\.\d+\.\d+',
273-
device_data['runtimeVersions']['flask']))
269+
assert re.match(r'^\d+\.\d+\.\d+$', versions['python'])
270+
assert re.match(r'^\d+\.\d+\.\d+$', versions['flask'])
271+
assert len(versions) == 2
274272

275273
def test_read_request_in_callback(self):
276274
def callback(event):

tox.ini

+1
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ deps=
6868
exceptiongroup: exceptiongroup
6969
lint: flake8
7070
lint: mypy
71+
lint: types-pkg_resources
7172
lint: types-requests
7273
lint: types-Flask
7374
lint: types-contextvars

0 commit comments

Comments
 (0)