##// END OF EJS Templates
feat(configs): deprecared old hooks protocol and ssh wrapper....
feat(configs): deprecared old hooks protocol and ssh wrapper. New defaults are now set on v2 keys, so previous installation are automatically set to new keys. Fallback mode is still available.

File last commit:

r5137:f3cd5ebe default
r5496:cab50adf default
Show More
navigation.py
152 lines | 5.0 KiB | text/x-python | PythonLexer
application: re-organize imports for pyramid to prepare code for speedup optimization.
r3238
apps: various fixes and improvements for python3
r5072 import dataclasses
copyrights: updated for 2023
r5088 # Copyright (C) 2016-2023 RhodeCode GmbH
application: re-organize imports for pyramid to prepare code for speedup optimization.
r3238 #
# 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._base.interfaces import IAdminNavigationRegistry
from rhodecode.lib.utils2 import str2bool
from rhodecode.translation import _
log = logging.getLogger(__name__)
apps: various fixes and improvements for python3
r5072
@dataclasses.dataclass
class NavListEntry:
key: str
name: str
url: str
active_list: list
application: re-organize imports for pyramid to prepare code for speedup optimization.
r3238
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.
:param active_list: list of urls that we select active for this element
"""
def __init__(self, key, name, view_name, active_list=None):
self.key = key
self.name = name
self.view_name = view_name
self._active_list = active_list or []
def generate_url(self, request):
return request.route_path(self.view_name)
def get_localized_name(self, request):
return request.translate(self.name)
@property
def active_list(self):
active_list = [self.key]
if self._active_list:
active_list = self._active_list
return active_list
@implementer(IAdminNavigationRegistry)
class NavigationRegistry(object):
_base_entries = [
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'),
NavEntry('issuetracker', _('Issue Tracker'),
'admin_settings_issuetracker'),
NavEntry('email', _('Email'),
'admin_settings_email'),
NavEntry('hooks', _('Hooks'),
'admin_settings_hooks'),
NavEntry('search', _('Full Text Search'),
'admin_settings_search'),
NavEntry('system', _('System Info'),
'admin_settings_system'),
NavEntry('exceptions', _('Exceptions Tracker'),
'admin_settings_exception_tracker',
active_list=['exceptions', 'exceptions_browse']),
NavEntry('process_management', _('Processes'),
'admin_settings_process_management'),
NavEntry('sessions', _('User Sessions'),
'admin_settings_sessions'),
NavEntry('open_source', _('Open Source Licenses'),
'admin_settings_open_source'),
]
_labs_entry = NavEntry('labs', _('Labs'),
'admin_settings_labs')
def __init__(self, labs_active=False):
self._registered_entries = collections.OrderedDict()
for item in self.__class__._base_entries:
apps: various fixes and improvements for python3
r5072 self.add_entry(item)
application: re-organize imports for pyramid to prepare code for speedup optimization.
r3238
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):
core: change from homebrew plugin system into pyramid machinery....
r3240 nav_list = [
NavListEntry(i.key, i.get_localized_name(request),
i.generate_url(request), i.active_list)
apps: various fixes and improvements for python3
r5072 for i in self._registered_entries.values()
]
core: change from homebrew plugin system into pyramid machinery....
r3240 return nav_list
application: re-organize imports for pyramid to prepare code for speedup optimization.
r3238
def navigation_registry(request, registry=None):
"""
Helper that returns the admin navigation registry.
"""
pyramid_registry = registry or request.registry
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)
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))
core: change from homebrew plugin system into pyramid machinery....
r3240 navigation_registry_instance = NavigationRegistry(labs_active=labs_active)
config.registry.registerUtility(navigation_registry_instance)
logging: fixed typo
r4824 log.debug('Created new navigation instance, %s', navigation_registry_instance)
application: not use config.scan(), and replace all @add_view decorator into a explicit add_view call for faster app start.
r4610