From 2bb6d6e6d79441c4918bd903eae9099f03a65675 Mon Sep 17 00:00:00 2001 From: Nick Retallack Date: Sun, 4 Oct 2009 11:12:23 -0700 Subject: [PATCH] Searching for one tag works. Two tags acts like or and returns multiple copies. --- floof/controllers/search.py | 35 +++++++++++++++++++++++++++++++++++ floof/model/art.py | 4 +--- floof/templates/base.mako | 4 ++++ floof/tests/functional/test_search.py | 7 +++++++ 4 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 floof/controllers/search.py create mode 100644 floof/tests/functional/test_search.py diff --git a/floof/controllers/search.py b/floof/controllers/search.py new file mode 100644 index 0000000..75926e7 --- /dev/null +++ b/floof/controllers/search.py @@ -0,0 +1,35 @@ +import logging + +from pylons import request, response, session, tmpl_context as c +from pylons.controllers.util import abort, redirect_to + +from floof.lib.base import BaseController, render + +log = logging.getLogger(__name__) + +from floof.model.art import Art, Tag, TagText +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','') + tags = query.split() + + tagtexts = TagText.query.filter(TagText.text.in_(tags)) + tagtext_ids = map(lambda x:x.id, tagtexts) + + # 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() + + # just the art please. + c.artwork = map(lambda x: x[0], art_tag_pairs) + return render('/index.mako') \ No newline at end of file diff --git a/floof/model/art.py b/floof/model/art.py index fd80d93..420dff8 100644 --- a/floof/model/art.py +++ b/floof/model/art.py @@ -10,11 +10,9 @@ from elixir import * from pylons import config from floof.lib.file_storage import get_path, save_file - from floof.lib.dbhelpers import find_or_create - class Art(Entity): title = Field(Unicode(120)) original_filename = Field(Unicode(120)) @@ -59,7 +57,7 @@ class Art(Entity): class Tag(Entity): - # look into how ondelete works. It just sets a database property. + # look into how ondelete works. This just sets a database property. art = ManyToOne('Art', ondelete='cascade') tagger = ManyToOne('User') tagtext = ManyToOne('TagText') diff --git a/floof/templates/base.mako b/floof/templates/base.mako index 5034bf0..19f8455 100644 --- a/floof/templates/base.mako +++ b/floof/templates/base.mako @@ -10,6 +10,10 @@