From b4181240499b4bf1e6522057be7cae7b83956207 Mon Sep 17 00:00:00 2001 From: Ilgiz Islamgulov Date: Aug 15 2013 16:09:16 +0000 Subject: added spin type filters --- diff --git a/blockerbugs/controllers/admin.py b/blockerbugs/controllers/admin.py index 008c717..1f09604 100644 --- a/blockerbugs/controllers/admin.py +++ b/blockerbugs/controllers/admin.py @@ -27,6 +27,9 @@ from flask.helpers import flash from flask.ext.admin.contrib import sqlamodel from flask.ext.admin.contrib.sqlamodel.fields import QuerySelectMultipleField from flask.ext.admin.contrib.sqlamodel.form import AdminModelConverter +from flask.ext.admin.model import filters +from flask.ext.admin.contrib.sqlamodel.filters import FilterConverter, \ + BaseSQLAFilter from flask.ext.admin.model.form import converts from flask.ext.admin.babel import gettext from flask.ext.admin import expose @@ -201,10 +204,42 @@ class SelectBuildsTagsField(wtf.Field): return u','.join((b.nvr for b in self.data)) if self.data else u'' +class DeclEnumEqualFilter(BaseSQLAFilter): + def __init__(self, column, name, options=None, data_type=None): + super(DeclEnumEqualFilter, self).__init__(column, name, options, data_type) + + def get_options(self, view): + return [(k, k) for k in self.options.keys()] + + def apply(self, query, raw_value): + value = self.options[raw_value] + return query.filter(self.column == value) + + def operation(self): + return gettext('equal') + + +class SpinFilterConvert(FilterConverter): + _column_types = { + 'state': SpinState, + 'spin type': SpinType, + } + + @filters.convert('DeclEnumType') + def conv_enum(self, column, name, options=None, **kwargs): + if not options: + decl_enum = self._column_types[name.lower()] + options = dict((unicode(k), v) for k, v in decl_enum._reg.items()) + + return [DeclEnumEqualFilter(column, name, options, **kwargs)] + + class SpinView(MyModelView): form_excluded_columns = ('date_created', 'date_requested') column_searchable_list = [Spin.name] model_form_converter = DeclEnumModelConverter + column_filters = (Spin.state, Spin.spin_type, ) + filter_converter = SpinFilterConvert() form_overrides = {'builds': SelectBuildsTagsField} @expose('/new/', methods=('GET', 'POST'))