Skip to content

Commit 6799ee4

Browse files
authored
Merge pull request #944 from ababic/issue/#992
Fix #922: Assume less about the signature of apps' `get_version()` in VersionsPanel
2 parents c998e96 + 577759e commit 6799ee4

File tree

2 files changed

+30
-13
lines changed

2 files changed

+30
-13
lines changed

debug_toolbar/panels/versions.py

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,20 +41,25 @@ def gen_app_versions(self):
4141
yield app.__name__, name, version
4242

4343
def get_app_version(self, app):
44-
if hasattr(app, 'get_version'):
45-
get_version = app.get_version
46-
if callable(get_version):
47-
version = get_version()
48-
else:
49-
version = get_version
50-
elif hasattr(app, 'VERSION'):
51-
version = app.VERSION
52-
elif hasattr(app, '__version__'):
53-
version = app.__version__
54-
else:
55-
return
44+
version = self.get_version_from_app(app)
5645
if isinstance(version, (list, tuple)):
5746
# We strip dots from the right because we do not want to show
5847
# trailing dots if there are empty elements in the list/tuple
5948
version = '.'.join(str(o) for o in version).rstrip('.')
6049
return version
50+
51+
def get_version_from_app(self, app):
52+
if hasattr(app, 'get_version'):
53+
get_version = app.get_version
54+
if callable(get_version):
55+
try:
56+
return get_version()
57+
except TypeError:
58+
pass
59+
else:
60+
return get_version
61+
if hasattr(app, 'VERSION'):
62+
return app.VERSION
63+
if hasattr(app, '__version__'):
64+
return app.__version__
65+
return

tests/panels/test_versions.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,26 @@ def get_version(self):
2525

2626
self.assertEqual(self.panel.get_app_version(FakeApp()), '1.2.3')
2727

28+
def test_incompatible_app_version_fn(self):
29+
30+
class FakeApp:
31+
32+
def get_version(self, some_other_arg):
33+
# This should be ignored by the get_version_from_app
34+
return version_info_t(0, 0, 0, '', '')
35+
36+
VERSION = version_info_t(1, 2, 3, '', '')
37+
38+
self.assertEqual(self.panel.get_app_version(FakeApp()), '1.2.3')
39+
2840
def test_app_version_from_VERSION(self):
2941

3042
class FakeApp:
3143
VERSION = version_info_t(1, 2, 3, '', '')
3244

3345
self.assertEqual(self.panel.get_app_version(FakeApp()), '1.2.3')
3446

35-
def test_app_version_from_underscode_version(self):
47+
def test_app_version_from_underscore_version(self):
3648

3749
class FakeApp:
3850
__version__ = version_info_t(1, 2, 3, '', '')

0 commit comments

Comments
 (0)