From 25951c0080f21fe4485866111a223630b15ee0e6 Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Tue, 7 May 2013 17:39:05 -0700 Subject: [PATCH] Added `AutocompleteView`. --- rattail/pyramid/views/__init__.py | 1 + rattail/pyramid/views/autocomplete.py | 61 +++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 rattail/pyramid/views/autocomplete.py diff --git a/rattail/pyramid/views/__init__.py b/rattail/pyramid/views/__init__.py index 3a2c4606..a8b3fc05 100644 --- a/rattail/pyramid/views/__init__.py +++ b/rattail/pyramid/views/__init__.py @@ -27,6 +27,7 @@ """ from rattail.pyramid.views.crud import * +from rattail.pyramid.views.autocomplete import * def includeme(config): diff --git a/rattail/pyramid/views/autocomplete.py b/rattail/pyramid/views/autocomplete.py new file mode 100644 index 00000000..abb76b3c --- /dev/null +++ b/rattail/pyramid/views/autocomplete.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +################################################################################ +# +# Rattail -- Retail Software Framework +# Copyright © 2010-2012 Lance Edgar +# +# This file is part of Rattail. +# +# Rattail is free software: you can redistribute it and/or modify it under the +# terms of the GNU Affero General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) +# any later version. +# +# Rattail is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for +# more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with Rattail. If not, see . +# +################################################################################ + +""" +``rattail.pyramid.views.autocomplete`` -- Autocomplete View +""" + +from edbob.pyramid.views import View +from edbob.pyramid import Session + + +__all__ = ['AutocompleteView'] + + +class AutocompleteView(View): + + def filter_query(self, q): + return q + + def make_query(self, query): + q = Session.query(self.mapped_class) + q = self.filter_query(q) + q = q.filter(getattr(self.mapped_class, self.fieldname).ilike('%%%s%%' % query)) + q = q.order_by(getattr(self.mapped_class, self.fieldname)) + return q + + def query(self, query): + return self.make_query(query) + + def display(self, instance): + return getattr(instance, self.fieldname) + + def __call__(self): + term = self.request.params.get('term') + if term: + term = term.strip() + if not term: + return [] + results = self.query(term).all() + return [{'label': self.display(x), 'value': x.uuid} for x in results]