diff options
author | Ralph Bean <ralph.bean@gmail.com> | 2011-04-14 10:21:21 -0400 |
---|---|---|
committer | Ralph Bean <ralph.bean@gmail.com> | 2011-04-14 10:21:21 -0400 |
commit | e9d4d07a53822fc75d608fc1eef0c52fbbfe58e9 (patch) | |
tree | 172ff177bd61a55c6f56dc1bf8ffa383a71e10b3 /leafymiracle/resources.py | |
parent | 092c5a967673bdd0aacb3eabdc49525f645c331c (diff) | |
parent | f62a1c9b336ae632a8767ea6270cad5c1f61a187 (diff) | |
download | leafymiracle-e9d4d07a53822fc75d608fc1eef0c52fbbfe58e9.tar.gz leafymiracle-e9d4d07a53822fc75d608fc1eef0c52fbbfe58e9.tar.xz leafymiracle-e9d4d07a53822fc75d608fc1eef0c52fbbfe58e9.zip |
Merge branch 'searchbar'
Diffstat (limited to 'leafymiracle/resources.py')
-rw-r--r-- | leafymiracle/resources.py | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/leafymiracle/resources.py b/leafymiracle/resources.py index 8185f9f..443da1b 100644 --- a/leafymiracle/resources.py +++ b/leafymiracle/resources.py @@ -16,12 +16,63 @@ from sqlalchemy.orm.exc import NoResultFound from models import DBSession, Root, initialize_sql +import models +import sqlalchemy + +class SearchHandler(object): + def search(self, term, cats): + # Don't do any search if the term is too short + if len(term) < 2: + return {'data':[]} + + attrs = { + 'Category' : { + 'search_on' : ['name', 'description'], + }, + 'Group' : { + 'search_on' : ['name', 'description'], + }, + 'Package' : { + 'search_on' : ['name'], + } + } + srch = '%%%s%%' % term + cats = cats.split(',') + results = [] + + for cat in cats: + if not cat in attrs.keys(): + raise ValueError, "'%s' is a disallowed category." % cat + cls = getattr(models, cat) + entries = cls.query.filter(sqlalchemy.or_( + *[getattr(cls, srch_attr).like(srch) + for srch_attr in attrs[cat]['search_on']] + )) + results += [[unicode(e), e.id, cat] for e in entries] + + data = { + 'data' : [ + { + 'label' : label, + 'value' : value, + 'category' : category } + for label, value, category in results + ] + } + return data + class MyApp(object): __name__ = None __parent__ = None def __getitem__(self, key): session = DBSession() + if key == 'search': + handler = SearchHandler() + handler.__name__ = key + handler.__parent__ = self + return handler + try: id = int(key) except (ValueError, TypeError): |