From d30ccbdb5eb1b280bc15effc00fb18faa1d54cbf Mon Sep 17 00:00:00 2001 From: Gust Date: Tue, 20 Oct 2015 16:05:09 -0200 Subject: [PATCH] Generalized filters to support plugins' filters --- colab/plugins/utils/filters_importer.py | 22 ++++++++++++++++++++++ colab/search/templates/search/includes/search_filters.html | 10 ++++++---- colab/search/views.py | 146 +++++++++++++++++++++++++------------------------------------------------------------------------------------------------------------------------- 3 files changed, 53 insertions(+), 125 deletions(-) create mode 100644 colab/plugins/utils/filters_importer.py diff --git a/colab/plugins/utils/filters_importer.py b/colab/plugins/utils/filters_importer.py new file mode 100644 index 0000000..501fe1b --- /dev/null +++ b/colab/plugins/utils/filters_importer.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python + +import importlib + +from django.conf import settings + +def import_plugin_filters(request): + plugin_filters = {} + for app_name in settings.INSTALLED_APPS: + + module_name = '{}.filters'.format(app_name) + try: + module = importlib.import_module(module_name) + except ImportError: + continue + + get_filters = getattr(module, 'get_filters', None) + if get_filters: + plugin_filters.update(get_filters(request)) + + + return plugin_filters diff --git a/colab/search/templates/search/includes/search_filters.html b/colab/search/templates/search/includes/search_filters.html index 250ede2..5e237db 100644 --- a/colab/search/templates/search/includes/search_filters.html +++ b/colab/search/templates/search/includes/search_filters.html @@ -112,10 +112,12 @@ {% endif %}
diff --git a/colab/search/views.py b/colab/search/views.py index 4846e08..c01362e 100644 --- a/colab/search/views.py +++ b/colab/search/views.py @@ -4,7 +4,7 @@ from django.conf import settings from django.utils.translation import ugettext as _ from haystack.views import SearchView - +from colab.plugins.utils import filters_importer class ColabSearchView(SearchView): def extra_context(self, *args, **kwargs): @@ -16,6 +16,7 @@ class ColabSearchView(SearchView): types = { 'thread': { 'name': _(u'Discussion'), + 'icon': 'envelope', 'fields': ( ('author', _(u'Author'), self.request.GET.get('author')), ( @@ -26,113 +27,25 @@ class ColabSearchView(SearchView): ), }, } - # TODO: Replace for a more generic plugin architecture - # if settings.TRAC_ENABLED: - # types['wiki'] = { - # 'name': _(u'Wiki'), - # 'fields': ( - # ('author', _(u'Author'), self.request.GET.get('author')), - # ( - # 'collaborators', - # _(u'Collaborators'), - # self.request.GET.get('collaborators'), - # ), - # ), - # } - - # types['ticket'] = { - # 'name': _(u'Ticket'), - # 'fields': ( - # ( - # 'milestone', - # _(u'Milestone'), - # self.request.GET.get('milestone') - # ), - # ( - # 'priority', - # _(u'Priority'), - # self.request.GET.get('priority') - # ), - # ( - # 'component', - # _(u'Component'), - # self.request.GET.get('component') - # ), - # ( - # 'severity', - # _(u'Severity'), - # self.request.GET.get('severity') - # ), - # ( - # 'reporter', - # _(u'Reporter'), - # self.request.GET.get('reporter') - # ), - # ('author', _(u'Author'), self.request.GET.get('author')), - # ('tag', _(u'Status'), self.request.GET.get('tag')), - # ( - # 'keywords', - # _(u'Keywords'), - # self.request.GET.get('keywords'), - # ), - # ( - # 'collaborators', - # _(u'Collaborators'), - # self.request.GET.get('collaborators') - # ), - # ), - # } - - # types['changeset'] = { - # 'name': _(u'Changeset'), - # 'fields': ( - # ('author', _(u'Author'), self.request.GET.get('author')), - # ( - # 'repository_name', - # _(u'Repository'), - # self.request.GET.get('repository_name'), - # ), - # ) - # } - # types['user'] = { - # 'name': _(u'User'), - # 'fields': ( - # ( - # 'username', - # _(u'Username'), - # self.request.GET.get('username'), - # ), - # ('name', _(u'Name'), self.request.GET.get('name')), - # ( - # 'institution', - # _(u'Institution'), - # self.request.GET.get('institution'), - # ), - # ('role', _(u'Role'), self.request.GET.get('role')) - # ), - # } - - # types['attachment'] = { - # 'name': _(u'Attachment'), - # 'fields': ( - # ( - # 'filename', - # _(u'Filename'), - # self.request.GET.get('filename') - # ), - # ('author', _(u'Author'), self.request.GET.get('author')), - # ( - # 'used_by', - # _(u'Used by'), self.request.GET.get('used_by')), - # ( - # 'mimetype', - # _(u'File type'), - # self.request.GET.get('mimetype') - # ), - # ('size', _(u'Size'), self.request.GET.get('size')), - # ) - # } + types['user'] = { + 'name': _(u'User'), + 'icon': 'user', + 'fields': ( + ( + 'username', + _(u'Username'), + self.request.GET.get('username'), + ), + ('name', _(u'Name'), self.request.GET.get('name')), + ( + 'institution', + _(u'Institution'), + self.request.GET.get('institution'), + ), + ('role', _(u'Role'), self.request.GET.get('role')) + ), + } try: type_chosen = self.form.cleaned_data.get('type') @@ -143,26 +56,17 @@ class ColabSearchView(SearchView): size_choices = () used_by_choices = () - # if type_chosen == 'attachment': - # mimetype_choices = [ - # (type_, display) - # for type_, display, mimelist_ in settings.FILE_TYPE_GROUPINGS] - # size_choices = [ - # ('<500KB', u'< 500 KB'), - # ('500KB__10MB', u'>= 500 KB <= 10 MB'), - # ('>10MB', u'> 10 MB'), - # ] - # used_by_choices = set([ - # (v, v) for v in Attachment.objects.values_list('used_by', - # flat=True) - # ]) - mimetype_chosen = self.request.GET.get('mimetype') size_chosen = self.request.GET.get('size') used_by_chosen = self.request.GET.get('used_by') + types.update(filters_importer.import_plugin_filters(self.request)) + + filters_options = [(k, v['name'], v['icon']) \ + for (k,v) in types.iteritems()] return dict( filters=types.get(type_chosen), + filters_options=filters_options, type_chosen=type_chosen, order_data=settings.ORDERING_DATA, date_format=date_format, -- libgit2 0.21.2