This is an automated email from the ASF dual-hosted git repository. brondsem pushed a commit to branch db/8360 in repository https://gitbox.apache.org/repos/asf/allura.git
commit 769c5c159192b3a35cb8b839002e0c678f0d4fad Author: Dave Brondsema <d...@brondsema.net> AuthorDate: Mon May 4 17:28:12 2020 -0400 [#8360] faster App.installable checks without instantiating apps, don't do query when ChatChannel app is instantiated --- Allura/allura/app.py | 2 ++ Allura/allura/ext/admin/admin_main.py | 3 +-- ForgeChat/forgechat/main.py | 6 +++++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Allura/allura/app.py b/Allura/allura/app.py index c206c3b..a631fb7 100644 --- a/Allura/allura/app.py +++ b/Allura/allura/app.py @@ -413,6 +413,8 @@ class Application(object): @classmethod def _installable(cls, tool_name, nbhd, project_tools): + if cls.installable is False: # handle class level `installable = False` declarations + return False if tool_name.lower() in nbhd.get_prohibited_tools(): return False tools_list = [tool.tool_name.lower() for tool in project_tools] diff --git a/Allura/allura/ext/admin/admin_main.py b/Allura/allura/ext/admin/admin_main.py index 8505439..5f96184 100644 --- a/Allura/allura/ext/admin/admin_main.py +++ b/Allura/allura/ext/admin/admin_main.py @@ -107,8 +107,7 @@ class AdminApp(Application): tools = [] for name, App in six.iteritems(g.entry_points['tool']): cfg = M.AppConfig(project_id=project._id, tool_name=name) - app = App(project, cfg) - if app.installable: + if App._installable(name, project.neighborhood, project.app_configs): tools.append(dict(name=name, app=App)) # prevent from saving temporary config to db session(cfg).expunge(cfg) diff --git a/ForgeChat/forgechat/main.py b/ForgeChat/forgechat/main.py index 4c7a43c..8742489 100644 --- a/ForgeChat/forgechat/main.py +++ b/ForgeChat/forgechat/main.py @@ -28,6 +28,7 @@ from tg import expose, validate, redirect, flash from tg.decorators import with_trailing_slash from tg import tmpl_context as c, request from formencode import validators +from ming.utils import LazyProperty # Pyforge-specific imports from allura.app import Application, ConfigOption, SitemapEntry, DefaultAdminController @@ -71,10 +72,13 @@ class ForgeChatApp(Application): def __init__(self, project, config): Application.__init__(self, project, config) - self.channel = CM.ChatChannel.query.get(app_config_id=config._id) self.root = RootController() self.admin = AdminController(self) + @LazyProperty + def channel(self): + return CM.ChatChannel.query.get(app_config_id=self.config._id) + def main_menu(self): return [SitemapEntry(self.config.options.mount_label, '.')]