Browse Source

Change how for_project works and clean up usage of plugins

David Cramer 12 years ago
parent
commit
ad58e60676

+ 7 - 7
src/sentry/filters/helpers.py

@@ -17,6 +17,7 @@ from django.utils.translation import ugettext_lazy as _
 from sentry.conf import settings
 from sentry.filters.base import TagFilter
 from sentry.plugins import plugins
+from sentry.utils.safe import safe_execute
 
 
 FILTER_CACHE = {}
@@ -53,13 +54,12 @@ def get_filters(model=None, project=None):
             filter_list.append(TAG_FILTER_CACHE[tag])
 
     # Add plugin-provided filters
-    for plugin in plugins.all():
-        if not plugin.is_enabled(project):
-            continue
-
-        for filter_cls in plugin.get_filters(project):
-            if filter_cls not in filter_list:
-                filter_list.append(filter_cls)
+    for plugin in plugins.for_project(project):
+        results = safe_execute(plugin.get_filters, project)
+        if results:
+            for filter_cls in results:
+                if filter_cls not in filter_list:
+                    filter_list.append(filter_cls)
 
     # yield all filters which support ``model``
     for filter_cls in filter_list:

+ 2 - 3
src/sentry/plugins/base.py

@@ -15,6 +15,7 @@ from django.core.urlresolvers import reverse
 from django.http import HttpResponseRedirect, HttpResponse
 
 from sentry.utils.managers import InstanceManager
+from sentry.utils.safe import safe_execute
 from threading import local
 
 
@@ -55,9 +56,7 @@ class PluginManager(InstanceManager):
 
     def for_project(self, project):
         for plugin in self.all():
-            if not plugin.is_enabled(project):
-                continue
-            if not plugin.has_project_conf():
+            if not safe_execute(plugin.is_enabled, project):
                 continue
             yield plugin
 

+ 2 - 3
src/sentry/tasks/post_process.py

@@ -16,9 +16,8 @@ def post_process_group(group, **kwargs):
     """
     Fires post processing hooks for a group.
     """
-    for plugin in plugins.all():
-        if safe_execute(plugin.is_enabled, group.project):
-            plugin_post_process_group.delay(plugin.slug, group=group, **kwargs)
+    for plugin in plugins.for_project(group.project):
+        plugin_post_process_group.delay(plugin.slug, group=group, **kwargs)
 
 
 @task(

+ 10 - 21
src/sentry/templatetags/sentry_plugins.py

@@ -18,10 +18,7 @@ def get_actions(group, request):
     project = group.project
 
     action_list = []
-    for plugin in plugins.all():
-        if not safe_execute(plugin.is_enabled, project):
-            continue
-
+    for plugin in plugins.for_project(project):
         results = safe_execute(plugin.actions, request, group, action_list)
 
         if not results:
@@ -37,10 +34,7 @@ def get_panels(group, request):
     project = group.project
 
     panel_list = []
-    for plugin in plugins.all():
-        if not safe_execute(plugin.is_enabled, project):
-            continue
-
+    for plugin in plugins.for_project(project):
         results = safe_execute(plugin.panels, request, group, panel_list)
 
         if not results:
@@ -55,10 +49,7 @@ def get_panels(group, request):
 def get_widgets(group, request):
     project = group.project
 
-    for plugin in plugins.all():
-        if not safe_execute(plugin.is_enabled, project):
-            continue
-
+    for plugin in plugins.for_project(project):
         resp = safe_execute(plugin.widget, request, group)
 
         if resp:
@@ -70,10 +61,7 @@ def get_tags(group, request):
     project = group.project
 
     tag_list = []
-    for plugin in plugins.all():
-        if not safe_execute(plugin.is_enabled, project):
-            continue
-
+    for plugin in plugins.for_project(project):
         results = safe_execute(plugin.tags, request, group, tag_list)
 
         if not results:
@@ -100,10 +88,7 @@ def handle_before_events(request, event_list):
         else:
             project = None
 
-    for plugin in plugins.all():
-        if not safe_execute(plugin.is_enabled, project):
-            continue
-
+    for plugin in plugins.for_project(project):
         safe_execute(plugin.before_events, request, event_list)
 
     return ''
@@ -111,7 +96,11 @@ def handle_before_events(request, event_list):
 
 @register.filter
 def get_plugins(project):
-    return list(plugins.for_project(project))
+    results = []
+    for plugin in plugins.for_project(project):
+        if plugin.has_project_conf():
+            results.append(plugin)
+    return results
 
 
 @register.filter