[Repoze-checkins] r1624 - in repoze.shootout/trunk/repoze/shootout: . templates

Carlos de la Guardia cguardia at yahoo.com
Sun Aug 17 04:10:18 EDT 2008


Author: Carlos de la Guardia <cguardia at yahoo.com>
Date: Sun Aug 17 04:10:18 2008
New Revision: 1624

Log:
added tags input box and tag parsing and saving.

Modified:
   repoze.shootout/trunk/repoze/shootout/models.py
   repoze.shootout/trunk/repoze/shootout/templates/idea_add.pt
   repoze.shootout/trunk/repoze/shootout/views.py

Modified: repoze.shootout/trunk/repoze/shootout/models.py
==============================================================================
--- repoze.shootout/trunk/repoze/shootout/models.py	(original)
+++ repoze.shootout/trunk/repoze/shootout/models.py	Sun Aug 17 04:10:18 2008
@@ -75,7 +75,7 @@
     'tags',
     metadata,
     Column('tag_id', Integer, primary_key=True),
-    Column('name', String(50), index=True)
+    Column('name', String(50), unique=True, nullable=False, index=True)
 )
 
 ideas_tags_table = Table(
@@ -128,7 +128,7 @@
         ((ideas_table.c.hits>0 or ideas_table.c.misses>0) and (ideas_table.c.hits/(ideas_table.c.hits+ideas_table.c.misses)*100) or 0).label('hit_percentage')
     ),
     'users':relation(User, order_by=users_table.c.user_id),
-    'tags':relation(Tag, secondary=ideas_tags_table, lazy=False),
+    'tags':relation(Tag, secondary=ideas_tags_table, backref='ideas'),
 })
 
 class IRange(Interface):

Modified: repoze.shootout/trunk/repoze/shootout/templates/idea_add.pt
==============================================================================
--- repoze.shootout/trunk/repoze/shootout/templates/idea_add.pt	(original)
+++ repoze.shootout/trunk/repoze/shootout/templates/idea_add.pt	Sun Aug 17 04:10:18 2008
@@ -19,11 +19,14 @@
     <form id="idea_add_form" action="idea_add" method="post">
     <fieldset>
         <label for="title">Title:</label>
-        <input type="text" name="title" />
+        <input type="text" name="title" size="60" />
         <br />
         <label for="text">Text:</label>
         <textarea name="text" rows="10" cols="60"> </textarea>
         <br />
+        <label for="tags">Tags:</label>
+        <input type="text" name="tags" size="60" />
+        <br />
         <input tal:condition="target" type="hidden" name="target" value="${target.idea_id}" />
         <input type="submit" name="form.submitted" value="Shoot" />
     </fieldset>

Modified: repoze.shootout/trunk/repoze/shootout/views.py
==============================================================================
--- repoze.shootout/trunk/repoze/shootout/views.py	(original)
+++ repoze.shootout/trunk/repoze/shootout/views.py	Sun Aug 17 04:10:18 2008
@@ -8,7 +8,7 @@
 from repoze.bfg.security import authenticated_userid
 
 from repoze.shootout.models import DBSession
-from repoze.shootout.models import User, Idea
+from repoze.shootout.models import User, Idea, Tag
 
 COOKIE_VOTED = 'repoze.shootout.voted'
 
@@ -59,6 +59,7 @@
     allow_extra_fields = True
     title = formencode.validators.String(not_empty=True)
     text = formencode.validators.String(not_empty=True)
+    tags = formencode.validators.String(not_empty=True)
 
 def idea_add(context, request):
     app_url = request.application_url
@@ -66,8 +67,9 @@
     message = params.get('message','')
     if params.get('form.submitted'):
         target = params.get('target', None)
-        title = params.get('title', None)
-        text = params.get('text', None)
+        title = params.get('title')
+        text = params.get('text')
+        tags = params.get('tags')
         schema = AddIdea()
         try:
             form = schema.to_python(params)
@@ -78,6 +80,16 @@
             author_id = authenticated_userid(request)
             author = DBSession.query(User).filter(User.username==author_id).one().user_id
             idea = Idea(target=target, author=author, title=title, text=text)
+            tags = tags.replace(';',' ').replace(',',' ')
+            tags = [tag.lower() for tag in tags.split()]
+            tags = set(tags)
+            if '' in tags:
+                tags.remove('')
+            for tagname in tags:
+                tag = DBSession.query(Tag).filter(Tag.name==tagname).all()
+                if not tag:
+                    tag = Tag(name=tagname)
+                    idea.tags.append(tag)
             DBSession.save(idea)
             DBSession.commit()
             url = "%s/ideas/%s" % (app_url,idea.idea_id)


More information about the Repoze-checkins mailing list