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, '.')]
 

Reply via email to