[Checkins] SVN: grokapps/rdbexample/trunk/ Get this in working order again. It's really time proper page templates

Martijn Faassen faassen at infrae.com
Tue Jun 24 20:17:40 EDT 2008


Log message for revision 87738:
  Get this in working order again. It's really time proper page templates
  were introduced to the UI though, as this text-driven UI impossible to
  navigate.
  

Changed:
  _U  grokapps/rdbexample/trunk/
  U   grokapps/rdbexample/trunk/buildout.cfg
  U   grokapps/rdbexample/trunk/setup.py
  U   grokapps/rdbexample/trunk/src/rdbexample/app.py

-=-

Property changes on: grokapps/rdbexample/trunk
___________________________________________________________________
Name: svn:externals
   - collective.lead https://svn.plone.org/svn/collective/collective.lead/branches/elro-tpc
sqlalchemy http://svn.sqlalchemy.org/sqlalchemy/trunk/
grok svn://svn.zope.org/repos/main/grok/trunk



   + zope.sqlalchemy svn://svn.zope.org/repos/main/zope.sqlalchemy/trunk
z3c.saconfig svn://svn.zope.org/repos/main/z3c.saconfig/trunk
megrok.rdb svn://svn.zope.org/repos/main/megrok.rdb/trunk




Modified: grokapps/rdbexample/trunk/buildout.cfg
===================================================================
--- grokapps/rdbexample/trunk/buildout.cfg	2008-06-25 00:16:41 UTC (rev 87737)
+++ grokapps/rdbexample/trunk/buildout.cfg	2008-06-25 00:17:40 UTC (rev 87738)
@@ -1,9 +1,8 @@
 [buildout]
-develop = . megrok.rdb collective.lead grok sqlalchemy
+develop = . megrok.rdb zope.sqlalchemy z3c.saconfig megrok.rdb
 parts = app data zopectl i18n test
-find-links = http://download.zope.org/distribution/
 newest = false
-extends= grok/versions.cfg
+extends = http://grok.zope.org/releaseinfo/grok-0.13.cfg
 versions = versions
 
 [app]

Modified: grokapps/rdbexample/trunk/setup.py
===================================================================
--- grokapps/rdbexample/trunk/setup.py	2008-06-25 00:16:41 UTC (rev 87737)
+++ grokapps/rdbexample/trunk/setup.py	2008-06-25 00:17:40 UTC (rev 87738)
@@ -19,9 +19,8 @@
       include_package_data=True,
       zip_safe=False,
       install_requires=['setuptools',
-                        'grok',
+                        'grok == 0.13',
                         'megrok.rdb',
-                        'psycopg2',
                         ],
       entry_points="""
       # Add entry points here

Modified: grokapps/rdbexample/trunk/src/rdbexample/app.py
===================================================================
--- grokapps/rdbexample/trunk/src/rdbexample/app.py	2008-06-25 00:16:41 UTC (rev 87737)
+++ grokapps/rdbexample/trunk/src/rdbexample/app.py	2008-06-25 00:17:40 UTC (rev 87738)
@@ -1,49 +1,63 @@
 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
 
+from zope.app.publication.interfaces import IBeforeTraverseEvent
+from zope import component
 
-class Database(rdb.Database):
+from z3c.saconfig import EngineFactory, GloballyScopedSession
+from z3c.saconfig.interfaces import IEngineFactory
 
-    url = 'postgres:///rdbexample'
+TEST_DSN = 'sqlite:///:memory:'
+  
+engine_factory = EngineFactory(TEST_DSN)
+scoped_session = GloballyScopedSession()
 
+grok.global_utility(engine_factory, direct=True)
+grok.global_utility(scoped_session, direct=True)
 
+metadata = rdb.MetaData()
+
 class RDBExample(grok.Application, grok.Model):
     def traverse(self, name):
         try:
             key = int(name)
         except ValueError:
             return None
-        return rdb.query(Faculty).get(key)
+        session = rdb.Session()
+        return session.query(Faculty).get(key)
 
+ at grok.subscribe(RDBExample, IBeforeTraverseEvent)
+def setUpDatabase(obj, event):
+    # XXX
+    # hack: set up database if it hasn't been set up before 
+    engine_factory = component.getUtility(IEngineFactory)
+    engine = engine_factory()
+    metadata.create_all(engine)
+
 class FacultyList(grok.View):
     grok.name('index')
     grok.context(RDBExample)
 
     def render(self):
         result = ""
-        for faculty in rdb.query(Faculty).all():
+        session = rdb.Session()
+        for faculty in session.query(Faculty).all():
             result += "%s - %s (%s)" % (faculty.id, faculty.title,
                                         self.url(str(faculty.id)))
         return result
 
-
 class Departments(rdb.Container):
     rdb.key('title')
 
 class Faculty(rdb.Model):
-    # rdb.table_name('faculty') is the default
-    __tablename__ = 'faculty'
-
     grok.traversable('departments')
 
+    rdb.metadata(metadata)
+    
     id = Column('id', Integer, primary_key=True)
     title = Column('title', String(50))
 
@@ -52,8 +66,8 @@
                            collection_class=Departments)
 
 class Department(rdb.Model):
-    __tablename__ = 'department'
-
+    rdb.metadata(metadata)
+    
     id = Column('id', Integer, primary_key=True)
     faculty_id = Column('faculty_id', Integer, ForeignKey('faculty.id'))
     title = Column('title', String(50))
@@ -67,10 +81,11 @@
 
     @grok.action('add')
     def handle_add(self, *args, **kw):
-        d = Department(**kw)
-        self.context.set(d)
+        department = Department(**kw)
+        session = rdb.Session()
+        session.add(department)
+        self.context.set(department)
 
-
 class DepartmentView(grok.View):
     grok.name('index')
     grok.context(Department)
@@ -107,6 +122,6 @@
 
     @grok.action('add')
     def handle_add(self, *args, **kw):
-        f = Faculty(**kw)
-        rdb.session().save(f)
-        #import pdb; pdb.set_trace()
+        faculty = Faculty(**kw)
+        session = rdb.Session()
+        session.add(faculty)



More information about the Checkins mailing list