Commits

Atsushi Odagiri committed 01163c9 Merge

Merge with task.selectgroup

Comments (0)

Files changed (7)

 
 [versions]
 sqlalchemy = 0.6.7
+tw2.sqla = 2.0a5
 
 [models]
 recipe = zc.recipe.egg

deform/pyconjp2011/deform_demo/__init__.py

 
 templates = TemplateLookup(directories=[templates_dir])
 
+@c.deferred
+def group_select_widget(node, kw):
+    groups = kw['groups']
+    return w.SelectWidget(values=[
+        (g.id, g.group_name)
+        for g in groups
+        ])
+
+class Group(c.MappingSchema):
+    group_id = c.SchemaNode(c.String(),
+            widget=group_select_widget)
+
+class Groups(c.SequenceSchema):
+    group = Group()
+
 class UserSchema(c.MappingSchema):
     username = c.SchemaNode(c.String())
     password = c.SchemaNode(c.String(),
             widget=w.PasswordWidget())
     user_image = c.SchemaNode(FileData(),
             widget=w.FileUploadWidget(os.path.join(here, 'deform_tmpdata')))
+    groups = Groups()
 
 @wsgify
 def index(request):
-    user_form = Form(UserSchema())
+    user_form = Form(UserSchema().bind(groups=models.DBSession.query(models.Group).all()))
     tmpl = templates.get_template('index.mak')
     return Response(tmpl.render(form=user_form))
 

models/pyconjp2011/models/__init__.py

     permissions = orm.relationship('Permission',
             secondary=group_permission, backref="groups")
 
+    def __repr__(self):
+        return self.group_name.encode('utf-8')
 
 class Permission(Base):
     __tablename__ = 'permissions'

models/pyconjp2011/models/commands.py

 from argparse import ArgumentParser
 from sqlalchemy import create_engine
+from sqlalchemy.orm.exc import NoResultFound
 from . import *
 
 def cmd_create(args):
     engine.echo = args.echo
     init_db(engine)
     create_all()
+    for name in (u"g1", u"g2"):
+        try:
+            DBSession.query(Group).filter_by(group_name=name).one()
+        except NoResultFound:
+            g = Group(group_name=name)
+            DBSession.add(g)
+    import transaction
+    transaction.commit()
 
 parser = ArgumentParser()
 subparsers = parser.add_subparsers()

tw2/pyconjp2011/tw2_demo/__init__.py

 from mako.lookup import TemplateLookup
 import tw2.core
 import tw2.forms
+import tw2.sqla
 
 from .. import models
 
 
 templates = TemplateLookup(directories=[templates_dir])
 
-class UserForm(tw2.forms.TableForm):
-    user_name = tw2.forms.TextField(validator=tw2.core.Required)
-    password = tw2.forms.PasswordField(validator=tw2.core.Required)
-    user_image = tw2.forms.FileField()
+models.Group.query = models.DBSession.query(models.Group)
 
+class UserForm(tw2.sqla.DbFormPage):
+    entity = models.User
+    class child(tw2.forms.TableForm):
+        user_name = tw2.forms.TextField(validator=tw2.core.Required)
+        password = tw2.forms.PasswordField(validator=tw2.core.Required)
+        user_image = tw2.forms.FileField()
+        groups = tw2.sqla.DbSingleSelectField(entity=models.Group)
 
 @wsgify
 def index(request):

wtforms/pyconjp2011/wtforms_demo/__init__.py

 from sqlalchemy import engine_from_config
 from mako.lookup import TemplateLookup
 import wtforms
+from wtforms.ext.sqlalchemy.fields import QuerySelectMultipleField
 
 from .. import models
 
     username = wtforms.TextField('User Name')
     password = wtforms.PasswordField('Password')
     user_image = wtforms.FileField('User Image')
+    groups = QuerySelectMultipleField(query_factory=lambda: models.DBSession.query(models.Group))
 
 @wsgify
 def index(request):

wtforms/pyconjp2011/wtforms_demo/templates/index.mak

 ${self.field_row(form.username)}
 ${self.field_row(form.password)}
 ${self.field_row(form.user_image)}
+${self.field_row(form.groups)}
 </table>
 </body>
 </html>
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.