[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