[Checkins] SVN: megrok.rdb/trunk/src/megrok/rdb/ Introduce rdb.IDatabaseSetupEvent

Martijn Faassen faassen at infrae.com
Wed Aug 27 09:27:20 EDT 2008


Log message for revision 90451:
  Introduce rdb.IDatabaseSetupEvent
  

Changed:
  U   megrok.rdb/trunk/src/megrok/rdb/__init__.py
  U   megrok.rdb/trunk/src/megrok/rdb/interfaces.py
  U   megrok.rdb/trunk/src/megrok/rdb/setup.py
  U   megrok.rdb/trunk/src/megrok/rdb/tests/creation.py

-=-
Modified: megrok.rdb/trunk/src/megrok/rdb/__init__.py
===================================================================
--- megrok.rdb/trunk/src/megrok/rdb/__init__.py	2008-08-27 13:10:15 UTC (rev 90450)
+++ megrok.rdb/trunk/src/megrok/rdb/__init__.py	2008-08-27 13:27:19 UTC (rev 90451)
@@ -2,6 +2,7 @@
 from megrok.rdb.schema import Fields
 from megrok.rdb.directive import key, metadata, tablename, reflected
 from megrok.rdb.setup import setupDatabase
+from megrok.rdb.interfaces import IDatabaseSetupEvent
 
 from sqlalchemy import MetaData
 

Modified: megrok.rdb/trunk/src/megrok/rdb/interfaces.py
===================================================================
--- megrok.rdb/trunk/src/megrok/rdb/interfaces.py	2008-08-27 13:10:15 UTC (rev 90450)
+++ megrok.rdb/trunk/src/megrok/rdb/interfaces.py	2008-08-27 13:27:19 UTC (rev 90451)
@@ -1,4 +1,4 @@
-from zope.interface import Interface
+from zope.interface import Interface, Attribute, implements
 
 from zope.app.container.interfaces import IContainer as IContainerBase
 
@@ -18,3 +18,12 @@
         
         Defined by SQLAlchemy dictionary-based collections.
         """
+
+class IDatabaseSetupEvent(Interface):
+    metadata = Attribute("Metadata that was just set up")
+
+class DatabaseSetupEvent(object):
+    implements(IDatabaseSetupEvent)
+    
+    def __init__(self, metadata):
+        self.metadata = metadata

Modified: megrok.rdb/trunk/src/megrok/rdb/setup.py
===================================================================
--- megrok.rdb/trunk/src/megrok/rdb/setup.py	2008-08-27 13:10:15 UTC (rev 90450)
+++ megrok.rdb/trunk/src/megrok/rdb/setup.py	2008-08-27 13:27:19 UTC (rev 90451)
@@ -1,9 +1,11 @@
 from zope import component
+from zope.event import notify
 
 from sqlalchemy.orm import mapper
 from sqlalchemy.ext.declarative import instrument_declarative
 
 from z3c.saconfig.interfaces import IEngineFactory
+from megrok.rdb.interfaces import DatabaseSetupEvent
 
 def setupDatabase(metadata):
     """Set up of ORM for engine in current site.
@@ -17,7 +19,8 @@
     """
     reflectTables(metadata)
     createTables(metadata)
-
+    notify(DatabaseSetupEvent(metadata))
+    
 def reflectTables(metadata):
     """Reflect tables into ORM.
     """

Modified: megrok.rdb/trunk/src/megrok/rdb/tests/creation.py
===================================================================
--- megrok.rdb/trunk/src/megrok/rdb/tests/creation.py	2008-08-27 13:10:15 UTC (rev 90450)
+++ megrok.rdb/trunk/src/megrok/rdb/tests/creation.py	2008-08-27 13:27:19 UTC (rev 90451)
@@ -13,10 +13,24 @@
   >>> from megrok.rdb.testing import configureEngine
   >>> engine = configureEngine()
 
+When the database is set up there is an ``rdb.IDatabaseSetupEvent``
+that can be hooked into to do some extra configuration. The event is
+fired after all other database is completed. Here we just print
+something so we can test whether it was fired correctly::
+
+  >>> from zope import component
+  >>> @component.adapter(rdb.IDatabaseSetupEvent)
+  ... def setupHandler(event):
+  ...    print 'Database setup event'
+  >>> component.provideHandler(setupHandler)
+  
 We now need to create the tables we defined in our database::
 
   >>> rdb.setupDatabase(metadata)
+  Database setup event
 
+As we can see the database setup event was indeed fired.
+
 Let's start using the database now::
 
   >>> session = rdb.Session()



More information about the Checkins mailing list