Exemple #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)
    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
        )
Exemple #3
0
def flatpage(request, url):
    """
    Copy of a `flatpage` view from `django.contrib.flatpages`. Use our `FlatPage` model instead of django one.
    """
    if not url.startswith('/'):
        url = '/' + url
    site_id = get_current_site(request).id
    try:
        f = get_object_or_404(FlatPage, url=url, sites=site_id)
    except Http404:
        try:
            if not url.endswith('/') and settings.APPEND_SLASH:
                url += '/'
                f = get_object_or_404(FlatPage, url=url, sites=site_id)
                return HttpResponsePermanentRedirect('%s/' % request.path)
            else:
                raise
        except Http404:
            # XXX: Temporary redirection of the old person URLs to the new URLs
            resolver = RegexURLResolver(r'^/', HUMAN_PATTERNS)
            match = resolver.resolve(url)
            if Person.objects.filter(is_active=True, human__nickname=match.kwargs['slug']).exists():
                return HttpResponsePermanentRedirect(urljoin('/people/person/', url[1:]))
            raise
    return render_flatpage(request, f)
 def _resolve(self, path):
     urlconf = settings.ROOT_URLCONF
     resolver=RegexURLResolver(r'^/', urlconf)
     view_function, func_args, func_kwargs = resolver.resolve(path)
     
     module_name = view_function.__module__
     func_name = view_function.func_name
     return module_name, func_name, func_args, func_kwargs
Exemple #5
0
    def route(self, request, path_components):
        if not self.live:
            raise Http404

        resolver = RegexURLResolver(r"^", self.app)
        path = request.path[len(self.url):]
        view, args, kwargs = resolver.resolve(path)

        self._view = view
        return (self, args, kwargs)
Exemple #6
0
    def route(self, request, path_components):
        if not self.live:
            raise Http404

        resolver = RegexURLResolver(r"^", self.APP_PREFIX + self.app)
        path = request.path[len(self.url):]
        view, args, kwargs = resolver.resolve(path)

        self._view = view
        return (self, args, kwargs)
Exemple #7
0
def _get_view_and_args(path, request):
    """
    Return the view at ``path`` and its named and positional arguments.
    
    Django will raise a Resolver404 exception if ``path`` doesn't exist.
    
    """
    # Let's use urlconf from request object, if available:
    urlconf = getattr(request, "urlconf", settings.ROOT_URLCONF)
    resolver = RegexURLResolver(r"^/", urlconf)
    return resolver.resolve(path)
class HandlerResolver(object):
    
    def __init__(self, conf):
        self.resolver = RegexURLResolver(r'^', conf)
        
    def resolve(self, update):
        try:
            resolver_match = self.resolver.resolve(update.message.text)
            return resolver_match
        except Resolver404:
            raise HandlerNotFound("No handler configured for  %s" % update.message.text)
Exemple #9
0
def _get_view_and_args(path, request):
    """
    Return the view at ``path`` and its named and positional arguments.
    
    Django will raise a Resolver404 exception if ``path`` doesn't exist.
    
    """
    # Let's use urlconf from request object, if available:
    urlconf = getattr(request, "urlconf", settings.ROOT_URLCONF)
    resolver = RegexURLResolver(r"^/", urlconf)
    return resolver.resolve(path)
Exemple #10
0
def thing_app(request, space_id, thing_id):
	space = get_object_or_404(Space, pk=space_id)

	template_module_name = 'template_2' # TODO hard coded for the mo
	module_name = '%s.%s.application' % (os.path.basename(settings.TEMPLATE_APPS_DIR), template_module_name)
	exec 'import %s as app_module' % module_name
	app = app_module.Application()
	resolver = RegexURLResolver(r'^/', app.urlpatterns)
	
	base_path = reverse('sim.views.thing_app', kwargs={ 'space_id':space_id, 'thing_id':thing_id })
	local_path = request.path[len(base_path) - 1:]
	view_function = resolver.resolve(local_path)
	return view_function[0](request)
Exemple #11
0
class MultiviewTests(unittest.TestCase):
    def setUp(self):
        # Patterns with a "catch all" view (thing) at the end.
        self.patterns_catchall = RegexURLResolver(
            '^/',
            patterns(
                '',
                multiurl(
                    url(r'^(\w+)/$', person, name='person'),
                    url(r'^(\w+)/$', place, name='place'),
                    url(r'^(\w+)/$', thing, name='thing'),
                )))

        # Patterns with no "catch all" - last view could still raise ContinueResolving.
        self.patterns_no_fallthrough = RegexURLResolver(
            '^/',
            patterns(
                '',
                multiurl(
                    url(r'^(\w+)/$', person, name='person'),
                    url(r'^(\w+)/$', place, name='place'),
                )))

    def test_resolve_match_first(self):
        m = self.patterns_catchall.resolve('/jane/')
        response = m.func(request=None, *m.args, **m.kwargs)
        self.assertEqual(response.content, b"Person: Jane Doe")

    def test_resolve_match_middle(self):
        m = self.patterns_catchall.resolve('/sf/')
        response = m.func(request=None, *m.args, **m.kwargs)
        self.assertEqual(response.content, b"Place: San Francisco")

    def test_resolve_match_last(self):
        m = self.patterns_catchall.resolve('/bacon/')
        response = m.func(request=None, *m.args, **m.kwargs)
        self.assertEqual(response.content, b"Thing: Bacon")

    def test_resolve_match_faillthrough(self):
        m = self.patterns_no_fallthrough.resolve('/bacon/')
        with self.assertRaises(Resolver404):
            m.func(request=None, *m.args, **m.kwargs)

    def test_no_match(self):
        with self.assertRaises(Resolver404):
            self.patterns_catchall.resolve('/eggs/and/bacon/')

    def test_reverse(self):
        self.assertEqual('joe/',
                         self.patterns_catchall.reverse('person', 'joe'))
        self.assertEqual('joe/',
                         self.patterns_catchall.reverse('place', 'joe'))
        self.assertEqual('joe/',
                         self.patterns_catchall.reverse('thing', 'joe'))
        with self.assertRaises(NoReverseMatch):
            self.patterns_catchall.reverse('person')
        with self.assertRaises(NoReverseMatch):
            self.patterns_catchall.reverse('argh', 'xyz')
Exemple #12
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:
            raise Http404("No ct_id parameter, unable to find admin subclass for path '{0}'.".format(path))

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

        return resolvermatch.func(request, *resolvermatch.args, **resolvermatch.kwargs)
Exemple #13
0
    def handle_message(self, message, bot_service):
        """
        Process incoming message generating a response to the sender.
        
        :param message: Generic message received from provider
        :param bot_service: Service Integration
        :type bot_service: IntegrationBot :class:`IntegrationBot <permabots.models.bot.IntegrationBot>`

        .. note:: Message content will be extracted by IntegrationBot
        """
        urlpatterns = []
        state_context = {}
        chat_state = bot_service.get_chat_state(message)
        for handler in caching.get_or_set_related(self, 'handlers', 'response',
                                                  'request', 'target_state'):
            if handler.enabled:
                source_states = caching.get_or_set_related(
                    handler, 'source_states')
                if chat_state:
                    state_context = chat_state.ctx
                if not source_states or (chat_state and chat_state.state
                                         in source_states):
                    urlpatterns.append(handler.urlpattern())

        resolver = RegexURLResolver(r'^', urlpatterns)
        try:
            resolver_match = resolver.resolve(
                bot_service.message_text(message))
        except Resolver404:
            logger.warning("Handler not found for %s" % message)
        else:
            callback, callback_args, callback_kwargs = resolver_match
            logger.debug("Calling callback:%s for message %s with %s" %
                         (callback, message, callback_kwargs))
            text, keyboard, target_state, context = callback(
                self,
                message=message,
                service=bot_service.identity,
                state_context=state_context,
                **callback_kwargs)
            if target_state:
                self.update_chat_state(bot_service, message, chat_state,
                                       target_state, context)
            keyboard = bot_service.build_keyboard(keyboard)
            bot_service.send_message(bot_service.get_chat_id(message), text,
                                     keyboard, message)
Exemple #14
0
 def url(self, value):
     """
     Return valid url or empty string.
     """
     resolver = RegexURLResolver(r'^/', settings.ROOT_URLCONF)
     checked = []
     try:
         while value not in checked:
             checked.append(value)
             if MACRO_RE.match(value):
                 if MACRO_RE.sub(MACRO_REPL, value):
                     raise ReplaceDone
                 else:
                     raise ReplaceFailed
             scheme, authority, path, query, fragment = urlsplit(value)
             if not scheme and not authority and not path:
                 raise ReplaceDone
             if (scheme and scheme.lower() not in self.check_schemes) or\
                 (authority and authority.lower() not in self.check_sites):
                 raise ReplaceDone
             try:
                 callback, callback_args, callback_kwargs = resolver.resolve(path)
             except Exception:
                 raise ReplaceFailed
             try:
                 try:
                     setting = self.views[callback]
                 except KeyError:
                     if self.check_unregistered:
                         data_from_view(path, query)
                     raise ReplaceDone
                 if setting.get('disable', False):
                     raise ReplaceFailed
                 obj = object_from_view(path, query, setting['context'])
                 path = macro(obj)
                 if setting.get('remove_query', False):
                     query = None
                 value = urljoin(None, None, path, query, fragment)
                 raise ReplaceDone
             except ReplaceRedirect, redirect:
                 value = redirect.target
                 scheme, authority, path, query, fragment = urlsplit(value)
                 if scheme == 'http' and authority == 'testserver':
                     value = urljoin(None, None, path, query, fragment)
         else:
Exemple #15
0
class MultiviewTests(unittest.TestCase):
    def setUp(self):
        # Patterns with a "catch all" view (thing) at the end.
        self.patterns_catchall = RegexURLResolver('^/', patterns('',
            multiurl(
                url(r'^(\w+)/$', person, name='person'),
                url(r'^(\w+)/$', place, name='place'),
                url(r'^(\w+)/$', thing, name='thing'),
            )
        ))

        # Patterns with no "catch all" - last view could still raise ContinueResolving.
        self.patterns_no_fallthrough = RegexURLResolver('^/', patterns('',
            multiurl(
                url(r'^(\w+)/$', person, name='person'),
                url(r'^(\w+)/$', place, name='place'),
            )
        ))

    def test_resolve_match_first(self):
        m = self.patterns_catchall.resolve('/jane/')
        response = m.func(request=None, *m.args, **m.kwargs)
        self.assertEqual(response.content, b"Person: Jane Doe")

    def test_resolve_match_middle(self):
        m = self.patterns_catchall.resolve('/sf/')
        response = m.func(request=None, *m.args, **m.kwargs)
        self.assertEqual(response.content, b"Place: San Francisco")

    def test_resolve_match_last(self):
        m = self.patterns_catchall.resolve('/bacon/')
        response = m.func(request=None, *m.args, **m.kwargs)
        self.assertEqual(response.content, b"Thing: Bacon")

    def test_resolve_match_faillthrough(self):
        m = self.patterns_no_fallthrough.resolve('/bacon/')
        with self.assertRaises(Resolver404):
            m.func(request=None, *m.args, **m.kwargs)

    def test_no_match(self):
        with self.assertRaises(Resolver404):
            self.patterns_catchall.resolve('/eggs/and/bacon/')

    def test_reverse(self):
        self.assertEqual('joe/', self.patterns_catchall.reverse('person', 'joe'))
        self.assertEqual('joe/', self.patterns_catchall.reverse('place', 'joe'))
        self.assertEqual('joe/', self.patterns_catchall.reverse('thing', 'joe'))
        with self.assertRaises(NoReverseMatch):
            self.patterns_catchall.reverse('person')
        with self.assertRaises(NoReverseMatch):
            self.patterns_catchall.reverse('argh', 'xyz')
Exemple #16
0
 def widget_view(self, request, app_label, widget_name, path):
     name = '%s.%s' % (app_label, widget_name)
     if name not in self._registry:
         raise Http404
     state = DashboardState.objects.get_for_user(request.user)
     data = json.loads(state.data)
     names = []
     for column in data['columns']:
         for row in column:
             names.append(row['name'])
     if name not in names:
         raise Http404
     widget = self._registry[name]
     urls = widget.urls
     if urls is None:
         raise Http404
     resolver = RegexURLResolver(r'^', _URLConfModule(urls))
     callback, args, kwargs = resolver.resolve(path)
     return callback(request, *args, **kwargs)
Exemple #17
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:
            raise Http404(
                "No ct_id parameter, unable to find admin subclass for path '{0}'."
                .format(path))

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

        return resolvermatch.func(request, *resolvermatch.args,
                                  **resolvermatch.kwargs)
    def subclass_view(self, request, path):
        type = int(request.GET.get('type', 0))
        if not type:
            try:
                pos = path.find('/')
                if pos == -1:
                    object_id = long(path)
                else:
                    object_id = long(path[0:pos])
            except ValueError:
                raise Http404("No type parameter, unable to find admin subclass for path '{0}'.".format(path))
            type = self._get_type_by_object_id(object_id)

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

        return resolvermatch.func(request, *resolvermatch.args, **resolvermatch.kwargs)
Exemple #19
0
    def handle_message(self, message, bot_service):
        """
        Process incoming message generating a response to the sender.
        
        :param message: Generic message received from provider
        :param bot_service: Service Integration
        :type bot_service: IntegrationBot :class:`IntegrationBot <permabots.models.bot.IntegrationBot>`

        .. note:: Message content will be extracted by IntegrationBot
        """
        urlpatterns = []
        state_context = {}
        chat_state = bot_service.get_chat_state(message)
        for handler in caching.get_or_set_related(self, 'handlers', 'response', 'request', 'target_state'):
            if handler.enabled:
                source_states = caching.get_or_set_related(handler, 'source_states')
                if chat_state:
                    state_context = chat_state.ctx
                if not source_states or (chat_state and chat_state.state in source_states):
                        urlpatterns.append(handler.urlpattern())
                    
        resolver = RegexURLResolver(r'^', urlpatterns)
        try:
            resolver_match = resolver.resolve(bot_service.message_text(message))
        except Resolver404:
            logger.warning("Handler not found for %s" % message)
        else:
            callback, callback_args, callback_kwargs = resolver_match
            logger.debug("Calling callback:%s for message %s with %s" % 
                         (callback, message, callback_kwargs))
            text, keyboard, target_state, context = callback(self, message=message, service=bot_service.identity, 
                                                             state_context=state_context, **callback_kwargs)
            if target_state:
                self.update_chat_state(bot_service, message, chat_state, target_state, context)
            keyboard = bot_service.build_keyboard(keyboard)
            bot_service.send_message(bot_service.get_chat_id(message), text, keyboard, message)
Exemple #20
0
def lookup_root(urlconf):
    urlconf_module, app_name, namespace = include(urlconf)
    resolver = RegexURLResolver('^', urlconf_module, app_name=app_name, namespace=namespace)
    return resolver.resolve('').func
Exemple #21
0
 def resolve_subpage(self, path):
     """
     This finds a view method/function from a URL path.
     """
     resolver = RegexURLResolver(r'^', self.get_subpage_urls())
     return resolver.resolve(path)
Exemple #22
0
 def resolve_view(self, request):
     urls = self.function_or_urlconf
     resolver = RegexURLResolver(r"^/", urls)
     return resolver.resolve(request.path_info)
Exemple #23
0
 def test_no_prefix_view_class(self):
     resolver = RegexURLResolver('/', no_prefix_patterns)
     view = resolver.resolve('/2/')[0]
     response = view(None)
     self.assertEqual(response, 'Success!')
Exemple #24
0
 def test_no__patterns(self):
     resolver = RegexURLResolver('/', no_url_patterns)
     view = resolver.resolve('/1/')[0]
     response = view(None)
     self.assertEqual(response, 'Success!')
Exemple #25
0
 def test_prefix_string(self):
     resolver = RegexURLResolver('/', prefix_patterns)
     view = resolver.resolve('/3/')[0]
     response = view(None)
     self.assertEqual(response, 'Success!')
def process_rest_request(message, urls=settings.ROOT_URLCONF):
    try:
        data = json.loads(message.content['text'])
    except:
        logger.debug("Error parsing JSON")
        return False

    if 'datatype' not in data or data['datatype'] != 'request':
        return False

    for i in ['url', 'method']:
        if i not in data:
            return False

    def return_403(reason='Access denied'):
        message.reply_channel.send({
            "text": json.dumps({
                'status_code': 403,
                'reason': reason
            })
        })
        return False

    def return_404(reason='Not found'):
        message.reply_channel.send({
            "text": json.dumps({
                'status_code': 404,
                'reason': reason
            })
        })
        return False

    def return_500(reason='Internal server error'):
        message.reply_channel.send({
            "text": json.dumps({
                'status_code': 500,
                'reason': reason
            })
        })
        return False

    try:
        resolver = RegexURLResolver(r'^/', urls)
    except:
        logger.exception("Something went wrong when constructing the urlresolver")
        return return_500()

    split_url = urlsplit(data['url'])
    try:
        callback, callback_args, callback_kwargs = resolver.resolve(split_url.path)
    except:
        logger.exception("No matches found for url %s", data['url'])
        return return_404()

    request = ChannelRestRequest(message, method=data['method'].upper())

    request.path = split_url.path

    if 'meta' in data:
        request.META = data['meta']

    if 'body' in data:
        body_data = data['body'].encode('utf-8')
        request._stream = six.BytesIO(body_data)
        request.META['CONTENT_LENGTH'] = len(body_data)

    request.META['QUERY_PARAMS'] = split_url.query
    request.fix_meta()

    if split_url.query:
        request.GET.update(dict(parse_qsl(split_url.query)))

    response = None

    request_middleware = []
    for middleware_path in settings.MIDDLEWARE_CLASSES:
        if not middleware_path.startswith('django'):
            mw_class = import_string(middleware_path)
            try:
                mw_instance = mw_class()
                if hasattr(mw_instance, 'process_request'):
                    request_middleware.append(mw_instance.process_request)
            except MiddlewareNotUsed as exc:
                if settings.DEBUG:
                    if six.text_type(exc):
                        logger.debug('MiddlewareNotUsed(%r): %s', middleware_path, exc)
                    else:
                        logger.debug('MiddlewareNotUsed: %r', middleware_path)
                continue

    try:
        for middleware_method in request_middleware:
            response = middleware_method(request)
            if response:
                break

        response = callback(request, *callback_args, **callback_kwargs)
    except:
        logger.exception("Something went wrong procesing the view.")
        return return_500()

    response.render()
    response_packet = {
        'datatype': data['datatype'],
        'meta': dict(response.items()),
        'status_code': response.status_code,
    }
    if response.content:
        response_packet['body'] = response.content.decode('utf-8')

    if hasattr(response, 'status_text'):
        response_packet['reason'] = response.status_text

    if 'message_id' in data:
        response_packet['message_id'] = data['message_id']

    message.reply_channel.send({"text": json.dumps(response_packet)})
    return True
Exemple #27
0
 def resolve_subpage(self, path):
     """
     This finds a view method/function from a URL path.
     """
     resolver = RegexURLResolver(r'^', self.get_subpage_urls())
     return resolver.resolve(path)
Exemple #28
0
'''

def test_d(req):
    return 'this is child url test page.'

child_urlpatterns = [
    url(r'^d/$', test_d),
]


urlpatterns = [
    url(r'^$', v_index), #url 创建RegexURLResolver对象
    url(r'^blogs/$', v_blogs),
    url(r'^news/$', v_news),
    url(r'^test/', include(child_urlpatterns)),
]
resolvs = RegexURLResolver(r'^/', urlpatterns)
'''
# RegexURLResolver 的第二个参数同url的第二个参数 ,会根据类型进行不同处理,
# 当第二个参数类型是字符串时,会先进行导出之后,在提取urlpatterns属性
resolvs = RegexURLResolver(r'^/', 'app.root_url')

urls = ['/news/', '/blogs/', '/whoami/', '/', '/test/d/', 'a/b/c/d']
for url in urls:
    try:
        match = resolvs.resolve(url)
        print('match {}'.format(url))
        print(match.func(None))
    except Exception as e:
        print('not match {}'.format(url))
def process_rest_request(message, urls=settings.ROOT_URLCONF):
    try:
        data = json.loads(message.content['text'])
    except:
        logger.debug("Error parsing JSON")
        return False

    if 'datatype' not in data or data['datatype'] != 'request':
        return False

    for i in ['url', 'method']:
        if i not in data:
            return False

    def return_403(reason='Access denied'):
        message.reply_channel.send(
            {"text": json.dumps({
                'status_code': 403,
                'reason': reason
            })})
        return False

    def return_404(reason='Not found'):
        message.reply_channel.send(
            {"text": json.dumps({
                'status_code': 404,
                'reason': reason
            })})
        return False

    def return_500(reason='Internal server error'):
        message.reply_channel.send(
            {"text": json.dumps({
                'status_code': 500,
                'reason': reason
            })})
        return False

    try:
        resolver = RegexURLResolver(r'^/', urls)
    except:
        logger.exception(
            "Something went wrong when constructing the urlresolver")
        return return_500()

    split_url = urlsplit(data['url'])
    try:
        callback, callback_args, callback_kwargs = resolver.resolve(
            split_url.path)
    except:
        logger.exception("No matches found for url %s", data['url'])
        return return_404()

    request = ChannelRestRequest(message, method=data['method'].upper())

    request.path = split_url.path

    if 'meta' in data:
        request.META = data['meta']

    if 'body' in data:
        body_data = data['body'].encode('utf-8')
        request._stream = six.BytesIO(body_data)
        request.META['CONTENT_LENGTH'] = len(body_data)

    request.META['QUERY_PARAMS'] = split_url.query
    request.fix_meta()

    if split_url.query:
        request.GET.update(dict(parse_qsl(split_url.query)))

    response = None

    request_middleware = []
    for middleware_path in settings.MIDDLEWARE_CLASSES:
        if not middleware_path.startswith('django'):
            mw_class = import_string(middleware_path)
            try:
                mw_instance = mw_class()
                if hasattr(mw_instance, 'process_request'):
                    request_middleware.append(mw_instance.process_request)
            except MiddlewareNotUsed as exc:
                if settings.DEBUG:
                    if six.text_type(exc):
                        logger.debug('MiddlewareNotUsed(%r): %s',
                                     middleware_path, exc)
                    else:
                        logger.debug('MiddlewareNotUsed: %r', middleware_path)
                continue

    try:
        for middleware_method in request_middleware:
            response = middleware_method(request)
            if response:
                break

        response = callback(request, *callback_args, **callback_kwargs)
    except:
        logger.exception("Something went wrong procesing the view.")
        return return_500()

    response.render()
    response_packet = {
        'datatype': data['datatype'],
        'meta': dict(response.items()),
        'status_code': response.status_code,
    }
    if response.content:
        response_packet['body'] = response.content.decode('utf-8')

    if hasattr(response, 'status_text'):
        response_packet['reason'] = response.status_text

    if 'message_id' in data:
        response_packet['message_id'] = data['message_id']

    message.reply_channel.send({"text": json.dumps(response_packet)})
    return True
 def resolve(self, *args, **kwargs):
     result = RegexURLResolver.resolve(self, *args, **kwargs)
     if result:
         result = list(result)
         result[0] = self._decorate_with(result[0])
     return result
Exemple #31
0
 def resolve_view(self, request):
     urls = self.function_or_urlconf
     resolver = RegexURLResolver(r"^/", urls)
     return resolver.resolve(request.path_info)