api_client = <rest_framework.test.APIClient object at 0x7f4ba8ebacc0>
archive_data = <swh.web.tests.conftest._ArchiveData object at 0x7f4ba8c1c5c0>
directory = '3688c09fb017133403e42b4542a339c6a551f2ae'
def test_api_raw_directory(api_client, archive_data, directory):
object_id = directory
object_ty = "dir"
url = reverse(
> "api-1-raw-object", url_args={"q": f"swh:1:{object_ty}:{object_id}"}
)
.tox/py3/lib/python3.7/site-packages/swh/web/tests/api/views/test_raw.py:52:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.tox/py3/lib/python3.7/site-packages/swh/web/common/utils.py:93: in reverse
viewname, urlconf=urlconf, kwargs=url_args, current_app=current_app
.tox/py3/lib/python3.7/site-packages/django/urls/base.py:90: in reverse
return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <URLResolver 'swh.web.urls' (None:None) '^/'>
lookup_view = 'api-1-raw-object', _prefix = '/', args = ()
kwargs = {'q': 'swh:1:dir:3688c09fb017133403e42b4542a339c6a551f2ae'}
possibilities = []
def _reverse_with_prefix(self, lookup_view, _prefix, *args, **kwargs):
if args and kwargs:
raise ValueError("Don't mix *args and **kwargs in call to reverse()!")
if not self._populated:
self._populate()
possibilities = self.reverse_dict.getlist(lookup_view)
for possibility, pattern, defaults, converters in possibilities:
for result, params in possibility:
if args:
if len(args) != len(params):
continue
candidate_subs = dict(zip(params, args))
else:
if set(kwargs).symmetric_difference(params).difference(defaults):
continue
if any(kwargs.get(k, v) != v for k, v in defaults.items()):
continue
candidate_subs = kwargs
# Convert the candidate subs to text using Converter.to_url().
text_candidate_subs = {}
for k, v in candidate_subs.items():
if k in converters:
text_candidate_subs[k] = converters[k].to_url(v)
else:
text_candidate_subs[k] = str(v)
# WSGI provides decoded URLs, without %xx escapes, and the URL
# resolver operates on such URLs. First substitute arguments
# without quoting to build a decoded URL and look for a match.
# Then, if we have a match, redo the substitution with quoted
# arguments in order to return a properly encoded URL.
candidate_pat = _prefix.replace('%', '%%') + result
if re.search('^%s%s' % (re.escape(_prefix), pattern), candidate_pat % text_candidate_subs):
# safe characters from `pchar` definition of RFC 3986
url = quote(candidate_pat % text_candidate_subs, safe=RFC3986_SUBDELIMS + '/~:@')
# Don't allow construction of scheme relative urls.
return escape_leading_slashes(url)
# lookup_view can be URL name or callable, but callables are not
# friendly in error messages.
m = getattr(lookup_view, '__module__', None)
n = getattr(lookup_view, '__name__', None)
if m is not None and n is not None:
lookup_view_s = "%s.%s" % (m, n)
else:
lookup_view_s = lookup_view
patterns = [pattern for (_, pattern, _, _) in possibilities]
if patterns:
if args:
arg_msg = "arguments '%s'" % (args,)
elif kwargs:
arg_msg = "keyword arguments '%s'" % (kwargs,)
else:
arg_msg = "no arguments"
msg = (
"Reverse for '%s' with %s not found. %d pattern(s) tried: %s" %
(lookup_view_s, arg_msg, len(patterns), patterns)
)
else:
msg = (
"Reverse for '%(view)s' not found. '%(view)s' is not "
"a valid view function or pattern name." % {'view': lookup_view_s}
)
> raise NoReverseMatch(msg)
E django.urls.exceptions.NoReverseMatch: Reverse for 'api-1-raw-object' not found. 'api-1-raw-object' is not a valid view function or pattern name.
.tox/py3/lib/python3.7/site-packages/django/urls/resolvers.py:677: NoReverseMatch
TEST RESULT
TEST RESULT
- Run At
- Apr 26 2022, 11:01 PM