Beispiel #1
0
def test_big_mw_stack():
    from clastic.middleware import (client_cache,
                                    compress,
                                    context,
                                    cookie,
                                    form,
                                    profile,
                                    stats,
                                    url)
    middlewares = [client_cache.HTTPCacheMiddleware(),
                   compress.GzipMiddleware(),
                   context.ContextProcessor(),
                   context.SimpleContextProcessor(),
                   cookie.SignedCookieMiddleware(),
                   form.PostDataMiddleware({'lol': str}),
                   profile.SimpleProfileMiddleware(),
                   stats.StatsMiddleware(),
                   url.ScriptRootMiddleware(),
                   url.GetParamMiddleware({})]
    [repr(mw) for mw in middlewares]
    app = Application([('/', hello_world)],
                      middlewares=middlewares)
    cl = app.get_local_client()
    resp = cl.get('/')
    assert resp.status_code == 200
Beispiel #2
0
def test_ctx_proc_nonctx():
    add_name = ContextProcessor(defaults={'name': 'Kurt'})
    app = Application([('/', hello_world_str, render_basic)],
                      middlewares=[add_name])
    c = app.get_local_client()
    resp = c.get('/')
    assert resp.data == b'Hello, world!'
Beispiel #3
0
def test_default_render():
    app = Application([('/', hello_world_ctx, render_basic),
                       ('/<name>/', hello_world_ctx, render_basic),
                       ('/text/<name>/', hello_world_str, render_basic),
                       ('/html/<name>/', hello_world_html, render_basic),
                       ('/beta/<name>/', complex_context, render_basic)])

    assert callable(app.routes[0]._execute)
    assert callable(app.routes[0].render)
    c = app.get_local_client()

    resp = c.get('/')  # test simple json with endpoint default
    assert resp.status_code == 200
    resp_data = json.loads(resp.get_data(True))
    assert resp_data['name'] == 'world'

    resp = c.get('/Kurt/')  # test simple json with url param
    assert resp.status_code == 200
    resp_data = json.loads(resp.get_data(True))
    assert resp_data['name'] == 'Kurt'

    resp = c.get('/beta/Rajkumar/')  # test fancy json
    assert resp.status_code == 200
    resp_data = json.loads(resp.get_data(True))
    assert resp_data['name'] == 'Rajkumar'
    assert resp_data['date']
    assert len(resp_data) > 4

    resp = c.get('/text/Noam/')  # test text
    assert resp.status_code == 200
    assert resp.data == b'Hello, Noam!'

    resp = c.get('/html/Asia/')  # test basic html
    assert resp.status_code == 200
    assert 'text/html' in resp.headers['Content-Type']
Beispiel #4
0
def test_serve():
    cookie_session = CookieSessionMiddleware()
    app = Application(
        [("/", session_hello_world, default_response), ("/<name>/", session_hello_world, default_response)],
        middlewares=[cookie_session],
    )
    yield ok_, app.serve(_jk_just_testing=True)
Beispiel #5
0
def test_default_render():
    app = Application([('/', hello_world_ctx, render_basic),
                       ('/<name>/', hello_world_ctx, render_basic),
                       ('/text/<name>/', hello_world_str, render_basic),
                       ('/html/<name>/', hello_world_html, render_basic),
                       ('/beta/<name>/', complex_context, render_basic)])

    assert callable(app.routes[0]._execute)
    assert callable(app.routes[0]._render)
    c = app.get_local_client()

    resp = c.get('/')  # test simple json with endpoint default
    assert resp.status_code == 200
    resp_data = json.loads(resp.get_data(True))
    assert resp_data['name'] == 'world'

    resp = c.get('/Kurt/')  # test simple json with url param
    assert resp.status_code == 200
    resp_data = json.loads(resp.get_data(True))
    assert resp_data['name'] == 'Kurt'

    resp = c.get('/beta/Rajkumar/')  # test fancy json
    assert resp.status_code == 200
    resp_data = json.loads(resp.get_data(True))
    assert resp_data['name'] == 'Rajkumar'
    assert resp_data['date']
    assert len(resp_data) > 4

    resp = c.get('/text/Noam/')  # test text
    assert resp.status_code == 200
    assert resp.data == b'Hello, Noam!'

    resp = c.get('/html/Asia/')  # test basic html
    assert resp.status_code == 200
    assert 'text/html' in resp.headers['Content-Type']
Beispiel #6
0
def test_custom_table_render():
    def hello_world_ctx(name=None):
        """
        This docstring will be visible in the rendered response.

        Links like https://example.com and www.example.com will be linkified automatically.
        """
        if name is None:
            name = 'world'
        greeting = 'Hello, %s!' % name
        return {'name': name,
                'greeting': greeting}

    class BoldHTMLTable(Table):
        def get_cell_html(self, value):
            std_html = super(BoldHTMLTable, self).get_cell_html(value)
            return '<b>' + std_html + '</b>'

    custom_tr = TabularRender(table_type=BoldHTMLTable)
    custom_render = BasicRender(tabular_render=custom_tr)
    app = Application([('/', hello_world_ctx, custom_render)])
    c = app.get_local_client()

    resp = c.get('/?format=html')
    assert resp.status_code == 200
    resp_data = resp.get_data(True)
    assert '<b>' in resp_data
    assert '<a href="https://example.com">' in resp_data
Beispiel #7
0
def test_direct_no_render():
    render_raises_mw = RenderRaisesMiddleware()
    app = Application([('/', hello_world)],
                      middlewares=[render_raises_mw])
    c = app.get_local_client()
    resp = c.get('/')
    assert resp.data == b'Hello, world!'
Beispiel #8
0
def main(db_name):
    all_oggs = open_db(db_name)
    oggs = [f for f in all_oggs if f['length'] > MIN_OGG_LENGTH]
    oggs = [f for f in oggs if not SPOKEN_RE.match(f['img_name'])]
    name_idx_map = {name['img_name']: i for i, name in enumerate(oggs)}
    rand_oggs = list(oggs)
    random.shuffle(rand_oggs)
    rand_name_idx_map = {name['img_name']: i for i, name in enumerate(rand_oggs)}
    render_jsonp = JSONPRender()
    cur_dir = os.path.abspath(os.path.dirname(__file__))
    resources = {'oggs': oggs,
                 'rand_oggs': rand_oggs,
                 'all_oggs': all_oggs,
                 'name_idx_map': name_idx_map,
                 'rand_name_idx_map': rand_name_idx_map}

    routes = [('/rand', random_oggs, render_jsonp),
              ('/rand/<int:k>', random_oggs, render_jsonp),
              ('/recent', recent_oggs, render_jsonp),
              ('/recent/<int:k>', recent_oggs, render_jsonp),
              ('/rand_dur', random_by_dur, render_jsonp),
              ('/rand_dur/<int:k>', random_by_dur, render_jsonp)]

    middlewares = [GetParamMiddleware('callback'),
                   GetParamMiddleware('name'),
                   GetParamMiddleware('min'),
                   GetParamMiddleware('max')]

    app = Application(routes, resources, middlewares=middlewares)
    app.serve(static_path=cur_dir)
Beispiel #9
0
def test_http_method_routes():
    ep = lambda _route: repr(_route.methods)
    routes = [
        GET('/get', ep, render_basic),
        POST('/post', ep, render_basic),
        PUT('/put', ep, render_basic),
        DELETE('/delete', ep, render_basic)
    ]
    app = Application(routes)
    client = app.get_local_client()
    methods = ('get', 'post', 'put', 'delete')
    status_map = {}
    for correct_method in methods:
        for attempted_method in methods:
            req_func = getattr(client, attempted_method)
            resp = req_func('/' + correct_method)
            status_code = resp.status_code
            try:
                status_map[status_code] += 1
            except KeyError:
                status_map[status_code] = 1

            if status_code == 200:
                resp_data = resp.data
                # lololol yay eval()
                route_methods = eval(resp_data) - set(['HEAD'])
                assert set([correct_method.upper()]) == route_methods
    assert status_map[200] == len(routes)
    assert status_map.get(405) == len(routes) * (len(methods) - 1)
    return
Beispiel #10
0
def test_nonbreaking_exc():
    app = Application([('/', lambda: NotFound(is_breaking=False)),
                       ('/', lambda: 'so hot in here', render_basic)])
    client = app.get_local_client()
    resp = client.get('/')
    assert resp.status_code == 200
    assert resp.data == b'so hot in here'
Beispiel #11
0
def test_custom_table_render():
    def hello_world_ctx(name=None):
        """
        This docstring will be visible in the rendered response.

        Links like https://example.com and www.example.com will be linkified automatically.
        """
        if name is None:
            name = 'world'
        greeting = 'Hello, %s!' % name
        return {'name': name, 'greeting': greeting}

    class BoldHTMLTable(Table):
        def get_cell_html(self, value):
            std_html = super(BoldHTMLTable, self).get_cell_html(value)
            return '<b>' + std_html + '</b>'

    custom_tr = TabularRender(table_type=BoldHTMLTable)
    custom_render = BasicRender(tabular_render=custom_tr)
    app = Application([('/', hello_world_ctx, custom_render)])
    c = app.get_local_client()

    resp = c.get('/?format=html')
    assert resp.status_code == 200
    resp_data = resp.get_data(True)
    assert '<b>' in resp_data
    assert '<a href="https://example.com">' in resp_data
Beispiel #12
0
def test_json_render(render_json=None):
    if render_json is None:
        render_json = JSONRender(dev_mode=True)
    app = Application([('/', hello_world_ctx, render_json),
                       ('/<name>/', hello_world_ctx, render_json),
                       ('/beta/<name>/', complex_context, render_json)])

    assert callable(app.routes[0]._execute)
    assert callable(app.routes[0].render)
    c = app.get_local_client()

    resp = c.get('/')
    assert resp.status_code == 200
    resp_data = json.loads(resp.get_data(True))
    assert resp_data['name'] == 'world'

    resp = c.get('/Kurt/')
    assert resp.status_code == 200
    resp_data = json.loads(resp.get_data(True))
    assert resp_data['name'] == 'Kurt'

    resp = c.get('/beta/Rajkumar/')
    assert resp.status_code == 200
    resp_data = json.loads(resp.get_data(True))
    assert resp_data['name'] == 'Rajkumar'
    assert resp_data['date']
    assert len(resp_data) > 4
Beispiel #13
0
def test_nonbreaking_exc():
    app = Application([('/', lambda: NotFound(is_breaking=False)),
                       ('/', lambda: 'so hot in here', render_basic)])
    client = app.get_local_client()
    resp = client.get('/')
    assert resp.status_code == 200
    assert resp.data == b'so hot in here'
Beispiel #14
0
def test_error_render_count():
    class AccumErrorHandler(ErrorHandler):
        def render_error(self, _error, request, error_list, **kwargs):
            if 'reraise' in request.path:
                raise _error
            if 'badgateway' in request.path:
                _error = BadGateway()
            error_list.append(_error)
            return _error

    rt = Route('/<number:int>/<option?>', odd_endpoint, render_basic)
    error_list = []
    rsrc = {'error_list': error_list}
    app = Application([rt], rsrc, error_handler=AccumErrorHandler())
    cl = app.get_local_client()

    err_resp = cl.get('/39')
    assert err_resp.status_code == 200
    err_resp = cl.get('/2')
    assert err_resp.status_code == 500
    assert len(error_list) == 1

    # reraising means the error will be handled by the default
    # handler, so no length change should occur
    err_resp = cl.get('/4/reraise')
    assert err_resp.status_code == 500
    assert len(error_list) == 1

    err_resp = cl.get('/6/badgateway')
    assert err_resp.status_code == 502
    assert len(error_list) == 2
Beispiel #15
0
def test_json_render(render_json=None):
    if render_json is None:
        render_json = JSONRender(dev_mode=True)
    app = Application([('/', hello_world_ctx, render_json),
                       ('/<name>/', hello_world_ctx, render_json),
                       ('/beta/<name>/', complex_context, render_json)])

    assert callable(app.routes[0]._execute)
    assert callable(app.routes[0]._render)
    c = app.get_local_client()

    resp = c.get('/')
    assert resp.status_code == 200
    resp_data = json.loads(resp.get_data(True))
    assert resp_data['name'] == 'world'

    resp = c.get('/Kurt/')
    assert resp.status_code == 200
    resp_data = json.loads(resp.get_data(True))
    assert resp_data['name'] == 'Kurt'

    resp = c.get('/beta/Rajkumar/')
    assert resp.status_code == 200
    resp_data = json.loads(resp.get_data(True))
    assert resp_data['name'] == 'Rajkumar'
    assert resp_data['date']
    assert len(resp_data) > 4
Beispiel #16
0
def test_error_render_count():

    class AccumErrorHandler(ErrorHandler):
        def render_error(self, _error, request, error_list, **kwargs):
            if 'reraise' in request.path:
                raise _error
            if 'badgateway' in request.path:
                _error = BadGateway()
            error_list.append(_error)
            return _error

    rt = Route('/<number:int>/<option?>', odd_endpoint, render_basic)
    error_list = []
    rsrc = {'error_list': error_list}
    app = Application([rt], rsrc, error_handler=AccumErrorHandler())
    cl = app.get_local_client()

    err_resp = cl.get('/39')
    assert err_resp.status_code == 200
    err_resp = cl.get('/2')
    assert err_resp.status_code == 500
    assert len(error_list) == 1

    # reraising means the error will be handled by the default
    # handler, so no length change should occur
    err_resp = cl.get('/4/reraise')
    assert err_resp.status_code == 500
    assert len(error_list) == 1

    err_resp = cl.get('/6/badgateway')
    #if err_resp.status_code != 502:
    #    import pdb;pdb.set_trace()
    assert err_resp.status_code == 502
    assert len(error_list) == 2
Beispiel #17
0
def test_meta_basic():
    app = Application([('/meta', MetaApplication()),
                       ('/<name?>', cookie_hello_world, render_basic)],
                      middlewares=[SignedCookieMiddleware()])
    cl = app.get_local_client()

    assert cl.get('/').status_code == 200
    assert cl.get('/meta/').status_code == 200
Beispiel #18
0
def test_ctx_proc_empty():
    add_name = ContextProcessor()
    app = Application([('/', hello_world_ctx, render_json)],
                      middlewares=[add_name])
    c = app.get_local_client()
    resp = c.get('/')
    resp_data = json.loads(resp.get_data(True))
    assert resp_data['name'] == 'world'  # does overwrite
Beispiel #19
0
def test_basic_static_route():
    static_app = Application([StaticFileRoute('/source_code',
                                              _CUR_DIR + '/test_static.py')])

    c = static_app.get_local_client()
    resp = c.get('/source_code')
    assert resp.mimetype in ('text/x-python', 'text/plain')  # text/plain on appveyor/windows for some reason
    assert resp.status_code == 200
Beispiel #20
0
def test_basic_static_route():
    static_app = Application([StaticFileRoute('/source_code',
                                              _CUR_DIR + '/test_static.py')])

    c = static_app.get_local_client()
    resp = c.get('/source_code')
    assert resp.mimetype in ('text/x-python', 'text/plain')  # text/plain on appveyor/windows for some reason
    assert resp.status_code == 200
Beispiel #21
0
def test_meta_basic():
    app = Application([('/meta', MetaApplication()),
                       ('/<name?>', cookie_hello_world, render_basic)],
                      middlewares=[SignedCookieMiddleware()])
    cl = app.get_local_client()

    assert cl.get('/').status_code == 200
    assert cl.get('/meta/').status_code == 200
Beispiel #22
0
def test_req_provides():
    req_provides = RequestProvidesName('Rajkumar')
    app = Application([('/', hello_world)], middlewares=[req_provides])
    c = app.get_local_client()
    resp = c.get('/')
    assert resp.data == b'Hello, Rajkumar!'
    resp = c.get('/?name=Kurt')
    assert resp.data == b'Hello, Kurt!'
Beispiel #23
0
def test_get_param_mw():
    get_name_mw = GetParamMiddleware(['name', 'date'])
    app = Application([('/', hello_world)], middlewares=[get_name_mw])
    c = app.get_local_client()
    resp = c.get('/')
    assert resp.data == b'Hello, world!'
    resp = c.get('/?name=Kurt')
    assert resp.data == b'Hello, Kurt!'
Beispiel #24
0
def test_chameleon_broken_template():
    chameleon_render = ChameleonRenderFactory(_TMPL_DIR)
    tmpl = 'broken_template_1.pt'
    app = Application([('/', hello_world_ctx, tmpl)],
                      render_factory=chameleon_render)
    c = app.get_local_client()
    resp = c.get('/')
    assert resp.status_code == 500
    assert len(resp.data) > 1024  # a longish response
Beispiel #25
0
def test_get_param_mw():
    get_name_mw = GetParamMiddleware(['name', 'date'])
    app = Application([('/', hello_world)],
                      middlewares=[get_name_mw])
    c = app.get_local_client()
    resp = c.get('/')
    assert resp.data == b'Hello, world!'
    resp = c.get('/?name=Kurt')
    assert resp.data == b'Hello, Kurt!'
Beispiel #26
0
def test_req_provides():
    req_provides = RequestProvidesName('Rajkumar')
    app = Application([('/', hello_world)],
                      middlewares=[req_provides])
    c = app.get_local_client()
    resp = c.get('/')
    assert resp.data == b'Hello, Rajkumar!'
    resp = c.get('/?name=Kurt')
    assert resp.data == b'Hello, Kurt!'
Beispiel #27
0
def main():
    rsc = {'data': _DATA}
    gpm = GetParamMiddleware('url')
    atr = AutoTableRenderer(max_depth=5)
    render_basic = BasicRender()
    app = Application([('/', ident_ep, render_basic),
                       ('/json', ident_ep, render_basic),
                       ('/fetch', fetch_json, render_basic)], rsc, [gpm])
    app.serve()
Beispiel #28
0
def test_broken_decorated():
    req_provides_blank = RequestProvidesName()
    app = Application([('/', hello_world_no)],
                      middlewares=[req_provides_blank])
    c = app.get_local_client()
    resp = c.get('/')
    assert resp.data == b'Hello, world!'
    resp = c.get('/?name=Kurt')
    assert resp.data != b'Hello, Kurt!'
Beispiel #29
0
def test_redirector():
    redirect_other = Redirector('/other')
    app = Application([('/', redirect_other)])
    c = app.get_local_client()
    resp = c.get('/')
    assert resp.status_code == 301
    assert resp.headers['Location'] == 'http://localhost/other'

    repr(redirect_other)
Beispiel #30
0
def test_redirector():
    redirect_other = Redirector('/other')
    app = Application([('/', redirect_other)])
    c = app.get_local_client()
    resp = c.get('/')
    assert resp.status_code == 301
    assert resp.headers['Location'] == 'http://localhost/other'

    repr(redirect_other)
Beispiel #31
0
def test_simple_ctx_proc():
    add_name_lang = SimpleContextProcessor(name='Kurt', language='en')
    app = Application([('/', hello_world_ctx, render_json)],
                      middlewares=[add_name_lang])
    c = app.get_local_client()
    resp = c.get('/')
    resp_data = json.loads(resp.get_data(True))
    assert resp_data['name'] == 'world'  # does not overwrite
    assert resp_data['language'] == 'en'
Beispiel #32
0
def main():
    rsc = {'data': _DATA}
    gpm = GetParamMiddleware('url')
    atr = AutoTableRenderer(max_depth=5)
    render_basic = BasicRender()
    app = Application([('/', ident_ep, render_basic),
                       ('/json', ident_ep, render_basic),
                       ('/fetch', fetch_json, render_basic)], rsc, [gpm])
    app.serve()
Beispiel #33
0
def test_nondebug_server_errors():
    app = Application([('/', _raiser, render_basic)], debug=False)
    cl = app.get_local_client()
    resps = []
    resps.append(cl.get('/', headers={'Accept': 'text/plain'}))
    resps.append(cl.get('/', headers={'Accept': 'text/html'}))
    resps.append(cl.get('/', headers={'Accept': 'application/json'}))
    resps.append(cl.get('/', headers={'Accept': 'application/xml'}))

    assert all(['RuntimeError' in r.get_data(True) for r in resps])
Beispiel #34
0
def test_nondebug_server_errors():
    app = Application([('/', _raiser, render_basic)], debug=False)
    cl = app.get_local_client()
    resps = []
    resps.append(cl.get('/', headers={'Accept': 'text/plain'}))
    resps.append(cl.get('/', headers={'Accept': 'text/html'}))
    resps.append(cl.get('/', headers={'Accept': 'application/json'}))
    resps.append(cl.get('/', headers={'Accept': 'application/xml'}))

    assert all(['RuntimeError' in r.get_data(True) for r in resps])
Beispiel #35
0
def test_serve():
    cookie_mw = SignedCookieMiddleware()
    app = Application([('/', cookie_hello_world, render_basic),
                       ('/<name>/', cookie_hello_world, render_basic)],
                      middlewares=[cookie_mw])

    assert app.serve(_jk_just_testing=True, static_path=_CUR_DIR)
    cl = app.get_local_client()

    assert cl.get('/').status_code == 200
    assert cl.get('/static/test_serve.py').status_code == 200
Beispiel #36
0
def test_broken_error_render():
    class BrokenErrorHandler(ErrorHandler):
        def render_error(self, **kwargs):
            1/0

    rt = Route('/<number:int>', odd_endpoint, render_basic)
    app = Application([rt], error_handler=BrokenErrorHandler())
    cl = app.get_local_client()
    err_resp = cl.get('/2')
    assert err_resp.status_code == 500
    assert b'not in my house' in err_resp.data
Beispiel #37
0
def test_reroute_wsgi():
    # simulate home page served by one app, and all else by another
    other_app = Application([('/other', lambda: 'okay', render_basic)])
    main_app = Application([('/', lambda: 'hooray', render_basic),
                            ('/<x*str>', RerouteWSGI(other_app))])
    cl = main_app.get_local_client()
    resp = cl.get('/')
    assert resp.get_data(as_text=True) == 'hooray'

    resp = cl.get('/other/')
    assert resp.get_data(as_text=True) == 'okay'
Beispiel #38
0
def test_broken_error_render():
    class BrokenErrorHandler(ErrorHandler):
        def render_error(self, **kwargs):
            1 / 0

    rt = Route('/<number:int>', odd_endpoint, render_basic)
    app = Application([rt], error_handler=BrokenErrorHandler())
    cl = app.get_local_client()
    err_resp = cl.get('/2')
    assert err_resp.status_code == 500
    assert b'not in my house' in err_resp.data
Beispiel #39
0
def test_resource_redaction():
    app = Application(routes=[('/meta', MetaApplication())],
                      resources={'a_secret': 'vsecret', 'ok': 'bokay'})

    cl = app.get_local_client()
    resp = cl.get('/meta/')
    assert resp.status_code == 200

    content = resp.get_data(as_text=True)
    assert 'bokay' in content
    assert 'vsecret' not in content
Beispiel #40
0
def test_nondebug_notfound_errors():
    app = Application([('/', _raiser, render_basic)], debug=True)
    cl = app.get_local_client()
    nf_url = '/nf'

    resps = []
    resps.append(cl.get(nf_url, headers={'Accept': 'text/plain'}))
    resps.append(cl.get(nf_url, headers={'Accept': 'text/html'}))
    resps.append(cl.get(nf_url, headers={'Accept': 'application/xml'}))
    resps.append(cl.get(nf_url, headers={'Accept': 'application/json'}))

    assert all(['not found' in r.get_data(True).lower() for r in resps])
Beispiel #41
0
def test_create_route_order_incr():
    "tests route order when routes are added incrementally"
    routes = [('/api/<api_path+>', api, render_basic),
              ('/<one>/<two>', two_segments, render_basic),
              ('/<one>/<two>/<three>', three_segments, render_basic)]
    app = Application()
    client = app.get_local_client()
    for r in routes:
        app.add(r)
        assert client.get('/api/a/b').data == b'api: a/b'
        assert app.routes[-1].get_info()['url_pattern'] == r[0]
    return
Beispiel #42
0
def test_create_route_order_incr():
    "tests route order when routes are added incrementally"
    routes = [('/api/<path:api_path>', api, render_basic),
              ('/<one>/<two>', two_segments, render_basic),
              ('/<one>/<two>/<three>', three_segments, render_basic)]
    app = Application()
    client = Client(app, BaseResponse)
    for r in routes:
        app.add(r)
        yield eq_, client.get('/api/a/b').data, 'api: a/b'
        yield eq_, app.wmap._rules[-1].rule, r[0]
    return
Beispiel #43
0
def test_nondebug_notfound_errors():
    app = Application([('/', _raiser, render_basic)], debug=True)
    cl = app.get_local_client()
    nf_url = '/nf'

    resps = []
    resps.append(cl.get(nf_url, headers={'Accept': 'text/plain'}))
    resps.append(cl.get(nf_url, headers={'Accept': 'text/html'}))
    resps.append(cl.get(nf_url, headers={'Accept': 'application/xml'}))
    resps.append(cl.get(nf_url, headers={'Accept': 'application/json'}))

    assert all(['not found' in r.get_data(True).lower() for r in resps])
Beispiel #44
0
def test_serve():
    cookie_mw = SignedCookieMiddleware()
    app = Application([('/', cookie_hello_world, render_basic),
                       ('/<name>/', cookie_hello_world, render_basic)],
                      middlewares=[cookie_mw])

    yield ok_, app.serve(_jk_just_testing=True, static_path=_CUR_DIR)
    cl = Client(app, Response)

    yield eq_, cl.get('/').status_code, 200
    yield eq_, cl.get('/_meta/').status_code, 200
    yield eq_, cl.get('/static/test_serve.py').status_code, 200
Beispiel #45
0
def test_gzip_mw():
    from clastic.middleware import compress

    app = Application([('/<name>', hello_world)], middlewares=[compress.GzipMiddleware()])
    cl = app.get_local_client()
    resp = cl.get('/' + 'a' * 2000)
    assert resp.status_code == 200
    assert len(resp.get_data()) > 2000

    resp = cl.get('/' + 'a' * 2000, headers={'Accept-Encoding': 'gzip'})
    assert resp.status_code == 200
    assert len(resp.get_data()) < 200
Beispiel #46
0
def main(db_name):
    oggs = open_db(db_name)
    oggs = [f for f in oggs if f['length'] > MIN_OGG_LENGTH]
    render_jsonp = JSONPRender()
    cur_dir = os.path.abspath(os.path.dirname(__file__))
    resources = {'oggs': oggs}

    routes = [('/rand', random_oggs, render_jsonp),
              ('/rand/<k>', random_oggs, render_jsonp)]

    app = Application(routes, resources, middlewares=[GetParamMiddleware('callback')])
    app.serve(static_path=cur_dir)
Beispiel #47
0
def test_profile_mw():
    from clastic.middleware import profile

    app = Application([('/<name?>', hello_world)], middlewares=[profile.SimpleProfileMiddleware()])
    cl = app.get_local_client()
    resp = cl.get('/')
    assert resp.status_code == 200

    resp = cl.get('/?_prof=true')
    assert resp.status_code == 200
    resp_data = resp.get_data(True)
    assert 'function calls in 0.00' in resp_data  # e.g., 46 function calls in 0.000 seconds but that's variable/flaky
Beispiel #48
0
def test_serve():
    cookie_mw = SignedCookieMiddleware()
    app = Application([('/', cookie_hello_world, render_basic),
                       ('/<name>/', cookie_hello_world, render_basic)],
                      middlewares=[cookie_mw])

    yield ok_, app.serve(_jk_just_testing=True, static_path=_CUR_DIR)
    cl = Client(app, Response)

    yield eq_, cl.get('/').status_code, 200
    yield eq_, cl.get('/_meta/').status_code, 200
    yield eq_, cl.get('/static/test_serve.py').status_code, 200
Beispiel #49
0
def test_create_route_order_incr():
    "tests route order when routes are added incrementally"
    routes = [('/api/<api_path+>', api, render_basic),
              ('/<one>/<two>', two_segments, render_basic),
              ('/<one>/<two>/<three>', three_segments, render_basic)]
    app = Application()
    client = app.get_local_client()
    for r in routes:
        app.add(r)
        assert client.get('/api/a').data == b'api: a'
        assert client.get('/api/a/b/').data == b'api: a/b'
    return
Beispiel #50
0
def test_debug_raises():
    app_nodebug = Application([('/', lambda: 1/0)], debug=False)
    client = app_nodebug.get_local_client()
    assert client.get('/').status_code == 500

    err_handler = ErrorHandler(reraise_uncaught=True)
    app_debug = Application([('/', lambda: 1/0)], error_handler=err_handler)
    client = app_debug.get_local_client()

    with raises(ZeroDivisionError):
        client.get('/')
    return
Beispiel #51
0
def test_profile_mw():
    from clastic.middleware import profile

    app = Application([('/<name?>', hello_world)],
                      middlewares=[profile.SimpleProfileMiddleware()])
    cl = app.get_local_client()
    resp = cl.get('/')
    assert resp.status_code == 200

    resp = cl.get('/?_prof=true')
    assert resp.status_code == 200
    resp_data = resp.get_data(True)
    assert 'function calls in 0.00' in resp_data  # e.g., 46 function calls in 0.000 seconds but that's variable/flaky
Beispiel #52
0
def test_gzip_mw():
    from clastic.middleware import compress

    app = Application([('/<name>', hello_world)],
                      middlewares=[compress.GzipMiddleware()])
    cl = app.get_local_client()
    resp = cl.get('/' + 'a' * 2000)
    assert resp.status_code == 200
    assert len(resp.get_data()) > 2000

    resp = cl.get('/' + 'a' * 2000, headers={'Accept-Encoding': 'gzip'})
    assert resp.status_code == 200
    assert len(resp.get_data()) < 200
Beispiel #53
0
def test_debug_server_errors():
    app = Application([GET('/', _raiser, render_basic)], debug=True)
    cl = app.get_local_client()

    resps = []
    resps.append(cl.get('/', headers={'Accept': 'text/plain'}))
    resps.append(cl.get('/', headers={'Accept': 'text/html'}))
    json_resp = cl.get('/', headers={'Accept': 'application/json'})
    resps.append(json_resp)
    resps.append(cl.get('/', headers={'Accept': 'application/xml'}))

    assert all(['RuntimeError' in r.get_data(True) for r in resps])
    json_data = json.loads(json_resp.get_data(True))
    assert json_data['clastic_version'] == __version__
Beispiel #54
0
def test_ctx_proc_req():
    req_provides_name = RequestProvidesName()
    add_name_lang = ContextProcessor(['name'], {'language': 'en'})
    app = Application([('/', hello_world_ctx, render_json)],
                      middlewares=[req_provides_name, add_name_lang])
    c = app.get_local_client()
    resp = c.get('/')
    resp_data = json.loads(resp.get_data(True))
    assert resp_data['name'] == 'world'  # does not overwrite
    assert resp_data['language'] == 'en'

    resp = c.get('/?name=Alex')
    resp_data = json.loads(resp.get_data(True))
    assert resp_data['name'] == 'Alex'  # still does not overwrite
Beispiel #55
0
def test_debug_server_errors():
    app = Application([GET('/', _raiser, render_basic)], debug=True)
    cl = app.get_local_client()

    resps = []
    resps.append(cl.get('/', headers={'Accept': 'text/plain'}))
    resps.append(cl.get('/', headers={'Accept': 'text/html'}))
    json_resp = cl.get('/', headers={'Accept': 'application/json'})
    resps.append(json_resp)
    resps.append(cl.get('/', headers={'Accept': 'application/xml'}))

    assert all(['RuntimeError' in r.get_data(True) for r in resps])
    json_data = json.loads(json_resp.get_data(True))
    assert json_data['clastic_version'] == __version__
def test_chameleon_mixed():
    chameleon_render = ChameleonRenderFactory(_TMPL_DIR)
    tmpl = 'basic_template.pt'
    app = Application([('/', hello_world_ctx, tmpl),
                       ('/json/', hello_world_ctx, render_basic)],
                      render_factory=chameleon_render)

    c = app.get_local_client()
    resp = c.get('/')
    assert resp.status_code == 200
    assert b'clasty' in resp.data

    resp = c.get('/json/')
    assert resp.status_code == 200
Beispiel #57
0
def test_create_route_order_list():
    "tests route order when routes are added as a list"
    routes = [('/api/<api_path+>', api, render_basic),
              ('/<one>/<two>', two_segments, render_basic),
              ('/<one>/<two>/<three>', three_segments, render_basic)]
    app = Application(routes)
    client = app.get_local_client()
    assert client.get('/api/a').data == b'api: a'
    assert client.get('/api/a/b').data == b'api: a/b'

    for i, rt in enumerate(app.routes):
        assert rt.pattern == routes[i][0]

    return
Beispiel #58
0
def test_create_route_order_list():
    "tests route order when routes are added as a list"
    routes = [('/api/<api_path+>', api, render_basic),
              ('/<one>/<two>', two_segments, render_basic),
              ('/<one>/<two>/<three>', three_segments, render_basic)]
    app = Application(routes)
    client = app.get_local_client()
    assert client.get('/api/a').data == b'api: a'
    assert client.get('/api/a/b').data == b'api: a/b'

    for i, rt in enumerate(app.routes):
        assert rt.pattern == routes[i][0]

    return