[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