X-Git-Url: http://git.veekun.com/zzz-floof.git/blobdiff_plain/11f3ff4140edcd5dd4d8e20f918c58003c634d10..6fb3ad2a578aa2e0eced735187a02a79a8907668:/floof/controllers/search.py?ds=inline diff --git a/floof/controllers/search.py b/floof/controllers/search.py index 5240a0b..3b6faef 100644 --- a/floof/controllers/search.py +++ b/floof/controllers/search.py @@ -1,6 +1,6 @@ import logging -from pylons import request, response, session, tmpl_context as c +from pylons import request, response, session, tmpl_context as c, h from pylons.controllers.util import abort, redirect_to from floof.lib.base import BaseController, render @@ -8,48 +8,48 @@ from floof.lib.base import BaseController, render log = logging.getLogger(__name__) from floof.model.art import Art, Tag, TagText +from floof.model.search import SavedSearch import elixir class SearchController(BaseController): def index(self): - # Return a rendered template - #return render('/search.mako') - # or, return a response - return 'Hello World' - - def results(self): - """ Search, implemented the stupid way! """ - query = request.params.get('query','') - words = query.split() + if request.params.get('button') == 'Save': + return self.save() - tags = [] - for word in words: - components = word.split(':') - if len(components) == 1: - # tags are plain. - tags.append(word) - elif components[0] == "rating": - if components[1].isnumeric(): - score = int(components[1]) - else: - score = Rating.reverse_options.get(components[1]) - - if -1 <= score <= 3: - pass - # TODO: Find stuff that has this rating - # Rating.query.filter(Rating.s) - - + c.query = request.params.get('query', '') + tags = c.query.split() - tagtexts = TagText.query.filter(TagText.text.in_(tags)) - tagtext_ids = map(lambda x:x.id, tagtexts) + tagtext_ids = [_.id for _ in tagtexts] + + # Fetch art that has all the tags + c.artwork = Art.query.join(Tag) \ + .filter(Tag.tagtext_id.in_(tagtext_ids)) \ + .all() - # TODO: this is wrong. Please fix it so it returns art that has all the tags. - art_tag_pairs = elixir.session.query(Art,Tag).filter(Art.id == Tag.art_id).\ - filter(Tag.tagtext_id.in_(tagtext_ids)).all() + return render('/index.mako') + + # TODO: login required + def save(self): + c.query = request.params.get('query', '') + saved_search = SavedSearch(author=c.user, string=c.query) + elixir.session.commit() + redirect_to(action="list") + # TODO: do something better than this. + + + # TODO: login required + def list(self): + c.searches = c.user.searches + return render('/searches.mako') + + # TODO: login required + def display(self, id): + c.search = h.get_object_or_404(SavedSearch, id=id) + # TODO: create a gallery widget + + redirect_to(controller="users", action="view", name=c.user.name) + - # just the art please. - c.artwork = map(lambda x: x[0], art_tag_pairs) - return render('/index.mako') \ No newline at end of file + \ No newline at end of file