Ejemplo n.º 1
0
def test_globals():
    gg = {'who': 'E.T.', 'action': 'phone', 'where': 'home'}
    render = Render(globals=gg)

    tmpl = '{{ who }} {{ action }} {{ where }}'
    resp = render.from_string(tmpl, to_string=True)
    assert resp == 'E.T. phone home'
Ejemplo n.º 2
0
def test_render():
    render = Render(views_dir)
    
    resp = render.to_string('view.html')
    assert resp == '<h1>Hello World</h1>'
    resp = render.to_string('view.txt',
        who='E.T.', action='phone', where='home')
    assert resp == 'E.T. phone home'
Ejemplo n.º 3
0
def test_tests():
    def gt_3(val):
        return val > 3

    tt = {'gt_3': gt_3}
    render = Render(tests=tt)
    tmpl = '{% if 6 is gt_3 %}ok{% endif %}{% if 1 is gt_3 %} FAIL{% endif %}'
    resp = render.from_string(tmpl)
    assert resp == 'ok'
Ejemplo n.º 4
0
def test_from_string():
    render = Render()

    resp = render.from_string(
        'Testing, {{ a }} {{ b }} {{ c }}...',
        {'a': 1, 'b': '2', 'c': '3'},
        to_string=True
    )
    assert resp == 'Testing, 1 2 3...'
Ejemplo n.º 5
0
def test_tests():
    
    def gt_3(val):
        return val > 3
    
    tt = {'gt_3': gt_3}
    render = Render(tests=tt)
    tmpl = '{% if 6 is gt_3 %}ok{% endif %}{% if 1 is gt_3 %} FAIL{% endif %}'
    resp = render.from_string(tmpl)
    assert resp == 'ok'
Ejemplo n.º 6
0
def test_render():
    render = Render(views_dir)

    resp = render.to_string('view.html')
    assert resp == '<h1>Hello World</h1>'
    resp = render.to_string('view.txt',
                            who='E.T.',
                            action='phone',
                            where='home')
    assert resp == 'E.T. phone home'
Ejemplo n.º 7
0
def test_filters():
    def double(val):
        return val * 2

    def cut(text):
        return text[:3]

    ff = {'double': double, 'cut': cut}
    render = Render(filters=ff)
    tmpl = '{{ 45|double }} {{ "abcytfugj"|cut }}'
    resp = render.from_string(tmpl)
    assert resp == '90 abc'
Ejemplo n.º 8
0
def test_set_get_tests():
    
    def gt_3(val):
        return val > 3
    
    render = Render()
    render.set_test('gt_3', gt_3)
    
    tmpl = '{% if 6 is gt_3 %}ok{% endif %}{% if 1 is gt_3 %} FAIL{% endif %}'
    resp = render.from_string(tmpl)
    assert resp == 'ok'
    
    assert render.get_test('gt_3') == gt_3
Ejemplo n.º 9
0
def test_filters():
    
    def double(val):
        return val * 2
    
    def cut(text):
        return text[:3]
    
    ff = {'double': double, 'cut': cut}
    render = Render(filters=ff)
    tmpl = '{{ 45|double }} {{ "abcytfugj"|cut }}'
    resp = render.from_string(tmpl)
    assert resp == '90 abc'
Ejemplo n.º 10
0
def test_i18n():
    render = Render(i18n=views_dir)

    def ok(request):
        return render.from_string('{{ i18n.HELLO }}')

    def fail(request):
        return render.from_string('{{ i18n.FOOBAR }}')

    urls = [
        Rule('/ok/', ok),
        Rule('/fail/', fail),
    ]
    app = Shake(urls)
    c = app.test_client()

    resp = c.get('/ok/?lang=en-US')
    assert resp.status_code == HTTP_OK
    assert resp.data == 'Hello World'

    resp = c.get('/ok/?lang=en_US')
    assert resp.status_code == HTTP_OK
    assert resp.data == 'Hello World'

    resp = c.get('/ok/?lang=es-AR')
    assert resp.data == 'Hola mundo'

    resp = c.get('/fail/?lang=en-US')
    assert resp.data == ''
Ejemplo n.º 11
0
 def _make_render(self):
     loader = ChoiceLoader([
         FileSystemLoader(self.source_dir),
         PackageLoader('clay', config.SOURCE_DIR),
     ])
     self.render = Render(loader=loader)
     self.render.set_filter('json', utils.filter_to_json)
Ejemplo n.º 12
0
def test_to_string():
    render = Render(views_dir)

    resp = render('tmpl.txt',
        {'who': 'E.T.', 'action': 'phone', 'where':'home'},
        to_string=True
    )
    assert resp == 'E.T. phone home'
Ejemplo n.º 13
0
 def __init__(self, source_dir, settings):
     self.source_dir = source_dir
     self.settings = settings
     loader = ChoiceLoader([
         FileSystemLoader(source_dir),
         PackageLoader('clay', SOURCE_DIR),
     ])
     self.render = JinjaRender(loader=loader)
Ejemplo n.º 14
0
def test_set_get_filters():
    def double(val):
        return val * 2

    def cut(text):
        return text[:3]

    render = Render()
    render.set_filter('double', double)
    render.set_filter('cut', cut)

    tmpl = '{{ 45|double }} {{ "abcytfugj"|cut }}'
    resp = render.from_string(tmpl)
    assert resp == '90 abc'

    assert render.get_filter('double') == double
    assert render.get_filter('cut') == cut
Ejemplo n.º 15
0
def test_default_globals_url_for():
    render = Render()

    def foo(request):
        tmpl = "{{ url_for('foo') }}"
        assert render.from_string(tmpl) == '/'

    urls = [
        Rule('/', foo, name='foo'),
    ]
    app = Shake(urls)
    c = app.test_client()
    c.get('/')
Ejemplo n.º 16
0
def test_default_globals():
    render = Render()

    def foo(request):
        tmpl = '{{ media }}{{ request }}{{ settings }}'
        render.from_string(tmpl)

    urls = [
        Rule('/', foo),
    ]
    app = Shake(urls)
    c = app.test_client()
    c.get('/')
Ejemplo n.º 17
0
def test_mimetype():
    render1 = Render(views_dir)
    render2 = Render(views_dir, default_mimetype='foo/bar')

    def t1(request):
        resp = render1('view.html')
        assert isinstance(resp, local.app.response_class)
        assert resp.mimetype == 'text/html'

    def t2(request):
        resp = render2('view.html')
        assert isinstance(resp, local.app.response_class)
        assert resp.mimetype == 'foo/bar'

    urls = [
        Rule('/t1', t1),
        Rule('/t2', t2),
    ]
    app = Shake(urls)
    local.app = app
    c = app.test_client()
    c.get('/t1')
    c.get('/t2')
Ejemplo n.º 18
0
def test_default_globals_flash_messages():
    render = Render()

    def foo(request):
        flash(request, 'foo')
        tmpl = '{% for fm in get_messages() %}{{ fm.msg }}{% endfor %}'
        assert render.from_string(tmpl) == 'foo'

    urls = [
        Rule('/', foo),
    ]
    settings = {'SECRET_KEY': 'abc' * 20}
    app = Shake(urls, settings)
    c = app.test_client()
    c.get('/')
Ejemplo n.º 19
0
def test_csrf_token_global():
    render = Render()

    def t(request):
        csrf = get_csrf_secret(request)
        tmpl = '{{ csrf_secret.name }} {{ csrf_secret.value }}'
        assert render.from_string(tmpl) == '%s %s' % (csrf.name, csrf.value)

    urls = [
        Rule('/', t),
    ]
    settings = {'SECRET_KEY': 'abc' * 20}
    app = Shake(urls, settings)
    c = app.test_client()
    c.get('/')
Ejemplo n.º 20
0
def test_csrf_token_query():
    render = Render()

    def t(request):
        csrf = get_csrf_secret(request)
        tmpl = '{{ csrf_secret.query }}'
        expected = '%s=%s' % (csrf.name, csrf.value)
        assert render.from_string(tmpl) == expected

    urls = [
        Rule('/', t),
    ]
    settings = {'SECRET_KEY': 'abc' * 20}
    app = Shake(urls, settings)
    c = app.test_client()
    c.get('/t')
Ejemplo n.º 21
0
def test_set_get_filters():
    
    def double(val):
        return val * 2
    
    def cut(text):
        return text[:3]
    
    render = Render()
    render.set_filter('double', double)
    render.set_filter('cut', cut)
    
    tmpl = '{{ 45|double }} {{ "abcytfugj"|cut }}'
    resp = render.from_string(tmpl)
    assert resp == '90 abc'
    
    assert render.get_filter('double') == double
    assert render.get_filter('cut') == cut
Ejemplo n.º 22
0
def test_csrf_token():
    render = Render()

    def t(request):
        csrf1 = get_csrf_secret(request).value
        csrf2 = new_csrf_secret(request).value
        csrf2_ = get_csrf_secret(request).value
        assert csrf2 != csrf1
        assert csrf2_ == csrf2

    urls = [
        Rule('/', t),
    ]
    settings = {'SECRET_KEY': 'abc' * 20}
    app = Shake(urls, settings)
    c = app.test_client()
    c.get('/')
Ejemplo n.º 23
0
def test_csrf_token_input():
    render = Render()

    def t(request):
        csrf = get_csrf_secret(request)
        tmpl = '{{ csrf_secret.input }}'
        expected = '<input type="hidden" name="%s" value="%s">' \
            % (csrf.name, csrf.value)
        assert render.from_string(tmpl) == expected

    urls = [
        Rule('/', t),
    ]
    settings = {'SECRET_KEY': 'abc' * 20}
    app = Shake(urls, settings)
    c = app.test_client()
    c.get('/t')
Ejemplo n.º 24
0
def test_set_get_tests():
    def gt_3(val):
        return val > 3

    render = Render()
    render.set_test('gt_3', gt_3)

    tmpl = '{% if 6 is gt_3 %}ok{% endif %}{% if 1 is gt_3 %} FAIL{% endif %}'
    resp = render.from_string(tmpl)
    assert resp == 'ok'

    assert render.get_test('gt_3') == gt_3
Ejemplo n.º 25
0
class Render(object):

    def __init__(self, source_dir, settings):
        self.source_dir = source_dir
        self.settings = settings
        loader = ChoiceLoader([
            FileSystemLoader(source_dir),
            PackageLoader('clay', SOURCE_DIR),
        ])
        self.render = JinjaRender(loader=loader)
    
    def __call__(self, path, **env):
        fn, ext = os.path.splitext(path)
        processor = enabled_processors.get(ext)
        content = u''
        if processor:
            fullpath = os.path.join(self.source_dir, path)
            content, ext = processor.render(fullpath, self.settings)
        else:
            if ext in text_files:
                content = self.render.to_string(path, env)
        
        return content, ext
Ejemplo n.º 26
0
def test_view_not_found():
    render = Render(views_dir)

    with pytest.raises(TemplateNotFound):
        render('x_x')
Ejemplo n.º 27
0
def test_default_globals_now():
    render = Render()
    tmpl = '{{ now }}'
    snow = str(datetime.utcnow())[:-10]
    assert render.from_string(tmpl).startswith(snow)
Ejemplo n.º 28
0
def test_set_get_globals():
    gg = {'who': 'E.T.', 'action': 'phone', 'where': 'home'}
    render = Render()
    render.set_global('who', 'E.T.')
    render.set_global('action', 'phone')
    render.set_global('where', 'home')
    
    tmpl = '{{ who }} {{ action }} {{ where }}'
    resp = render.from_string(tmpl)
    assert resp == 'E.T. phone home'
    
    assert render.get_global('who') == 'E.T.'
    assert render.get_global('action') == 'phone'
    assert render.get_global('where') == 'home'
Ejemplo n.º 29
0
# coding=utf-8
import os

import pytest
from shake import Shake, Rule, Render, Forbidden
from shake.views import (not_found_page, error_page, not_allowed_page,
                         render_template)

HTTP_OK = 200
HTTP_FOUND = 302
HTTP_FORBIDDEN = 403
HTTP_NOT_FOUND = 404
HTTP_ERROR = 500

templates_dir = os.path.join(os.path.dirname(__file__), 'res')
render = Render(templates_dir)


def index(request):
    return 'hello'


def fail(request):
    """View designed to fail. """
    assert False


def no_pass(request):
    raise Forbidden

Ejemplo n.º 30
0
"""
import os

import pytest
from shake import Shake, abort, Rule, Render
from shake.controllers import (not_found_page, error_page, not_allowed_page,
                               render_view)

HTTP_OK = 200
HTTP_FOUND = 302
HTTP_FORBIDDEN = 403
HTTP_NOT_FOUND = 404
HTTP_ERROR = 500

views_dir = os.path.join(os.path.dirname(__file__), 'res')
render = Render(views_dir)


def index(request):
    return 'hello'


def fail(request):
    """Controller designed to fail. """
    assert False


def no_pass(request):
    abort(HTTP_FORBIDDEN)

Ejemplo n.º 31
0
def test_render():
    render = Render(views_dir)

    resp = render('tmpl.html')
    assert isinstance(resp, Response)
    assert resp.data == '<h1>Hello World</h1>'
Ejemplo n.º 32
0
def test_default_globals_now():
    render = Render()
    tmpl = '{{ now }}'
    snow = str(datetime.utcnow())[:-10]
    assert render.from_string(tmpl).startswith(snow)
Ejemplo n.º 33
0
def test_default_tests():
    render = Render()
    tmpl = '{% if value is ellipsis %}ok{% endif %}'
    resp = render.from_string(tmpl, value=Ellipsis)
    assert resp == 'ok'
Ejemplo n.º 34
0
def test_from_to_string():
    render = Render()
    tmpl = 'Testing, {{ a }} {{ b }} {{ c }}...'
    resp = render.from_string(tmpl, a=1, b='2', c='3')
    assert resp == 'Testing, 1 2 3...'
Ejemplo n.º 35
0
def test_from_to_string():
    render = Render()
    tmpl = 'Testing, {{ a }} {{ b }} {{ c }}...'
    resp = render.from_string(tmpl, a=1, b='2', c='3')
    assert resp == 'Testing, 1 2 3...'
Ejemplo n.º 36
0
class Clay(object):

    def __init__(self, base_dir, settings=None, source_dir=config.SOURCE_DIR):
        if os.path.isfile(base_dir):
            base_dir = os.path.abspath(os.path.dirname(base_dir))
        self.base_dir = base_dir
        self.source_dir = utils.make_dirs(base_dir, source_dir)
        self.build_dir = os.path.join(base_dir, config.BUILD_DIR)

        settings = settings or {}
        self.settings = Settings(config.default_settings, settings,
            case_insensitive=True)

        theme_prefix = self.settings.get('theme_prefix', '').rstrip('/')
        if theme_prefix:
            theme_prefix += '/'
        self.settings['theme_prefix'] = theme_prefix

        views_ignore = self.settings.get('views_ignore', [])
        self.settings['views_ignore'] = tuple(views_ignore)

        self.app = Shake(config.app_settings)
        self._make_render()
        self._enable_pre_processors()
        self._add_urls()

    def _make_render(self):
        loader = ChoiceLoader([
            FileSystemLoader(self.source_dir),
            PackageLoader('clay', config.SOURCE_DIR),
        ])
        self.render = Render(loader=loader)
        self.render.set_filter('json', utils.filter_to_json)

    def _enable_pre_processors(self):
        ext_trans = {}
        processors = self.settings.pre_processors

        for name in processors:
            pr = globals().get('p_' + name)
            if pr and pr.enabled:
                pr.add_extensions(self)
                for ext in pr.extensions_in:
                    ext_trans[ext] = pr.extension_out

        self.ext_trans = ext_trans

    def _add_urls(self):
        self.app.add_urls([
            Rule('/', self.render_view),
            Rule('/<path:path>', self.render_view),
        ])

    def _normalize_path(self, path):
        if '..' in path:
            return self.not_found()
        path = path.strip('/')
        is_dir = os.path.isdir(os.path.join(self.source_dir, path))
        if is_dir:
            path += '/'
        if not path or is_dir:
            path += 'index.html'
        return path

    def _translate_ext(self, old_ext):
        return self.ext_trans.get(old_ext, old_ext)

    def _get_alternative(self, path):
        path = path.strip('/')
        fname, ext = os.path.splitext(path)
        fullpath = os.path.join(config.DEFAULT_TEMPLATES, path)
        if os.path.exists(fullpath):
            return ext, path, fullpath
        
        if path != 'index.html':
            return None, None, None

        pdir = os.path.join(self.source_dir, fname + '.*')
        files = glob.glob(pdir)
        if files:
            fullpath = files[0]
            path = fullpath.replace(self.source_dir, '')
            _, ext = os.path.splitext(path)
            return ext, path, fullpath

        return None, None, None

    def _post_process(self, html):
        html = utils.to_unicode(html)
        processors = self.settings.post_processors

        for name in processors:
            pp = globals().get('pp_' + name)
            if pp and pp.enabled:
                html = pp.process(html)

        return html

    def run(self, host=None, port=None):
        host = host if host is not None else self.settings.HOST
        port = port if port is not None else self.settings.PORT
        try:
            port = int(port)
        except Exception:
            port = self.settings.PORT
        ips = [ip for ip in socket.gethostbyname_ex(socket.gethostname())[2]
            if not ip.startswith("127.")][:1]
        if ips:
            print ' * Your local IP is:', ips[0]
        try:
            self.app.run(host=host, port=port)
        except socket.error, e:
            print e
Ejemplo n.º 37
0
def test_set_get_globals():
    gg = {'who': 'E.T.', 'action': 'phone', 'where': 'home'}
    render = Render()
    render.set_global('who', 'E.T.')
    render.set_global('action', 'phone')
    render.set_global('where', 'home')

    tmpl = '{{ who }} {{ action }} {{ where }}'
    resp = render.from_string(tmpl)
    assert resp == 'E.T. phone home'

    assert render.get_global('who') == 'E.T.'
    assert render.get_global('action') == 'phone'
    assert render.get_global('where') == 'home'
Ejemplo n.º 38
0
def test_default_tests():
    render = Render()
    tmpl = '{% if value is ellipsis %}ok{% endif %}'
    resp = render.from_string(tmpl, value=Ellipsis)
    assert resp == 'ok'