##// END OF EJS Templates
env-variables: make it safer if there's a syntax problem inside .ini file....
env-variables: make it safer if there's a syntax problem inside .ini file. It's better to not crash, since it means server wont start. Let users fix problems instead of breaking the startup because of that.

File last commit:

r2907:5eed39e5 default
r3237:5cf82ecc default
Show More
navigation.py
146 lines | 5.1 KiB | text/x-python | PythonLexer
admin: moved admin pyramid into apps.
r1503 # -*- coding: utf-8 -*-
release: update copyright year to 2018
r2487 # Copyright (C) 2016-2018 RhodeCode GmbH
admin: moved admin pyramid into apps.
r1503 #
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License, version 3
# (only), as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# This program is dual-licensed. If you wish to learn more about the
# RhodeCode Enterprise Edition, including its added features, Support services,
# and proprietary license terms, please see https://rhodecode.com/licenses/
import logging
import collections
from zope.interface import implementer
from rhodecode.apps.admin.interfaces import IAdminNavigationRegistry
navigation: moved registration of nav registry to it's own function....
r2327 from rhodecode.lib.utils2 import str2bool
admin: moved admin pyramid into apps.
r1503 from rhodecode.translation import _
log = logging.getLogger(__name__)
navigation: allow specifing more than one active element to set as one selecting current navlist entry.
r2399 NavListEntry = collections.namedtuple(
'NavListEntry', ['key', 'name', 'url', 'active_list'])
admin: moved admin pyramid into apps.
r1503
class NavEntry(object):
"""
Represents an entry in the admin navigation.
:param key: Unique identifier used to store reference in an OrderedDict.
:param name: Display name, usually a translation string.
:param view_name: Name of the view, used generate the URL.
navigation: allow specifing more than one active element to set as one selecting current navlist entry.
r2399 :param active_list: list of urls that we select active for this element
admin: moved admin pyramid into apps.
r1503 """
navigation: allow specifing more than one active element to set as one selecting current navlist entry.
r2399 def __init__(self, key, name, view_name, active_list=None):
admin: moved admin pyramid into apps.
r1503 self.key = key
self.name = name
self.view_name = view_name
navigation: allow specifing more than one active element to set as one selecting current navlist entry.
r2399 self._active_list = active_list or []
admin: moved admin pyramid into apps.
r1503
def generate_url(self, request):
admin: ported settings controller to pyramid....
r2333 return request.route_path(self.view_name)
admin: moved admin pyramid into apps.
r1503
def get_localized_name(self, request):
admin: ported settings controller to pyramid....
r2333 return request.translate(self.name)
admin: moved admin pyramid into apps.
r1503
navigation: allow specifing more than one active element to set as one selecting current navlist entry.
r2399 @property
def active_list(self):
active_list = [self.key]
if self._active_list:
active_list = self._active_list
return active_list
admin: moved admin pyramid into apps.
r1503
@implementer(IAdminNavigationRegistry)
class NavigationRegistry(object):
_base_entries = [
admin: ported settings controller to pyramid....
r2333 NavEntry('global', _('Global'),
'admin_settings_global'),
NavEntry('vcs', _('VCS'),
'admin_settings_vcs'),
NavEntry('visual', _('Visual'),
'admin_settings_visual'),
NavEntry('mapping', _('Remap and Rescan'),
'admin_settings_mapping'),
admin: moved admin pyramid into apps.
r1503 NavEntry('issuetracker', _('Issue Tracker'),
'admin_settings_issuetracker'),
admin: ported settings controller to pyramid....
r2333 NavEntry('email', _('Email'),
'admin_settings_email'),
NavEntry('hooks', _('Hooks'),
'admin_settings_hooks'),
NavEntry('search', _('Full Text Search'),
'admin_settings_search'),
admin: moved admin pyramid into apps.
r1503 NavEntry('integrations', _('Integrations'),
admin: ported settings controller to pyramid....
r2333 'global_integrations_home'),
admin: moved admin pyramid into apps.
r1503 NavEntry('system', _('System Info'),
admin: ported settings controller to pyramid....
r2333 'admin_settings_system'),
exceptions: added new exception tracking capability....
r2907 NavEntry('exceptions', _('Exceptions Tracker'),
'admin_settings_exception_tracker',
active_list=['exceptions', 'exceptions_browse']),
process-managemet: added simple page to monitor worker processes of RhodeCode.
r1885 NavEntry('process_management', _('Processes'),
admin: ported settings controller to pyramid....
r2333 'admin_settings_process_management'),
admin: moved admin pyramid into apps.
r1503 NavEntry('sessions', _('User Sessions'),
admin: ported settings controller to pyramid....
r2333 'admin_settings_sessions'),
admin: moved admin pyramid into apps.
r1503 NavEntry('open_source', _('Open Source Licenses'),
admin: ported settings controller to pyramid....
r2333 'admin_settings_open_source'),
automation: add EE feature placeholder
r2637 NavEntry('automation', _('Automation'),
'admin_settings_automation')
admin: moved admin pyramid into apps.
r1503 ]
admin: ported settings controller to pyramid....
r2333 _labs_entry = NavEntry('labs', _('Labs'),
'admin_settings_labs')
admin: moved admin pyramid into apps.
r1503
def __init__(self, labs_active=False):
navigation: change the code for pep8 to stop complaining
r2323 self._registered_entries = collections.OrderedDict()
for item in self.__class__._base_entries:
self._registered_entries[item.key] = item
admin: moved admin pyramid into apps.
r1503
if labs_active:
self.add_entry(self._labs_entry)
def add_entry(self, entry):
self._registered_entries[entry.key] = entry
def get_navlist(self, request):
navlist = [NavListEntry(i.key, i.get_localized_name(request),
navigation: allow specifing more than one active element to set as one selecting current navlist entry.
r2399 i.generate_url(request), i.active_list)
admin: moved admin pyramid into apps.
r1503 for i in self._registered_entries.values()]
return navlist
navigation: allow passing already found registry
r2324 def navigation_registry(request, registry=None):
admin: moved admin pyramid into apps.
r1503 """
Helper that returns the admin navigation registry.
"""
pylons: remove pylons as dependency...
r2351 pyramid_registry = registry or request.registry
admin: moved admin pyramid into apps.
r1503 nav_registry = pyramid_registry.queryUtility(IAdminNavigationRegistry)
return nav_registry
def navigation_list(request):
"""
Helper that returns the admin navigation as list of NavListEntry objects.
"""
return navigation_registry(request).get_navlist(request)
navigation: moved registration of nav registry to it's own function....
r2327
def includeme(config):
# Create admin navigation registry and add it to the pyramid registry.
settings = config.get_settings()
labs_active = str2bool(settings.get('labs_settings_active', False))
navigation_registry = NavigationRegistry(labs_active=labs_active)
config.registry.registerUtility(navigation_registry)