--- /dev/null
+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
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))
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')
<div id="header">
<a href="${h.url_for("/")}">Home</a>
+${h.form (h.url_for(controller="search", action="results"))}
+${h.text('query')} ${h.submit('search','Search')}
+${h.end_form()}
+
<div id="user">
% if c.user:
<p>Logged in as ${c.user.name}</p>