Skip to content

Commit d750b22

Browse files
committed
fix(sentry#6931306293): resolve 'NoneType' object has no attribute 'engine' for url context reslover
1 parent 4218afe commit d750b22

File tree

2 files changed

+20
-4
lines changed

2 files changed

+20
-4
lines changed

pydotorg/context_processors.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ def url_name(request):
1010
try:
1111
match = resolve(request.path)
1212
except Resolver404:
13-
return {}
13+
return {'URL_NAMESPACE': None, 'URL_NAME': None}
1414
else:
1515
namespace, url_name_ = match.namespace, match.url_name
1616
if namespace:

pydotorg/tests/test_context_processors.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ def test_url_name(self):
1919
self.assertEqual({'URL_NAMESPACE': 'events', 'URL_NAME': 'events:calendar_list'}, context_processors.url_name(request))
2020

2121
request = self.factory.get('/getit-404/releases/3.3.3/not-an-actual-thing/')
22-
self.assertEqual({}, context_processors.url_name(request))
22+
self.assertEqual({'URL_NAMESPACE': None, 'URL_NAME': None}, context_processors.url_name(request))
2323

2424
request = self.factory.get('/getit-404/releases/3.3.3/\r\n/')
25-
self.assertEqual({}, context_processors.url_name(request))
25+
self.assertEqual({'URL_NAMESPACE': None, 'URL_NAME': None}, context_processors.url_name(request))
2626

2727
request = self.factory.get('/nothing/here/')
28-
self.assertEqual({}, context_processors.url_name(request))
28+
self.assertEqual({'URL_NAMESPACE': None, 'URL_NAME': None}, context_processors.url_name(request))
2929

3030
def test_blog_url(self):
3131
request = self.factory.get('/about/')
@@ -114,3 +114,19 @@ def test_user_nav_bar_links_for_anonymous_user(self):
114114
request.user = AnonymousUser()
115115

116116
self.assertEqual({"USER_NAV_BAR": {}}, context_processors.user_nav_bar_links(request))
117+
118+
def test_url_name_always_returns_keys(self):
119+
"""Ensure URL_NAME and URL_NAMESPACE are always present in context, even for 404s.
120+
Because it makes sentry unhappy: https://python-software-foundation.sentry.io/issues/6931306293/
121+
"""
122+
# test with a 404 path
123+
request = self.factory.get('/this-does-not-exist/')
124+
result = context_processors.url_name(request)
125+
126+
# kyes should always be present
127+
self.assertIn('URL_NAME', result)
128+
self.assertIn('URL_NAMESPACE', result)
129+
130+
# values should be None for unresolved URLs
131+
self.assertIsNone(result['URL_NAME'])
132+
self.assertIsNone(result['URL_NAMESPACE'])

0 commit comments

Comments
 (0)