Example #1
0
def test_defer_doesnt_break_tool():
    class App(morepath.App):
        pass

    class Sub(morepath.App):
        pass

    class A(object):
        pass

    @App.path(path='/foo', model=A)
    def get_a():
        return A()

    @App.mount(path='/sub', app=Sub)
    def get_sub():
        return Sub()

    @Sub.defer_links(model=A)
    def defer_a(app, obj):
        return app.parent

    App.commit()

    infos = get_path_and_view_info(App)
    infos = restrict(infos, ['path', 'directive'])

    assert infos == [{
        'path': '/foo',
        'directive': 'path'
    }, {
        'path': '/sub',
        'directive': 'mount'
    }]
Example #2
0
def test_permissions():
    class App(morepath.App):
        pass

    class A(object):
        pass

    @App.path(path='/foo', model=A)
    def get_a():
        return A()

    class ReadPermission(object):
        pass

    @App.view(model=A, permission=ReadPermission)
    def a_default(self, request):
        pass

    App.commit()

    infos = get_path_and_view_info(App)

    for info in infos:
        info['filename'] = 'flurb.py'
        info['lineno'] = 17

    f = io()
    format_csv(f, 'excel', infos)

    s = f.getvalue()
    assert s == '''\
Example #3
0
def test_internal_view():
    class App(morepath.App):
        pass

    class A(object):
        pass

    @App.path(path='/foo', model=A)
    def get_a():
        return A()

    @App.view(model=A, name='bar', internal=True)
    def a_default(self, request):
        return "default"

    App.commit()

    infos = get_path_and_view_info(App)

    infos[0]['filename'] = 'flurb.py'
    infos[0]['lineno'] = 17

    infos[1]['filename'] = 'flurb.py'
    infos[1]['lineno'] = 20

    f = io()
    format_csv(f, 'excel', infos)

    s = f.getvalue()
    assert s == '''\
Example #4
0
def test_one_app_view_actions_base_class():
    class App(morepath.App):
        pass

    class Base(object):
        pass

    class A(Base):
        pass

    @App.path(path='/foo', model=A)
    def get_a():
        return A()

    @App.view(model=Base)
    def base_default(self, request):
        return ""

    App.commit()

    infos = get_path_and_view_info(App)
    infos = restrict(infos, ['path', 'directive'])

    assert infos == [
        {
            'path': '/foo',
            'directive': 'path'
        },
        {
            'path': '/foo',
            'directive': 'view'
        },
    ]
Example #5
0
def test_extra_predicates():
    class App(morepath.App):
        pass

    class A(object):
        pass

    class B(object):
        pass

    @App.path(path='/foo', model=A)
    def get_a():
        return A()

    @App.view(model=A, body_model=B, request_method='POST')
    def post_a(self, request):
        return A()

    App.commit()

    infos = get_path_and_view_info(App)

    for info in infos:
        info['filename'] = 'flurb.py'
        info['lineno'] = 17

    f = io()
    format_csv(f, 'excel', infos)

    s = f.getvalue()
    assert s == '''\
Example #6
0
def test_one_app_view_predicates():
    class App(morepath.App):
        pass

    class A(object):
        pass

    @App.path(path='/foo', model=A)
    def get_a():
        return A()

    @App.view(model=A)
    def a_default(self, request):
        return ""

    @App.view(model=A, name='edit')
    def a_edit(self, request):
        return ""

    App.commit()

    infos = get_path_and_view_info(App)

    predicates = [d.get('predicates') for d in infos if 'predicates' in d]

    assert predicates == [{}, {'name': 'edit'}]
Example #7
0
def test_mounted_app_paths_and_views():
    class App(morepath.App):
        pass

    class A(object):
        pass

    @App.path(path='foo', model=A)
    def get_a():
        return A()

    @App.json(model=A)
    def a_default(self, request):
        pass

    class Sub(morepath.App):
        pass

    class B(object):
        pass

    @Sub.path(path='bar', model=B)
    def get_b():
        return B()

    @Sub.view(model=B)
    def b_default(self, request):
        return ''

    # shouldn't be picked up as it's in Sub
    @Sub.view(model=A)
    def a_sub_view(self, request):
        return ''

    @App.mount(path='sub', app=Sub)
    def get_sub():
        return Sub()

    App.commit()

    infos = get_path_and_view_info(App)
    infos = restrict(infos, ['path', 'directive'])

    assert infos == [{
        'path': '/foo',
        'directive': 'path'
    }, {
        'path': '/foo',
        'directive': 'json'
    }, {
        'path': '/sub',
        'directive': 'mount'
    }, {
        'path': '/sub/bar',
        'directive': 'path'
    }, {
        'path': '/sub/bar',
        'directive': 'view'
    }]
Example #8
0
def test_app_variables():
    class App(morepath.App):
        pass

    class A(object):
        pass

    @App.path(path='/users/{id}', model=A)
    def get_a(id):
        return A()

    App.commit()

    infos = get_path_and_view_info(App)
    infos = restrict(infos, ['path', 'directive'])
    assert infos == [{'path': '/users/{id}', 'directive': 'path'}]
Example #9
0
def test_one_app_with_text_format():
    class App(morepath.App):
        pass

    class A(object):
        pass

    @App.path(path='/foo', model=A)
    def get_a():
        return A()

    App.commit()

    infos = get_path_and_view_info(App)

    infos[0]['filelineno'] = 'File /fake.py, line 335'
    f = StringIO()
    format_text(f, infos)

    s = f.getvalue()
    assert s == '''\
Example #10
0
def test_mounted_app_paths_only():
    class App(morepath.App):
        pass

    class A(object):
        pass

    @App.path(path='foo', model=A)
    def get_a():
        return A()

    class Sub(morepath.App):
        pass

    class B(object):
        pass

    @Sub.path(path='bar', model=B)
    def get_b():
        return B()

    @App.mount(path='sub', app=Sub)
    def get_sub():
        return Sub()

    App.commit()

    infos = get_path_and_view_info(App)
    infos = restrict(infos, ['path', 'directive'])

    assert infos == [{
        'path': '/foo',
        'directive': 'path'
    }, {
        'path': '/sub',
        'directive': 'mount'
    }, {
        'path': '/sub/bar',
        'directive': 'path'
    }]
Example #11
0
def test_one_app_named_view():
    class App(morepath.App):
        pass

    class A(object):
        pass

    @App.path(path='/foo', model=A)
    def get_a():
        return A()

    @App.view(model=A)
    def a_default(self, request):
        return ""

    @App.view(model=A, name='edit')
    def a_edit(self, request):
        return ""

    App.commit()

    infos = get_path_and_view_info(App)
    infos = restrict(infos, ['path', 'directive'])

    assert infos == [
        {
            'path': '/foo',
            'directive': 'path'
        },
        {
            'path': '/foo',
            'directive': 'view'
        },
        {
            'path': '/foo/+edit',
            'directive': 'view'
        },
    ]
Example #12
0
def test_absorb():
    class App(morepath.App):
        pass

    class A(object):
        pass

    @App.path(path='/foo', model=A, absorb=True)
    def get_a():
        return A()

    App.commit()

    infos = get_path_and_view_info(App)

    infos[0]['filename'] = 'flurb.py'
    infos[0]['lineno'] = 17

    f = io()
    format_csv(f, 'excel', infos)

    s = f.getvalue()
    assert s == '''\
Example #13
0
def test_sort_paths_and_views():
    class App(morepath.App):
        pass

    class A(object):
        pass

    class B(object):
        pass

    @App.path(path='/a', model=A)
    def get_a():
        return A()

    @App.path(path='/b', model=B)
    def get_b():
        return B()

    @App.view(model=A)
    def a_default(self, request):
        return "default"

    @App.view(model=A, name='x')
    def a_x(self, request):
        return "x"

    @App.view(model=A, name='y')
    def a_y(self, request):
        return "y"

    @App.view(model=A, name='y', request_method='POST')
    def a_y_post(self, request):
        return 'y'

    @App.view(model=A, name='y', request_method='PUT')
    def a_y_put(self, request):
        return 'y'

    @App.view(model=A, name='y', request_method='DELETE')
    def a_y_delete(self, request):
        return 'y'

    @App.view(model=A, name='z')
    def a_z(self, request):
        return 'y'

    @App.view(model=A, name='i', internal=True)
    def a_internal(self, request):
        return 'i'

    @App.view(model=B)
    def b_default(self, request):
        return 'b'

    App.commit()

    infos = get_path_and_view_info(App)

    for info in infos:
        info['filename'] = 'flurb.py'
        info['lineno'] = 17

    f = io()
    format_csv(f, 'excel', infos)

    s = f.getvalue()
    assert s == '''\