Exemple #1
0
        def test_blueprint(self):
            Menu(self.app)
            blueprint = Blueprint('foo', 'foo', url_prefix="/foo")

            @self.app.route('/test')
            @register_menu(self.app, '.', 'Test')
            def test():
                return 'test'

            @blueprint.route('/bar')
            @register_menu(blueprint, 'bar', 'Foo Bar')
            def bar():
                return 'bar'

            self.app.register_blueprint(blueprint)

            with self.app.test_client() as c:
                c.get('/test')
                assert request.endpoint == 'test'
                assert current_menu.text == 'Test'

            with self.app.test_client() as c:
                c.get('/foo/bar')
                self.assertEqual(current_menu.submenu('bar').text, 'Foo Bar')
                self.assertTrue(current_menu.submenu('bar').active)
Exemple #2
0
    def test_blueprint(self):
        Menu(self.app)
        blueprint = Blueprint('foo', 'foo', url_prefix="/foo")

        @self.app.route('/test')
        @register_menu(self.app, '.', 'Test')
        def test():
            return 'test'

        @blueprint.route('/bar')
        @register_menu(blueprint, 'bar', 'Foo Bar')
        def bar():
            return 'bar'

        self.app.register_blueprint(blueprint)

        with self.app.test_client() as c:
            c.get('/test')
            assert request.endpoint == 'test'
            assert current_menu.text == 'Test'

        with self.app.test_client() as c:
            c.get('/foo/bar')
            self.assertEqual(current_menu.submenu('bar').text, 'Foo Bar')
            self.assertTrue(current_menu.submenu('bar').active)
Exemple #3
0
 def menu_fixup():
     item = current_menu.submenu("settings.groups")
     item.hide()
     item = current_menu.submenu("settings.workflows")
     item.hide()
     item = current_menu.submenu("settings.applications")
     item.hide()
     item = current_menu.submenu("settings.oauthclient")
     item.hide()
Exemple #4
0
    def test_simple_app(self):
        Menu(self.app)

        @self.app.route('/test')
        @register_menu(self.app, '.', 'Test')
        def test():
            return 'test'

        @self.app.route('/level2')
        @register_menu(self.app, 'level2', 'Level 2')
        def level2():
            return 'level2'

        @self.app.route('/level3')
        @register_menu(self.app, 'level2.level3', 'Level 3', order=2)
        def level3():
            return 'level3'

        @self.app.route('/level3B')
        @register_menu(self.app, 'level2.level3B', 'Level 3B', order=1)
        def level3B():
            return 'level3B'

        with self.app.test_client() as c:
            c.get('/test')
            assert request.endpoint == 'test'
            assert current_menu.url == '/test'
            assert current_menu.text == 'Test'
            assert current_menu.active
            self.assertEqual(current_menu.submenu('level2').text, 'Level 2')
            assert not current_menu.submenu('level2').active
            assert current_menu.submenu('missing', auto_create=False) is None
            assert len(current_menu.list_path('.', '.level2.level3')) == 3
            assert current_menu.list_path('.', 'missing') is None
            assert current_menu.list_path('missing', '.level2.level3') is None
            assert current_menu.list_path('level2.level3B',
                                          'level2.level3') is None

        with self.app.test_client() as c:
            c.get('/level2')
            assert current_menu.submenu('level2').active

        with self.app.test_client() as c:
            c.get('/level3')
            assert current_menu.submenu('.level2.level3').active
            assert current_menu.submenu('level2.level3').active
            item_2 = current_menu.submenu('level2.level3')
            item_1 = current_menu.submenu('level2.level3B')
            assert item_1.order < item_2.order
            assert item_1 == current_menu.submenu('level2').children[0]
            assert item_2 == current_menu.submenu('level2').children[1]
Exemple #5
0
    def test_active_when(self):
        Menu(self.app)

        @self.app.route('/always')
        @register_menu(self.app, 'always', 'Always', active_when=lambda: True)
        def always():
            return 'never'

        @self.app.route('/never')
        @register_menu(self.app, 'never', 'Never', active_when=lambda: False)
        def never():
            return 'never'

        @self.app.route('/normal')
        @register_menu(self.app, 'normal', 'Normal')
        def normal():
            return 'normal'

        data = {
            'never': {'never': False, 'always': True, 'normal': False},
            'always': {'never': False, 'always': True, 'normal': False},
            'normal': {'never': False, 'always': True, 'normal': True},
        }
        for (k, v) in data.items():
            with self.app.test_client() as c:
                c.get('/' + k)
                for (endpoint, active) in v.items():
                    self.assertEqual(current_menu.submenu(endpoint).active,
                                     active)
Exemple #6
0
    def menu_fixup():
        # Change order
        item = current_menu.submenu("main.communities")
        item._order = 2

        # Change order and text
        item = current_menu.submenu("main.webdeposit")
        item._text = "Upload"
        item._order = 4

        item = current_menu.submenu("breadcrumbs.webdeposit")
        item._text = "Upload"

        # Remove item
        item = current_menu.submenu("main")
        item._child_entries.pop('documentation', None)
Exemple #7
0
    def test_dynamic_url(self):
        Menu(self.app)

        @self.app.route('/<int:id>/<string:name>')
        @register_menu(self.app, 'test', 'Test',
                       endpoint_arguments_constructor=lambda: {
                           'id': request.view_args['id'],
                           'name': request.view_args['name'],
                           })
        def test(id, name):
            return str(id) + ':' + name

        with self.app.test_request_context():
            url = url_for('test', id=1, name='foo')

        with self.app.test_client() as c:
            c.get(url)
            assert url == current_menu.submenu('test').url
            assert current_menu.submenu('missing').url == '#'
Exemple #8
0
    def test_dynamic_url(self):
        Menu(self.app)

        @self.app.route('/<int:id>/<string:name>')
        @register_menu(self.app,
                       'test',
                       'Test',
                       endpoint_arguments_constructor=lambda: {
                           'id': request.view_args['id'],
                           'name': request.view_args['name'],
                       })
        def test(id, name):
            return str(id) + ':' + name

        with self.app.test_request_context():
            url = url_for('test', id=1, name='foo')

        with self.app.test_client() as c:
            c.get(url)
            assert url == current_menu.submenu('test').url
            assert current_menu.submenu('missing').url == '#'
Exemple #9
0
    def test_kwargs(self):
        """Test optional arguments."""
        Menu(self.app)
        count = 5

        @self.app.route('/test')
        @register_menu(self.app, 'test', 'Test', count=count)
        def test():
            return 'count'

        with self.app.test_client() as c:
            c.get('/test')
            assert count == current_menu.submenu('test').count
Exemple #10
0
    def test_kwargs(self):
        """Test optional arguments."""
        Menu(self.app)
        count = 5

        @self.app.route('/test')
        @register_menu(self.app, 'test', 'Test', count=count)
        def test():
            return 'count'

        with self.app.test_client() as c:
            c.get('/test')
            assert count == current_menu.submenu('test').count
Exemple #11
0
    def test_active_when(self):
        Menu(self.app)

        @self.app.route('/always')
        @register_menu(self.app, 'always', 'Always', active_when=lambda: True)
        def always():
            return 'never'

        @self.app.route('/never')
        @register_menu(self.app, 'never', 'Never', active_when=lambda: False)
        def never():
            return 'never'

        @self.app.route('/normal')
        @register_menu(
            self.app,
            'normal',
            'Normal',
            active_when=lambda self: request.endpoint == self._endpoint)
        def normal():
            return 'normal'

        data = {
            'never': {
                'never': False,
                'always': True,
                'normal': False
            },
            'always': {
                'never': False,
                'always': True,
                'normal': False
            },
            'normal': {
                'never': False,
                'always': True,
                'normal': True
            },
        }
        for (k, v) in data.items():
            with self.app.test_client() as c:
                c.get('/' + k)
                for (endpoint, active) in v.items():
                    self.assertEqual(
                        current_menu.submenu(endpoint).active, active)
Exemple #12
0
    def menu_fixup():
        # Change order
        item = current_menu.submenu("main.communities")
        item._order = 2

        # Change order and text
        item = current_menu.submenu("main.webdeposit")
        item._text = "Upload"
        item._order = 4

        item = current_menu.submenu("breadcrumbs.webdeposit")
        item._text = "Upload"

        # Remove items
        item = current_menu.submenu("main")
        item._child_entries.pop('documentation', None)

        item = current_menu.submenu("settings.groups")
        item.hide()
        item = current_menu.submenu("settings.workflows")
        item.hide()

        item = current_menu.submenu("main.getstarted.preservation")
        item.hide()
Exemple #13
0
    def menu_fixup():
        # Change order
        item = current_menu.submenu("main.communities")
        item._order = 2

        # Change order and text
        item = current_menu.submenu("main.webdeposit")
        item._text = "Upload"
        item._order = 4

        item = current_menu.submenu("breadcrumbs.webdeposit")
        item._text = "Upload"

        # Remove items
        item = current_menu.submenu("main")
        item._child_entries.pop('documentation', None)

        item = current_menu.submenu("settings.groups")
        item.hide()
        item = current_menu.submenu("settings.workflows")
        item.hide()

        item = current_menu.submenu("main.getstarted.preservation")
        item.hide()
Exemple #14
0
def register_menu_items():
    """Setup menu for Zenodo."""
    item = current_menu.submenu('breadcrumbs.zenodo_base')
    item.register('', '')

    item = current_menu.submenu('main.browse')
    item.register('', _('Browse'), order=3)

    item = current_menu.submenu('main.browse.datasets')
    item.register('search.collection',
                  _('Datasets'),
                  order=1,
                  endpoint_arguments_constructor=lambda: dict(name='datasets'))

    item = current_menu.submenu('main.browse.images')
    item.register('search.collection',
                  _('Images'),
                  order=2,
                  endpoint_arguments_constructor=lambda: dict(name='images'))

    item = current_menu.submenu('main.browse.posters')
    item.register('search.collection',
                  _('Posters'),
                  order=3,
                  endpoint_arguments_constructor=lambda: dict(name='posters'))

    item = current_menu.submenu('main.browse.presentations')
    item.register(
        'search.collection',
        _('Presentations'),
        order=4,
        endpoint_arguments_constructor=lambda: dict(name='presentations'))

    item = current_menu.submenu('main.browse.publications')
    item.register(
        'search.collection',
        _('Publications'),
        order=5,
        endpoint_arguments_constructor=lambda: dict(name='publications'))

    item = current_menu.submenu('main.browse.software')
    item.register('search.collection',
                  _('Software'),
                  order=6,
                  endpoint_arguments_constructor=lambda: dict(name='software'))

    item = current_menu.submenu('main.browse.videos')
    item.register('search.collection',
                  _('Video/Audio'),
                  order=7,
                  endpoint_arguments_constructor=lambda: dict(name='videos'))

    item = current_menu.submenu('main.getstarted')
    item.register('', _('Get started'), order=5)

    def menu_fixup():
        # Change order
        item = current_menu.submenu("main.communities")
        item._order = 2

        # Change order and text
        item = current_menu.submenu("main.webdeposit")
        item._text = "Upload"
        item._order = 4

        item = current_menu.submenu("breadcrumbs.webdeposit")
        item._text = "Upload"

        # Remove items
        item = current_menu.submenu("main")
        item._child_entries.pop('documentation', None)

        item = current_menu.submenu("settings.groups")
        item.hide()
        item = current_menu.submenu("settings.workflows")
        item.hide()

        item = current_menu.submenu("main.getstarted.preservation")
        item.hide()

    # Append function to end of before first request functions, to ensure
    # all menu items have been loaded.
    current_app.before_first_request_funcs.append(menu_fixup)
Exemple #15
0
def register_menu_items():
    """Setup menu for Zenodo."""
    item = current_menu.submenu('breadcrumbs.zenodo_base')
    item.register('', '')

    item = current_menu.submenu('main.browse')
    item.register(
        '', _('Browse'), order=3,
        active_when=lambda: request.endpoint.startswith("search.collection")
    )

    item = current_menu.submenu('main.browse.datasets')
    item.register(
        'search.collection', _('Datasets'), order=1,
        endpoint_arguments_constructor=lambda: dict(name='datasets')
    )

    item = current_menu.submenu('main.browse.images')
    item.register(
        'search.collection', _('Images'), order=2,
        endpoint_arguments_constructor=lambda: dict(name='images')
    )

    item = current_menu.submenu('main.browse.lessons')
    item.register(
        'search.collection', _('Lessons'), order=2,
        endpoint_arguments_constructor=lambda: dict(name='lessons')
    )

    item = current_menu.submenu('main.browse.posters')
    item.register(
        'search.collection', _('Posters'), order=3,
        endpoint_arguments_constructor=lambda: dict(name='posters')
    )

    item = current_menu.submenu('main.browse.presentations')
    item.register(
        'search.collection', _('Presentations'), order=4,
        endpoint_arguments_constructor=lambda: dict(name='presentations')
    )

    item = current_menu.submenu('main.browse.publications')
    item.register(
        'search.collection', _('Publications'), order=5,
        endpoint_arguments_constructor=lambda: dict(name='publications')
    )

    item = current_menu.submenu('main.browse.software')
    item.register(
        'search.collection', _('Software'), order=6,
        endpoint_arguments_constructor=lambda: dict(name='software')
    )

    item = current_menu.submenu('main.browse.videos')
    item.register(
        'search.collection', _('Video/Audio'), order=7,
        endpoint_arguments_constructor=lambda: dict(name='videos')
    )

    item = current_menu.submenu('main.getstarted')
    item.register(
        '', _('Get started'), order=5,
        active_when=lambda: request.endpoint.startswith("zenodo_base.")
    )

    def menu_fixup():
        # Change order
        item = current_menu.submenu("main.communities")
        item._order = 2

        # Change order and text
        item = current_menu.submenu("main.webdeposit")
        item._text = "Upload"
        item._order = 4

        item = current_menu.submenu("breadcrumbs.webdeposit")
        item._text = "Upload"

        # Remove items
        item = current_menu.submenu("main")
        item._child_entries.pop('documentation', None)

        item = current_menu.submenu("settings.groups")
        item.hide()
        item = current_menu.submenu("settings.workflows")
        item.hide()

        item = current_menu.submenu("main.getstarted.preservation")
        item.hide()

    # Append function to end of before first request functions, to ensure
    # all menu items have been loaded.
    current_app.before_first_request_funcs.append(menu_fixup)
Exemple #16
0
 def menu_fixup():
     current_menu.submenu("settings.change_password").hide()
     current_menu.submenu("settings.groups").hide()
     current_menu.submenu("settings.workflows").hide()
     current_menu.submenu("settings.applications").hide()
     current_menu.submenu("settings.oauthclient").hide()
Exemple #17
0
def register_menu_items():
    item = current_menu.submenu('breadcrumbs.settings')
    item.register('', _('Account'))
Exemple #18
0
    def test_active_when(self):
        Menu(self.app)

        @self.app.route('/')
        @register_menu(self.app, 'root', 'Root')
        def root():
            return 'root'

        @self.app.route('/always')
        @register_menu(self.app, 'always', 'Always', active_when=lambda: True)
        def always():
            return 'always'

        @self.app.route('/never')
        @register_menu(self.app, 'never', 'Never', active_when=lambda: False)
        def never():
            return 'never'

        @self.app.route('/normal')
        @register_menu(self.app, 'normal', 'Normal')
        def normal():
            return 'normal'

        data = {
            '/never': {
                'root':   False,
                'never':  False,
                'always': True,
                'normal': False
            },
            '/always': {
                'root':   False,
                'never':  False,
                'always': True,
                'normal': False
            },
            '/normal': {
                'root':   False,
                'never':  False,
                'always': True,
                'normal': True
            },
            '/normal/foo': {
                'root':   False,
                'never':  False,
                'always': True,
                'normal': True
            },
            '/bar/normal': {
                'root':   False,
                'never':  False,
                'always': True,
                'normal': False
            },
            '/bar/normal/foo': {
                'root':   False,
                'never':  False,
                'always': True,
                'normal': False
            },
            '/': {
                'root':   True,
                'never':  False,
                'always': True,
                'normal': False
            },
            '': {
                'root':   True,
                'never':  False,
                'always': True,
                'normal': False
            },
        }
        for (path, testset) in data.items():
            with self.app.test_client() as c:
                c.get(path)
                for (endpoint, active_should) in testset.items():
                    active_is = current_menu.submenu(endpoint).active
                    self.assertEqual(
                        active_is,
                        active_should,
                        'path="{0}" submenu_by_endpoint="{1}" '
                        'active_is={2} active_should={3}'.format(
                            path,
                            endpoint,
                            active_is,
                            active_should
                        )
                    )
Exemple #19
0
 def menu_fixup():
     current_menu.submenu("settings.change_password").hide()
     current_menu.submenu("settings.groups").hide()
     current_menu.submenu("settings.workflows").hide()
     current_menu.submenu("settings.applications").hide()
     current_menu.submenu("settings.oauthclient").hide()
Exemple #20
0
def register_menu_items():
    """Register empty account breadcrumb."""
    item = current_menu.submenu('breadcrumbs.settings')
    item.register('', _('Account'))
Exemple #21
0
    def test_visible_when(self):
        Menu(self.app)

        @self.app.route('/always')
        @register_menu(self.app, 'always', 'Always', visible_when=lambda: True)
        def always():
            return 'never'

        @self.app.route('/never')
        @register_menu(self.app, 'never', 'Never', visible_when=lambda: False)
        def never():
            return 'never'

        @self.app.route('/normal')
        @register_menu(self.app, 'normal', 'Normal')
        def normal():
            return 'normal'

        data = {
            'never': {
                'never': False,
                'always': True,
                'normal': True
            },
            'always': {
                'never': False,
                'always': True,
                'normal': True
            },
            'normal': {
                'never': False,
                'always': True,
                'normal': True
            },
        }
        for (k, v) in data.items():
            with self.app.test_client() as c:
                c.get('/' + k)
                for (endpoint, visible) in v.items():
                    self.assertEqual(
                        current_menu.submenu(endpoint).visible, visible)

        with self.app.test_request_context():
            current_menu.submenu('always').hide()

        data = {
            'never': {
                'never': False,
                'always': False,
                'normal': True
            },
            'always': {
                'never': False,
                'always': False,
                'normal': True
            },
            'normal': {
                'never': False,
                'always': False,
                'normal': True
            },
        }
        for (k, v) in data.items():
            with self.app.test_client() as c:
                c.get('/' + k)
                for (endpoint, visible) in v.items():
                    self.assertEqual(
                        current_menu.submenu(endpoint).visible, visible)
Exemple #22
0
    def test_simple_app(self):
        Menu(self.app)

        @self.app.route('/test')
        @register_menu(self.app, '.', 'Test')
        def test():
            return 'test'

        @self.app.route('/level2')
        @register_menu(self.app, 'level2', 'Level 2')
        def level2():
            return 'level2'

        @self.app.route('/level3')
        @register_menu(self.app, 'level2.level3', 'Level 3', order=2)
        def level3():
            return 'level3'

        @self.app.route('/level3B')
        @register_menu(self.app, 'level2.level3B', 'Level 3B', order=1)
        def level3B():
            return 'level3B'

        with self.app.test_client() as c:
            c.get('/test')
            assert request.endpoint == 'test'
            assert current_menu.url == '/test'
            assert current_menu.text == 'Test'
            assert current_menu.active
            self.assertEqual(current_menu.submenu('level2').text, 'Level 2')
            assert not current_menu.submenu('level2').active
            assert current_menu.submenu('missing', auto_create=False) is None
            assert len(current_menu.list_path('.', '.level2.level3')) == 3
            assert current_menu.list_path('.', 'missing') is None
            assert current_menu.list_path('missing', '.level2.level3') is None
            assert current_menu.list_path('level2.level3B',
                                          'level2.level3') is None

        with self.app.test_client() as c:
            c.get('/level2')
            assert current_menu.submenu('level2').active

        with self.app.test_client() as c:
            c.get('/level3')
            assert current_menu.submenu('.level2.level3').active
            assert current_menu.submenu('level2.level3').active

            assert not current_menu.has_active_child(recursive=False)
            assert current_menu.has_active_child()
            assert current_menu.submenu('level2').has_active_child(
                recursive=False)
            assert current_menu.submenu('level2').has_active_child()

            item_2 = current_menu.submenu('level2.level3')
            item_1 = current_menu.submenu('level2.level3B')
            assert item_1.order < item_2.order
            assert item_1 == current_menu.submenu('level2').children[0]
            assert item_2 == current_menu.submenu('level2').children[1]