[Checkins] SVN: grokapps/rdbexample/trunk/ first sqlalchemy to
schema translator
Jasper Spaans
jspaans at thehealthagency.com
Fri May 2 16:09:03 EDT 2008
Log message for revision 86130:
first sqlalchemy to schema translator
Changed:
A grokapps/rdbexample/trunk/megrok.rdb/src/megrok/rdb/configure.zcml
A grokapps/rdbexample/trunk/megrok.rdb/src/megrok/rdb/schema.py
U grokapps/rdbexample/trunk/src/rdbexample/app.py
-=-
Added: grokapps/rdbexample/trunk/megrok.rdb/src/megrok/rdb/configure.zcml
===================================================================
--- grokapps/rdbexample/trunk/megrok.rdb/src/megrok/rdb/configure.zcml (rev 0)
+++ grokapps/rdbexample/trunk/megrok.rdb/src/megrok/rdb/configure.zcml 2008-05-02 20:09:02 UTC (rev 86130)
@@ -0,0 +1,6 @@
+<configure xmlns="http://namespaces.zope.org/zope"
+ xmlns:grok="http://namespaces.zope.org/grok">
+ <include package="grok" />
+ <includeDependencies package="." />
+ <grok:grok package="." />
+</configure>
Added: grokapps/rdbexample/trunk/megrok.rdb/src/megrok/rdb/schema.py
===================================================================
--- grokapps/rdbexample/trunk/megrok.rdb/src/megrok/rdb/schema.py (rev 0)
+++ grokapps/rdbexample/trunk/megrok.rdb/src/megrok/rdb/schema.py 2008-05-02 20:09:02 UTC (rev 86130)
@@ -0,0 +1,42 @@
+import grok
+from zope.schema.interfaces import IField
+from zope.interface import Interface
+from zope.interface.interface import InterfaceClass
+from zope.interface.interfaces import IInterface
+from zope.component import getUtility
+from sqlalchemy.types import String, Integer
+from collective.lead.interfaces import IDatabase
+from megrok.rdb import Model
+from zope.schema import Int
+from zope.schema import Text
+from zope.schema import TextLine
+
+ at grok.adapter(Model)
+ at grok.implementer(IInterface)
+def schema_from_model(model):
+ table = model.__table__
+ bases = (Interface,)
+ attrs = {}
+ for i, column in enumerate(table.columns):
+ field = IField(column.type)
+ print column.name
+ field.__name__ = field.title = unicode(column.name)
+ field.order = 2 - i
+ attrs[column.name] = field
+
+ return InterfaceClass(name=model.__table__.name,
+ bases=bases,
+ attrs=attrs,
+ __doc__='Generated from metadata')
+
+ at grok.adapter(String)
+ at grok.implementer(IField)
+def field_from_sa_string(s):
+ return TextLine(__name__ = u'__dummy__',
+ title = u'__dummy__')
+
+ at grok.adapter(Integer)
+ at grok.implementer(IField)
+def field_from_sa_integer(i):
+ return Int(__name__ = u'__dummy__',
+ title = u'__dummy__')
Property changes on: grokapps/rdbexample/trunk/megrok.rdb/src/megrok/rdb/schema.py
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: grokapps/rdbexample/trunk/src/rdbexample/app.py
===================================================================
--- grokapps/rdbexample/trunk/src/rdbexample/app.py 2008-05-02 20:00:16 UTC (rev 86129)
+++ grokapps/rdbexample/trunk/src/rdbexample/app.py 2008-05-02 20:09:02 UTC (rev 86130)
@@ -1,6 +1,8 @@
import grok
from megrok import rdb
+from zope.interface.interfaces import IInterface
+
from sqlalchemy.schema import Column, ForeignKey
from sqlalchemy.types import Integer, String
from sqlalchemy.orm import relation
@@ -14,9 +16,11 @@
class RDBExample(grok.Application, grok.Model):
def traverse(self, name):
- return rdb.query(Faculty).get(int(name))
+ try:
+ return rdb.query(Faculty).get(int(name))
+ except ValueError:
+ return None
-
class Index(grok.View):
grok.context(RDBExample)
@@ -48,14 +52,27 @@
faculty_id = Column('faculty_id', Integer, ForeignKey('faculty.id'))
title = Column('title', String(50))
+from megrok.rdb.schema import schema_from_model
+class DepartmentList(grok.View):
+ grok.name('index.html')
+ grok.context(Departments)
+ grok.template('departments')
+
+
class FacultyIndex(grok.View):
grok.name('index.html')
grok.context(Faculty)
grok.template('faculty')
-class DepartmentList(grok.View):
- grok.name('index.html')
- grok.context(Departments)
- grok.template('departments')
+class AddFaculty(grok.AddForm):
+ grok.context(RDBExample)
+
+ @property
+ def form_fields(self):
+ return grok.Fields(schema_from_model(Faculty()))
+
+ @grok.action('add')
+ def handle_add(self, *args, **kw):
+ print kw
More information about the Checkins
mailing list