Ejemplo n.º 1
0
    def subclass_view(self, request, path):
        """
        Forward any request to a custom view of the real admin.
        """
        ct_id = int(request.GET.get('ct_id', 0))
        if not ct_id:
            # See if the path started with an ID.
            try:
                pos = path.find('/')
                if pos == -1:
                    object_id = long(path)
                else:
                    object_id = long(path[0:pos])
            except ValueError:
                raise Http404("No ct_id parameter, unable to find admin subclass for path '{0}'.".format(path))

            ct_id = self.model.objects.values_list('polymorphic_ctype_id', flat=True).get(pk=object_id)

        real_admin = self._get_real_admin_by_ct(ct_id)
        resolver = RegexURLResolver('^', real_admin.urls)
        resolvermatch = resolver.resolve(path)  # May raise Resolver404
        if not resolvermatch:
            raise Http404("No match for path '{0}' in admin subclass.".format(path))

        return resolvermatch.func(request, *resolvermatch.args, **resolvermatch.kwargs)
Ejemplo n.º 2
0
 def register_url_resolver(self, app):
     # Install module URL resolver
     # @todo: Legacy django part?
     try:
         mod_resolver = self.urlresolvers[app.module, None]
     except KeyError:
         mod_resolver = []
         self.urlpatterns += [
             RegexURLResolver("^%s/" % app.module,
                              mod_resolver,
                              namespace=app.module)
         ]
         self.urlresolvers[app.module, None] = mod_resolver
     # Install application URL resolver
     try:
         app_resolver = self.urlresolvers[app.module, app.app]
     except KeyError:
         app_resolver = []
         mod_resolver += [
             RegexURLResolver("^%s/" % app.app,
                              app_resolver,
                              namespace=app.app)
         ]
         self.urlresolvers[app.module, app.app] = app_resolver
     return app_resolver
Ejemplo n.º 3
0
def make_url_resolver(regex, urlpatterns):
    try:
        # Django 2.0
        from django.urls.resolvers import RegexPattern
        return RegexURLResolver(RegexPattern(regex), urlpatterns)

    except ImportError:
        # Django < 2.0
        return RegexURLResolver(regex, urlpatterns)
Ejemplo n.º 4
0
def system_urls(request):
    urlconf = settings.ROOT_URLCONF
    urls_dict = RegexURLResolver(r'^/', urlconf).reverse_dict
    urls = {}

    for k in urls_dict:
        if type(k) == str:
            if str(k) in system.WEJUDGE_URLS_EXPORT_EXCEPT:
                continue
            v = urls_dict.getlist(k)
            urls[k] = v
    return JsonResponse(WeJudgeResult(urls).to_dict())
Ejemplo n.º 5
0
def url(regex, view, kwargs=None, name=None):
    if isinstance(view, (list, tuple)):
        # For include(...) processing.
        urlconf_module, app_name, namespace = view
        return RegexURLResolver(regex, urlconf_module, kwargs, app_name=app_name, namespace=namespace)
    elif callable(view):
        return RegexURLPattern(regex, view, kwargs, name)
    else:
        raise TypeError('view must be a callable or a list/tuple in the case of include().')
Ejemplo n.º 6
0
Archivo: tests.py Proyecto: wlpy/django
class ErrorHandlerResolutionTests(SimpleTestCase):
    """Tests for handler400, handler404 and handler500"""

    def setUp(self):
        urlconf = 'urlpatterns_reverse.urls_error_handlers'
        urlconf_callables = 'urlpatterns_reverse.urls_error_handlers_callables'
        self.resolver = RegexURLResolver(r'^$', urlconf)
        self.callable_resolver = RegexURLResolver(r'^$', urlconf_callables)

    def test_named_handlers(self):
        handler = (empty_view, {})
        self.assertEqual(self.resolver.resolve_error_handler(400), handler)
        self.assertEqual(self.resolver.resolve_error_handler(404), handler)
        self.assertEqual(self.resolver.resolve_error_handler(500), handler)

    def test_callable_handlers(self):
        handler = (empty_view, {})
        self.assertEqual(self.callable_resolver.resolve_error_handler(400), handler)
        self.assertEqual(self.callable_resolver.resolve_error_handler(404), handler)
        self.assertEqual(self.callable_resolver.resolve_error_handler(500), handler)
Ejemplo n.º 7
0
Archivo: tests.py Proyecto: wlpy/django
    def test_no_urls_exception(self):
        """
        RegexURLResolver should raise an exception when no urlpatterns exist.
        """
        resolver = RegexURLResolver(r'^$', settings.ROOT_URLCONF)

        with self.assertRaisesMessage(
            ImproperlyConfigured,
            "The included URLconf 'urlpatterns_reverse.no_urls' does not "
            "appear to have any patterns in it. If you see valid patterns in "
            "the file then the issue is probably caused by a circular import."
        ):
            getattr(resolver, 'url_patterns')
Ejemplo n.º 8
0
def url(regex, view, kwargs=None, name=None):
    # 看到了吧 如果第二个参数是元组 也就是我们使用include()的情况!
    if isinstance(view, (list, tuple)):
        # For include(...) processing.
        urlconf_module, app_name, namespace = view
        # 和上面那个locale什么什么一样
        # 我们也把这个名字很长的类放到后面单独开第二弹去讲
        return RegexURLResolver(regex, urlconf_module, kwargs, app_name=app_name, namespace=namespace)
    elif callable(view):
        # 如果view是一个可调用对象 
        # 也就是对应了视图函数
        # 不在话下 把函数和正则表达式对应起来!
        return RegexURLPattern(regex, view, kwargs, name)
    else:
        raise TypeError('view must be a callable or a list/tuple in the case of include().')
Ejemplo n.º 9
0
Archivo: tests.py Proyecto: wlpy/django
 def setUp(self):
     urlconf = 'urlpatterns_reverse.urls_error_handlers'
     urlconf_callables = 'urlpatterns_reverse.urls_error_handlers_callables'
     self.resolver = RegexURLResolver(r'^$', urlconf)
     self.callable_resolver = RegexURLResolver(r'^$', urlconf_callables)
Ejemplo n.º 10
0
 def resolve_path(path):
     return RegexURLResolver(
         r'^', 'corehq.apps.app_manager.download_urls').resolve(path)
Ejemplo n.º 11
0
 def setUp(self):
     urlconf = "urlpatterns_reverse.urls_error_handlers"
     urlconf_callables = "urlpatterns_reverse.urls_error_handlers_callables"
     self.resolver = RegexURLResolver(r"^$", urlconf)
     self.callable_resolver = RegexURLResolver(r"^$", urlconf_callables)