示例#1
0
    def test_after_environment_created_using_string(self):
        app = Tipfy(
            config={
                'tipfyext.jinja2': {
                    'after_environment_created':
                    'resources.jinja2_after_environment_created.after_creation'
                }
            })
        local.request = Request.from_values()
        local.request.app = app
        handler = RequestHandler(local.request)
        jinja2 = Jinja2(app)

        template = jinja2.environment.from_string("""{{ 'Hey'|ho }}""")
        self.assertEqual(template.render(), 'Hey, Ho!')
示例#2
0
    def test_after_environment_created(self):
        def after_creation(environment):
            environment.filters['ho'] = lambda x: x + ', Ho!'

        app = Tipfy(config={
            'tipfyext.jinja2': {
                'after_environment_created': after_creation
            }
        })
        request = Request.from_values()
        local.current_handler = handler = RequestHandler(app, request)
        jinja2 = Jinja2(app)

        template = jinja2.environment.from_string("""{{ 'Hey'|ho }}""")
        self.assertEqual(template.render(), 'Hey, Ho!')
示例#3
0
    def test_render_template(self):
        app = Tipfy(
            config={'tipfyext.jinja2': {
                'templates_dir': templates_dir
            }})
        local.request = Request.from_values()
        local.request.app = app
        handler = RequestHandler(local.request)
        jinja2 = Jinja2(app)

        message = 'Hello, World!'
        res = jinja2.render_template(handler,
                                     'template1.html',
                                     message=message)
        self.assertEqual(res, message)
示例#4
0
    def test_request_handler_get_config(self):
        app = Tipfy()
        with app.get_test_context() as request:
            handler = RequestHandler(request)

            self.assertEqual(handler.get_config('resources.i18n', 'locale'),
                             'en_US')
            self.assertEqual(
                handler.get_config('resources.i18n', 'locale', 'foo'), 'en_US')
            self.assertEqual(
                handler.get_config('resources.i18n'), {
                    'locale': 'en_US',
                    'timezone': 'America/Chicago',
                    'required': REQUIRED_VALUE,
                })
示例#5
0
    def test_jinja2_mixin_render_template(self):
        class MyHandler(RequestHandler, Jinja2Mixin):
            pass

        app = Tipfy(
            config={'tipfyext.jinja2': {
                'templates_dir': templates_dir
            }})
        local.request = Request.from_values()
        local.request.app = app
        handler = MyHandler(local.request)
        jinja2 = Jinja2(app)
        message = 'Hello, World!'

        response = handler.render_template('template1.html', message=message)
        self.assertEqual(response, message)
示例#6
0
    def test_render_response(self):
        app = Tipfy(
            config={'tipfyext.jinja2': {
                'templates_dir': templates_dir
            }})
        request = Request.from_values()
        local.current_handler = handler = RequestHandler(app, request)
        jinja2 = Jinja2(app)

        message = 'Hello, World!'
        response = jinja2.render_response(local.current_handler,
                                          'template1.html',
                                          message=message)
        self.assertEqual(isinstance(response, Response), True)
        self.assertEqual(response.mimetype, 'text/html')
        self.assertEqual(response.data, message)
示例#7
0
    def test_handle_exception(self):
        app = Tipfy([
            Rule('/', handler=AllMethodsHandler, name='home'),
            Rule('/broken', handler=BrokenHandler, name='broken'),
            Rule('/broken-but-fixed',
                 handler=BrokenButFixedHandler,
                 name='broken-but-fixed'),
        ],
                    debug=False)
        client = app.get_test_client()

        response = client.get('/broken')
        self.assertEqual(response.status_code, 500)

        response = client.get('/broken-but-fixed')
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data, 'That was close!')
示例#8
0
    def test_handle_exception_3(self):
        class MyMiddleware(object):
            def handle_exception(self, handler, exception):
                pass

        class MyHandler(RequestHandler):
            middleware = [MyMiddleware()]

            def get(self, **kwargs):
                raise ValueError()

        app = Tipfy(rules=[
            Rule('/', name='home', handler=MyHandler),
        ])
        client = app.get_test_client()
        response = client.get('/')
        self.assertEqual(response.status_code, 500)
示例#9
0
    def test_200(self):
        app = Tipfy(rules=[Rule('/', name='home', handler=AllMethodsHandler)])
        client = app.get_test_client()

        for method in app.allowed_methods:
            response = client.open('/', method=method)
            self.assertEqual(response.status_code, 200, method)
            if method == 'HEAD':
                self.assertEqual(response.data, '')
            else:
                self.assertEqual(response.data, 'Method: %s' % method)

        # App Engine mode.
        self._set_dev_server_flag(True)
        response = client.get('/')
        self.assertEqual(response.status_code, 200)
        self.assertEqual(response.data, 'Method: GET')
示例#10
0
    def test_mako_mixin_render_response(self):
        class MyHandler(RequestHandler, MakoMixin):
            def __init__(self, app, request):
                self.app = app
                self.request = request
                self.context = {}

        app = Tipfy(config={'tipfyext.mako': {'templates_dir': templates_dir}})
        request = Request.from_values()
        local.current_handler = handler = MyHandler(app, request)
        mako = Mako(app)
        message = 'Hello, World!'

        response = handler.render_response('template1.html', message=message)
        self.assertEqual(isinstance(response, Response), True)
        self.assertEqual(response.mimetype, 'text/html')
        self.assertEqual(response.data, message + '\n')
示例#11
0
    def test_regex_converter(self):
        class TestHandler(RequestHandler):
            def get(self, **kwargs):
                return Response(kwargs.get('path'))

        app = Tipfy([
            Rule('/<regex(".*"):path>', name='home', handler=TestHandler),
        ])
        client = app.get_test_client()

        response = client.get('/foo')
        self.assertEqual(response.data, 'foo')

        response = client.get('/foo/bar')
        self.assertEqual(response.data, 'foo/bar')

        response = client.get('/foo/bar/baz')
        self.assertEqual(response.data, 'foo/bar/baz')
示例#12
0
    def test_jinja2_mixin_render_template(self):
        class MyHandler(RequestHandler, Jinja2Mixin):
            def __init__(self, app, request):
                self.app = app
                self.request = request
                self.context = {}

        app = Tipfy(
            config={'tipfyext.jinja2': {
                'templates_dir': templates_dir
            }})
        request = Request.from_values()
        local.current_handler = handler = MyHandler(app, request)
        jinja2 = Jinja2(app)
        message = 'Hello, World!'

        response = handler.render_template('template1.html', message=message)
        self.assertEqual(response, message)
示例#13
0
    def test_store_instances(self):
        from tipfy.appengine.auth import AuthStore
        from tipfy.i18n import I18nStore
        from tipfy.sessions import SecureCookieSession

        app = Tipfy(rules=[
            Rule('/', name='home', handler=AllMethodsHandler),
        ],
                    config={
                        'tipfy.sessions': {
                            'secret_key': 'secret',
                        },
                    })
        with app.get_test_handler('/') as handler:
            self.assertEqual(isinstance(handler.session, SecureCookieSession),
                             True)
            self.assertEqual(isinstance(handler.auth, AuthStore), True)
            self.assertEqual(isinstance(handler.i18n, I18nStore), True)
示例#14
0
    def test_function_handler(self):
        rules = [
            HandlerPrefix('resources.alternative_routing.', [
                Rule('/', name='home', handler='home'),
                Rule('/foo', name='home/foo', handler='foo'),
                Rule('/bar', name='home/bar', handler='bar'),
            ])
        ]

        app = Tipfy(rules)
        client = app.get_test_client()

        response = client.get('/')
        self.assertEqual(response.data, 'home')
        response = client.get('/foo')
        self.assertEqual(response.data, 'foo')
        response = client.get('/bar')
        self.assertEqual(response.data, 'bar')
示例#15
0
    def test_before_dispatch(self):
        res = 'Intercepted!'

        class MyMiddleware(object):
            def before_dispatch(self, handler):
                return Response(res)

        class MyHandler(RequestHandler):
            middleware = [MyMiddleware()]

            def get(self, **kwargs):
                return Response('default')

        app = Tipfy(rules=[
            Rule('/', name='home', handler=MyHandler),
        ])
        client = app.get_test_client()
        response = client.get('/')
        self.assertEqual(response.data, res)
示例#16
0
    def test_dev_run(self):
        self._set_dev_server_flag(True)

        os.environ['APPLICATION_ID'] = 'my-app'
        os.environ['SERVER_SOFTWARE'] = 'Development'
        os.environ['SERVER_NAME'] = 'localhost'
        os.environ['SERVER_PORT'] = '8080'
        os.environ['REQUEST_METHOD'] = 'GET'

        app = Tipfy(rules=[
            Rule('/', name='home', handler=AllMethodsHandler),
        ],
                    debug=True)

        app.run()
        self.assertEqual(
            sys.stdout.getvalue(),
            'Status: 200 OK\r\nContent-Type: text/html; charset=utf-8\r\nContent-Length: 11\r\n\r\nMethod: GET'
        )
示例#17
0
    def test_handle_exception(self):
        res = 'Catched!'

        class MyMiddleware(object):
            def handle_exception(self, handler, exception):
                return Response(res)

        class MyHandler(RequestHandler):
            middleware = [MyMiddleware()]

            def get(self, **kwargs):
                raise ValueError()

        app = Tipfy(rules=[
            Rule('/', name='home', handler=MyHandler),
        ])
        client = app.get_test_client()
        response = client.get('/')
        self.assertEqual(response.data, res)
示例#18
0
    def test_render_response_force_compiled(self):
        app = Tipfy(config={
            'tipfyext.jinja2': {
                'templates_compiled_target': templates_compiled_target,
                'force_use_compiled': True,
            }
        },
                    debug=False)
        request = Request.from_values()
        local.current_handler = handler = RequestHandler(app, request)
        jinja2 = Jinja2(app)

        message = 'Hello, World!'
        response = jinja2.render_response(local.current_handler,
                                          'template1.html',
                                          message=message)
        self.assertEqual(isinstance(response, Response), True)
        self.assertEqual(response.mimetype, 'text/html')
        self.assertEqual(response.data, message)
示例#19
0
    def test_handler_prefix(self):
        rules = [
            HandlerPrefix('resources.handlers.', [
                Rule('/', name='home', handler='HomeHandler'),
                Rule('/defaults',
                     name='defaults',
                     handler='HandlerWithRuleDefaults',
                     defaults={'foo': 'bar'}),
            ])
        ]

        app = Tipfy(rules)
        client = app.get_test_client()

        response = client.get('/')
        self.assertEqual(response.data, 'Hello, World!')

        response = client.get('/defaults')
        self.assertEqual(response.data, 'bar')
示例#20
0
    def test_url_for(self):
        class DummyHandler(RequestHandler):
            def get(self, **kwargs):
                return ''

        rules = [
            NamePrefix('company-', [
                Rule('/', name='home', handler=DummyHandler),
                Rule('/about', name='about', handler=DummyHandler),
                Rule('/contact', name='contact', handler=DummyHandler),
            ]),
        ]

        app = Tipfy(rules)

        with app.get_test_handler('/') as handler:
            self.assertEqual(url_for('company-home'), '/')
            self.assertEqual(url_for('company-about'), '/about')
            self.assertEqual(url_for('company-contact'), '/contact')
示例#21
0
    def test_abort(self):
        class HandlerWithAbort(RequestHandler):
            def get(self, **kwargs):
                self.abort(kwargs.get('status_code'))

        app = Tipfy(rules=[
            Rule('/<int:status_code>',
                 name='abort-me',
                 handler=HandlerWithAbort),
        ])
        client = app.get_test_client()

        response = client.get('/400')
        self.assertEqual(response.status_code, 400)

        response = client.get('/403')
        self.assertEqual(response.status_code, 403)

        response = client.get('/404')
        self.assertEqual(response.status_code, 404)
示例#22
0
def get_app():
    return Tipfy(rules=[
        Rule('/', name='home', handler=HomeHandler),
        Rule('/people/<string:username>',
             name='profile',
             handler=ProfileHandler),
        Rule('/redirect_to/', name='redirect_to', handler=RedirectToHandler),
        Rule('/redirect_to/<string:username>',
             name='redirect_to',
             handler=RedirectToHandler),
        Rule('/redirect_to_301/',
             name='redirect_to',
             handler=RedirectTo301Handler),
        Rule('/redirect_to_301/<string:username>',
             name='redirect_to',
             handler=RedirectTo301Handler),
        Rule('/redirect_to_invalid',
             name='redirect_to_invalid',
             handler=RedirectToInvalidCodeHandler),
    ])
示例#23
0
    def test_url_for(self):
        app = Tipfy(rules=[
            Rule('/', name='home', handler=AllMethodsHandler),
            Rule('/about', name='about', handler='handlers.About'),
            Rule('/contact', name='contact', handler='handlers.Contact'),
        ])
        with app.get_test_handler('/') as handler:
            self.assertEqual(handler.url_for('home'), '/')
            self.assertEqual(handler.url_for('about'), '/about')
            self.assertEqual(handler.url_for('contact'), '/contact')

            # Extras
            self.assertEqual(handler.url_for('about', _anchor='history'),
                             '/about#history')
            self.assertEqual(handler.url_for('about', _full=True),
                             'http://localhost/about')
            self.assertEqual(
                handler.url_for('about', _netloc='www.google.com'),
                'http://www.google.com/about')
            self.assertEqual(handler.url_for('about', _scheme='https'),
                             'https://localhost/about')
示例#24
0
    def test_translations(self):
        app = Tipfy(
            config={
                'tipfyext.jinja2': {
                    'environment_args': {
                        'extensions': [
                            'jinja2.ext.i18n',
                        ],
                    },
                },
                'tipfy.sessions': {
                    'secret_key': 'foo',
                },
            })
        request = Request.from_values()
        local.current_handler = handler = RequestHandler(app, request)
        jinja2 = Jinja2(app)

        template = jinja2.environment.from_string(
            """{{ _('foo = %(bar)s', bar='foo') }}""")
        self.assertEqual(template.render(), 'foo = foo')
示例#25
0
    def test_engine_factory2(self):
        old_sys_path = sys.path[:]
        sys.path.insert(0, current_dir)

        app = Tipfy(
            config={
                'tipfyext.jinja2': {
                    'templates_dir': templates_dir,
                    'engine_factory': 'resources.get_jinja2_env',
                }
            })
        request = Request.from_values()
        local.current_handler = handler = RequestHandler(app, request)
        jinja2 = Jinja2(app)

        message = 'Hello, World!'
        res = jinja2.render_template(local.current_handler,
                                     'template1.html',
                                     message=message)
        self.assertEqual(res, message)

        sys.path = old_sys_path
示例#26
0
def compile_templates(argv=None):
    """Compiles templates for better performance. This is a command line
    script. From the buildout directory, run:

        bin/jinja2_compile

    It will compile templates from the directory configured for 'templates_dir'
    to the one configured for 'templates_compiled_target'.

    At this time it doesn't accept any arguments.
    """
    if argv is None:
        argv = sys.argv

    base_path = os.getcwd()
    app_path = os.path.join(base_path, 'app')
    gae_path = os.path.join(base_path, 'var/parts/google_appengine')

    extra_paths = [
        app_path,
        os.path.join(app_path, 'lib'),
        os.path.join(app_path, 'lib', 'dist'),
        gae_path,
        # These paths are required by the SDK.
        os.path.join(gae_path, 'lib', 'antlr3'),
        os.path.join(gae_path, 'lib', 'django'),
        os.path.join(gae_path, 'lib', 'ipaddr'),
        os.path.join(gae_path, 'lib', 'webob'),
        os.path.join(gae_path, 'lib', 'yaml', 'lib'),
    ]

    sys.path = extra_paths + sys.path

    from config import config

    app = Tipfy(config=config)
    template_path = app.get_config('tipfyext.jinja2', 'templates_dir')
    compiled_path = app.get_config('tipfyext.jinja2',
                                   'templates_compiled_target')

    if compiled_path is None:
        raise ValueError('Missing configuration key to compile templates.')

    if isinstance(template_path, basestring):
        # A single path.
        source = os.path.join(app_path, template_path)
    else:
        # A list of paths.
        source = [os.path.join(app_path, p) for p in template_path]

    target = os.path.join(app_path, compiled_path)

    # Set templates dir and deactivate compiled dir to use normal loader to
    # find the templates to be compiled.
    app.config['tipfyext.jinja2']['templates_dir'] = source
    app.config['tipfyext.jinja2']['templates_compiled_target'] = None

    if target.endswith('.zip'):
        zip_cfg = 'deflated'
    else:
        zip_cfg = None

    old_list_templates = FileSystemLoader.list_templates
    FileSystemLoader.list_templates = list_templates

    env = Jinja2.factory(app, 'jinja2').environment
    env.compile_templates(target,
                          extensions=None,
                          filter_func=filter_templates,
                          zip=zip_cfg,
                          log_function=logger,
                          ignore_errors=False,
                          py_compile=False)

    FileSystemLoader.list_templates = old_list_templates
示例#27
0
 def test_get_config(self):
     app = Tipfy(config={'tipfy': {'foo': 'bar'}})
     self.assertEqual(app.get_config('tipfy', 'foo'), 'bar')
示例#28
0
    from google.appengine.ext.appstats.recording import appstats_wsgi_middleware
    app.wsgi_app = appstats_wsgi_middleware(app.wsgi_app)


def enable_jinja2_debugging():
    """Enables blacklisted modules that help Jinja2 debugging."""
    if not debug:
        return

    # This enables better debugging info for errors in Jinja2 templates.
    from google.appengine.tools.dev_appserver import HardenedModulesHook
    HardenedModulesHook._WHITE_LIST_C_MODULES += ['_ctypes', 'gestalt']


# Is this the development server?
debug = os.environ.get('SERVER_SOFTWARE', '').startswith('Dev')

# Instantiate the application.
app = Tipfy(rules=rules, config=config, debug=debug)
enable_appstats(app)
enable_jinja2_debugging()


def main():
    # Run the app.
    app.run()


if __name__ == '__main__':
    main()
示例#29
0
def get_app():
    return Tipfy({
        'tipfy': {
            'dev': True,
        },
    }, rules=get_url_rules())
示例#30
0
 def _get_app(self):
     return Tipfy(config={
         'tipfy.sessions': {
             'secret_key': 'something very secret',
         }
     })