[Checkins] SVN: megrok.rdb/trunk/ Add a test for a common initialization pattern.

Martijn Faassen faassen at startifact.com
Fri Sep 18 07:58:18 EDT 2009


Log message for revision 104309:
  Add a test for a common initialization pattern.
  

Changed:
  U   megrok.rdb/trunk/CHANGES.txt
  A   megrok.rdb/trunk/src/megrok/rdb/tests/initialization.py
  U   megrok.rdb/trunk/src/megrok/rdb/tests/test_rdb.py

-=-
Modified: megrok.rdb/trunk/CHANGES.txt
===================================================================
--- megrok.rdb/trunk/CHANGES.txt	2009-09-18 11:55:05 UTC (rev 104308)
+++ megrok.rdb/trunk/CHANGES.txt	2009-09-18 11:58:17 UTC (rev 104309)
@@ -12,6 +12,9 @@
 
 - Update buildout to use Grok 1.0b2 versions.
 
+- Added a test that demonstrates a common initialization pattern using
+  `rdb.setupDatabase`` in a ``IEngineCreatedEvent`` subscriber.
+
 0.9.1 (2009-08-14)
 ------------------
 

Added: megrok.rdb/trunk/src/megrok/rdb/tests/initialization.py
===================================================================
--- megrok.rdb/trunk/src/megrok/rdb/tests/initialization.py	                        (rev 0)
+++ megrok.rdb/trunk/src/megrok/rdb/tests/initialization.py	2009-09-18 11:58:17 UTC (rev 104309)
@@ -0,0 +1,84 @@
+"""
+We test an initialization pattern for z3c.saconfig where the metadata
+is set up in an event handler.
+
+Let's first grok things::
+
+  >>> grok.testing.grok('megrok.rdb.meta')
+  >>> grok.testing.grok(__name__)
+
+We start using the database now::
+
+  >>> session = rdb.Session()
+
+Let's start using the database now::
+
+  >>> session = rdb.Session()
+  >>> philosophy = Department(name='Philosophy')
+  >>> session.add(philosophy)
+  >>> logic = Course(name='Logic')
+  >>> ethics = Course(name='Ethics')
+  >>> metaphysics = Course(name='Metaphysics')
+  >>> session.add_all([logic, ethics, metaphysics])
+  
+Let's now add them to the courses container::
+
+  >>> philosophy.courses.set(logic)
+  >>> philosophy.courses.set(ethics)
+  >>> philosophy.courses.set(metaphysics)
+
+We can now verify that the courses are there::
+
+  >>> [(course.id, course.name, course.department_id) for course in
+  ... session.query(Course)]
+  [(1, 'Logic', 1), (2, 'Ethics', 1), (3, 'Metaphysics', 1)]
+
+  >>> for key, value in sorted(philosophy.courses.items()):
+  ...   print key, value.name, value.department.name
+  1 Logic Philosophy
+  2 Ethics Philosophy
+  3 Metaphysics Philosophy
+"""
+
+import grokcore.component as grok
+from z3c.saconfig import EngineFactory, GloballyScopedSession
+from z3c.saconfig.interfaces import IEngineCreatedEvent
+
+from sqlalchemy import Column, ForeignKey
+from sqlalchemy.types import Integer, String
+from sqlalchemy.orm import relation
+
+from megrok import rdb
+
+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()
+
+ at grok.subscribe(IEngineCreatedEvent)
+def setUpDatabase(event):
+    rdb.setupDatabase(metadata)
+
+rdb.metadata(metadata)
+
+class Courses(rdb.Container):
+    pass
+
+class Department(rdb.Model):
+    id = Column('id', Integer, primary_key=True)
+    name = Column('name', String(50))
+    courses = relation('Course', 
+                       backref='department',
+                       collection_class=Courses)
+
+class Course(rdb.Model):
+    id = Column('id', Integer, primary_key=True)
+    department_id = Column('department_id', Integer, 
+                           ForeignKey('department.id'))
+    name = Column('name', String(50))
+

Modified: megrok.rdb/trunk/src/megrok/rdb/tests/test_rdb.py
===================================================================
--- megrok.rdb/trunk/src/megrok/rdb/tests/test_rdb.py	2009-09-18 11:55:05 UTC (rev 104308)
+++ megrok.rdb/trunk/src/megrok/rdb/tests/test_rdb.py	2009-09-18 11:58:17 UTC (rev 104309)
@@ -61,6 +61,11 @@
         setUp=zopeSetUp,
         tearDown=zopeTearDown,
         optionflags=optionflags))
+    suite.addTest(doctest.DocTestSuite(
+        'megrok.rdb.tests.initialization',
+        setUp=zopeSetUp,
+        tearDown=zopeTearDown,
+        optionflags=optionflags))
     suite.addTest(doctest.DocFileSuite(
         '../schema.txt',
         optionflags=optionflags,



More information about the checkins mailing list