Пример #1
0
 def test_languages(self):
     r = Request({},
                 headers={'Accept-Language': 'en-gb;q=0.8, it;q=0.9, da'})
     r.language = 'it'
     assert r.language == 'it'
     bmatch = r.languages
     assert ['da', 'it'] == bmatch, bmatch
Пример #2
0
    def test_signed_cookie(self):
        resp = Response()
        resp.signed_cookie('key_name', 'VALUE', secret='123')
        cookie = resp.headers['Set-Cookie']

        r = Request({}, headers={'Cookie':cookie})
        value = r.signed_cookie('key_name', '123')
        assert value == 'VALUE', value

        r = Request({}, headers={'Cookie':cookie})
        value = r.signed_cookie('non_existing', '123')
        assert not value
Пример #3
0
    def __call__(self, environ, start_response):
        if 'repoze.tm.active' in environ: #pragma: no cover
            #Skip transaction manager if repoze.tm2 is enabled
            return self.app(environ, start_response)

        transaction_manager = transaction.manager
        total_attempts = self.attempts
        commit_veto = self.commit_veto
        started_response = {}

        def _start_response(status, headers, exc_info=None):
            started_response.update(status=status, headers=headers)
            return start_response(status, headers, exc_info)

        attempts_left = total_attempts
        while attempts_left:
            attempts_left -= 1

            try:
                log.debug('Attempts Left %d (%d total)', attempts_left, total_attempts)
                transaction_manager.begin()

                if total_attempts > 1:
                    Request(environ).make_body_seekable()

                t = transaction_manager.get()
                t.note(environ.get('PATH_INFO', ''))

                response_data = self.app(environ, _start_response)
                if transaction_manager.isDoomed():
                    log.debug('Transaction doomed')
                    raise AbortTransaction(response_data)

                if commit_veto is not None:
                    veto = commit_veto(environ, started_response['status'], started_response['headers'])
                    if veto:
                        log.debug('Transaction vetoed')
                        raise AbortTransaction(response_data)

                transaction_manager.commit()
                log.debug('Transaction committed!')
                return response_data
            except AbortTransaction as e:
                transaction_manager.abort()
                return e.response_data
            except:
                exc_info = sys.exc_info()
                log.debug('Error while running request, aborting transaction')
                try:
                    can_retry = transaction_manager._retryable(*exc_info[:-1])
                    transaction_manager.abort()
                    if (attempts_left <= 0) or (not can_retry):
                        reraise(*exc_info)
                finally:
                    del exc_info
Пример #4
0
    def test_signed_cookie(self):
        resp = Response()
        resp.signed_cookie('key_name', 'VALUE', secret='123')
        cookie = resp.headers['Set-Cookie']

        r = Request({}, headers={'Cookie': cookie})
        value = r.signed_cookie('key_name', '123')
        assert value == 'VALUE', value

        r = Request({}, headers={'Cookie': cookie})
        value = r.signed_cookie('non_existing', '123')
        assert not value
Пример #5
0
    def __call__(self, environ, start_response):
        status, headers, app_iter, exc_info = _call_wsgi_application(self.app, environ)
        if status[:3] in self.errors and \
            'tg.status_code_redirect' not in environ and self.error_path:
            # Create a response object
            environ['tg.original_response'] = Response(status=status, headerlist=headers, app_iter=app_iter)
            environ['tg.original_request'] = Request(environ)

            environ['pylons.original_response'] = environ['tg.original_response']
            environ['pylons.original_request'] = environ['tg.original_request']
            
            # Create a new environ to avoid touching the original request data
            new_environ = environ.copy()
            new_environ['PATH_INFO'] = self.error_path

            newstatus, headers, app_iter, exc_info = _call_wsgi_application(self.app, new_environ)
        start_response(status, headers, exc_info)
        return app_iter
Пример #6
0
 def test_match_accept(self):
     r = Request({}, headers={'Accept': 'text/html;q=0.5, foo/bar'})
     first_match = r.match_accept(['foo/bar'])
     assert first_match == 'foo/bar', first_match
Пример #7
0
 def test_languages(self):
     r = Request({}, headers={'Accept-Language': 'en-gb;q=0.8, it;q=0.9, da'})
     r.language = 'it'
     assert r.language == 'it'
     bmatch = r.languages
     assert ['da', 'it'] == bmatch, bmatch
Пример #8
0
 def test_language_fallback_already_there(self):
     r = Request({}, headers={'Accept-Language': 'en-gb;q=0.8, it, da'})
     bmatch = r.languages_best_match(fallback='it')
     assert ['it'] == bmatch, bmatch
Пример #9
0
 def test_language_fallback(self):
     r = Request({}, headers={'Accept-Language': 'en-gb;q=0.8, da'})
     bmatch = r.languages_best_match(fallback='it')
     assert ['da', 'en-gb', 'it'] == bmatch
Пример #10
0
    def setup_app_env(self, environ):
        """Setup Request, Response and TurboGears context objects.

        Is also in charge of pushing TurboGears context into the
        paste registry and detect test mode. Returns whenever
        the testmode is enabled or not and the TurboGears context.
        """
        conf = self.config

        # Setup the basic global objects
        req = Request(environ)
        req._fast_setattr('_language', conf['lang'])
        req._fast_setattr('_response_type', None)

        resp_options = self.resp_options
        response = Response(content_type=resp_options['content_type'],
                            charset=resp_options['charset'],
                            headers=resp_options['headers'])

        # Setup the translator object
        lang = conf['lang']
        translator = _get_translator(lang, tg_config=conf)

        if self.strict_tmpl_context:
            tmpl_context = ContextObj()
        else:
            tmpl_context = AttribSafeContextObj()

        app_globals = self.globals
        session = environ.get('beaker.session')
        cache = environ.get('beaker.cache')

        locals = RequestLocals()
        locals.response = response
        locals.request = req
        locals.app_globals = app_globals
        locals.config = conf
        locals.tmpl_context = tmpl_context
        locals.translator = translator
        locals.session = session
        locals.cache = cache

        if self.enable_routes:  #pragma: no cover
            url = environ.get('routes.url')
            locals.url = url

        environ['tg.locals'] = locals

        #Register Global objects
        registry = environ['paste.registry']
        registry.register(request_local.config, conf)
        registry.register(request_local.context, locals)

        if 'paste.testing_variables' in environ:
            testenv = environ['paste.testing_variables']
            testenv['req'] = req
            testenv['response'] = response
            testenv['tmpl_context'] = tmpl_context
            testenv['app_globals'] = self.globals
            testenv['config'] = conf
            testenv['session'] = locals.session
            testenv['cache'] = locals.cache
            return True, locals

        return False, locals
Пример #11
0
 def test_match_accept(self):
     r = Request({}, headers={'Accept': 'text/html;q=0.5, foo/bar'})
     first_match = r.match_accept(['foo/bar'])
     assert first_match == 'foo/bar', first_match
Пример #12
0
 def test_language_fallback_already_there(self):
     r = Request({}, headers={'Accept-Language': 'en-gb;q=0.8, it, da'})
     bmatch = r.languages_best_match(fallback='it')
     assert bmatch[-1] == 'it', bmatch
Пример #13
0
 def test_language_fallback(self):
     r = Request({}, headers={'Accept-Language': 'en-gb;q=0.8, da'})
     bmatch = r.languages_best_match(fallback='it')
     assert ['da', 'en-gb', 'it'] == bmatch
Пример #14
0
    def _setup_app_env(self, environ):
        """Setup Request, Response and TurboGears context objects.

        Is also in charge of pushing TurboGears context into the
        paste registry and detect test mode. Returns whenever
        the testmode is enabled or not and the TurboGears context.
        """
        conf = self.config
        testing = False

        # Setup the basic global objects
        req = Request(environ)
        req._fast_setattr('_language', self.lang)
        req._fast_setattr('_response_type', None)

        resp_options = self.resp_options
        response = Response(
            content_type=resp_options['content_type'],
            charset=resp_options['charset'],
            headers=resp_options['headers']
        )

        # Setup the translator object
        translator = _get_translator(self.lang, tg_config=conf)

        if self.strict_tmpl_context:
            tmpl_context = TemplateContext()
        else:
            tmpl_context = AttribSafeTemplateContext()

        app_globals = self.globals

        locals = RequestLocals()
        locals.response = response
        locals.request = req
        locals.app_globals = app_globals
        locals.config = conf
        locals.tmpl_context = tmpl_context
        locals.translator = translator
        locals.session = environ.get('beaker.session')  # Usually None, unless middleware in place
        locals.cache = environ.get('beaker.cache')  # Usually None, unless middleware in place

        environ['tg.locals'] = locals

        # Register Global objects
        registry = environ['paste.registry']
        registry.register(request_local.config, conf)
        registry.register(request_local.context, locals)

        if 'paste.testing_variables' in environ:
            testing = True
            testenv = environ['paste.testing_variables']
            testenv['req'] = req
            testenv['response'] = response
            testenv['tmpl_context'] = tmpl_context
            testenv['app_globals'] = self.globals
            testenv['config'] = conf
            testenv['session'] = locals.session
            testenv['cache'] = locals.cache

        return testing, locals, registry
Пример #15
0
 def __call__(self, environ, start_response):
     log.debug("Making request body seekable")
     Request(environ).make_body_seekable()
     return self._stream_response(self.app(environ, start_response))
Пример #16
0
 def test_language(self):
     r = Request({}, headers={'Accept-Language': 'en-gb;q=0.8, da'})
     bmatch = r.languages_best_match()
     assert ['da', 'en-gb'] == bmatch
Пример #17
0
    def setup_app_env(self, environ):
        """Setup Request, Response and TurboGears context objects.

        Is also in charge of pushing TurboGears context into the
        paste registry and detect test mode. Returns whenever
        the testmode is enabled or not and the TurboGears context.
        """
        conf = self.config

        # Setup the basic global objects
        req = Request(environ)
        req._fast_setattr('_language', conf['lang'])
        req._fast_setattr('_response_type', None)

        resp_options = self.resp_options
        response = Response(
            content_type=resp_options['content_type'],
            charset=resp_options['charset'],
            headers=resp_options['headers'])

        # Setup the translator object
        lang = conf['lang']
        translator = _get_translator(lang, tg_config=conf)

        if self.strict_tmpl_context:
            tmpl_context = ContextObj()
        else:
            tmpl_context = AttribSafeContextObj()

        app_globals = self.globals
        session = environ.get('beaker.session')
        cache = environ.get('beaker.cache')

        locals = RequestLocals()
        locals.response = response
        locals.request = req
        locals.app_globals = app_globals
        locals.config = conf
        locals.tmpl_context = tmpl_context
        locals.translator = translator
        locals.session = session
        locals.cache = cache

        if self.enable_routes: #pragma: no cover
            url = environ.get('routes.url')
            locals.url = url

        environ['tg.locals'] = locals

        #Register Global objects
        registry = environ['paste.registry']
        registry.register(request_local.config, conf)
        registry.register(request_local.context, locals)

        if 'paste.testing_variables' in environ:
            testenv = environ['paste.testing_variables']
            testenv['req'] = req
            testenv['response'] = response
            testenv['tmpl_context'] = tmpl_context
            testenv['app_globals'] = self.globals
            testenv['config'] = conf
            testenv['session'] = locals.session
            testenv['cache'] = locals.cache
            return True, locals

        return False, locals
Пример #18
0
 def test_language(self):
     r = Request({}, headers={'Accept-Language': 'en-gb;q=0.8, da'})
     bmatch = r.languages_best_match()
     assert ['da', 'en-gb'] == bmatch
Пример #19
0
    def _setup_app_env(self, environ):
        """Setup Request, Response and TurboGears context objects.

        Is also in charge of pushing TurboGears context into the
        paste registry and detect test mode. Returns whenever
        the testmode is enabled or not and the TurboGears context.
        """
        conf = self.config
        testing = False

        # Setup the basic global objects
        req = Request(environ)
        req._fast_setattr('_language', self.lang)
        req._fast_setattr('_response_type', None)

        resp_options = self.resp_options
        response = Response(content_type=resp_options['content_type'],
                            charset=resp_options['charset'],
                            headers=resp_options['headers'])

        # Setup the translator object
        translator = _get_translator(self.lang, tg_config=conf)

        if self.strict_tmpl_context:
            tmpl_context = TemplateContext()
        else:
            tmpl_context = AttribSafeTemplateContext()

        app_globals = self.globals

        locals = RequestLocals()
        locals.response = response
        locals.request = req
        locals.app_globals = app_globals
        locals.config = conf
        locals.tmpl_context = tmpl_context
        locals.translator = translator
        locals.session = environ.get(
            'beaker.session')  # Usually None, unless middleware in place
        locals.cache = environ.get(
            'beaker.cache')  # Usually None, unless middleware in place

        environ['tg.locals'] = locals

        # Register Global objects
        registry = environ['paste.registry']
        registry.register(request_local.config, conf)
        registry.register(request_local.context, locals)

        if 'paste.testing_variables' in environ:
            testing = True
            testenv = environ['paste.testing_variables']
            testenv['req'] = req
            testenv['response'] = response
            testenv['tmpl_context'] = tmpl_context
            testenv['app_globals'] = self.globals
            testenv['config'] = conf
            testenv['session'] = locals.session
            testenv['cache'] = locals.cache

        return testing, locals, registry
Пример #20
0
    def setup_app_env(self, environ, start_response):
        """Setup and register all the Pylons objects with the registry

        After creating all the global objects for use in the request,
        :meth:`~PylonsApp.register_globals` is called to register them
        in the environment.

        """
        conf = self.config

        # Setup the basic global objects
        req = Request(environ)
        req._fast_setattr('_language', conf['lang'])
        req._fast_setattr('_response_type', None)

        resp_options = self.resp_options
        response = Response(
            content_type=resp_options['content_type'],
            charset=resp_options['charset'],
            headers=resp_options['headers'])

        # Setup the translator object
        lang = conf['lang']
        translator = _get_translator(lang, tg_config=conf)

        if self.strict_tmpl_context:
            tmpl_context = ContextObj()
        else:
            tmpl_context = AttribSafeContextObj()

        app_globals = self.globals
        session = environ.get('beaker.session')
        cache = environ.get('beaker.cache')

        locals = RequestLocals()
        locals.response = response
        locals.request = req
        locals.app_globals = app_globals
        locals.config = conf
        locals.tmpl_context = tmpl_context
        locals.translator = translator
        locals.session = session
        locals.cache = cache

        if self.enable_routes: #pragma: no cover
            url = environ.get('routes.url')
            locals.url = url

        environ['tg.locals'] = locals

        #Register Global objects
        registry = environ['paste.registry']
        registry.register(request_local.config, conf)
        registry.register(request_local.context, locals)

        if 'paste.testing_variables' in environ:
            testenv = environ['paste.testing_variables']
            testenv['req'] = req
            testenv['response'] = response
            testenv['tmpl_context'] = tmpl_context
            testenv['app_globals'] = self.globals
            testenv['config'] = conf
            testenv['session'] = locals.session
            testenv['cache'] = locals.cache
            return True

        return False