[Checkins] SVN: z3c.saconfig/trunk/ Added configuration directive
to set up database engine factories using ZCML.
Malthe Borch
mborch at gmail.com
Thu Jul 17 11:03:14 EDT 2008
Log message for revision 88448:
Added configuration directive to set up database engine factories using ZCML.
Changed:
U z3c.saconfig/trunk/buildout.cfg
U z3c.saconfig/trunk/setup.py
U z3c.saconfig/trunk/src/z3c/saconfig/README.txt
A z3c.saconfig/trunk/src/z3c/saconfig/meta.zcml
A z3c.saconfig/trunk/src/z3c/saconfig/zcml.py
-=-
Modified: z3c.saconfig/trunk/buildout.cfg
===================================================================
--- z3c.saconfig/trunk/buildout.cfg 2008-07-17 14:32:44 UTC (rev 88447)
+++ z3c.saconfig/trunk/buildout.cfg 2008-07-17 15:03:12 UTC (rev 88448)
@@ -1,5 +1,6 @@
[buildout]
parts = test scripts
+develop = .
[test]
recipe = zc.recipe.testrunner
Modified: z3c.saconfig/trunk/setup.py
===================================================================
--- z3c.saconfig/trunk/setup.py 2008-07-17 14:32:44 UTC (rev 88447)
+++ z3c.saconfig/trunk/setup.py 2008-07-17 15:03:12 UTC (rev 88448)
@@ -34,6 +34,8 @@
'zope.interface',
'zope.component',
'zope.hookable',
+ 'zope.security',
+ 'zope.configuration',
],
entry_points="""
# -*- Entry points: -*-
Modified: z3c.saconfig/trunk/src/z3c/saconfig/README.txt
===================================================================
--- z3c.saconfig/trunk/src/z3c/saconfig/README.txt 2008-07-17 14:32:44 UTC (rev 88447)
+++ z3c.saconfig/trunk/src/z3c/saconfig/README.txt 2008-07-17 15:03:12 UTC (rev 88448)
@@ -302,3 +302,25 @@
>>> EngineFactory(TEST_DSN1)() is EngineFactory(TEST_DSN1)()
False
+
+Configuration using ZCML
+========================
+
+A configuration directive is provided to register a database engine
+factory using ZCML.
+
+ >>> from cStringIO import StringIO
+ >>> from zope.configuration import xmlconfig
+ >>> import z3c.saconfig
+ >>> xmlconfig.XMLConfig('meta.zcml', z3c.saconfig)()
+
+Let's try registering the directory again.
+
+ >>> xmlconfig.xmlconfig(StringIO("""
+ ... <configure xmlns="http://namespaces.zope.org/db">
+ ... <engine name="dummy" url="sqlite:///:memory:" />
+ ... </configure>"""))
+
+ >>> component.getUtility(IEngineFactory, name="dummy")
+ <z3c.saconfig.utility.EngineFactory object at ...>
+
Added: z3c.saconfig/trunk/src/z3c/saconfig/meta.zcml
===================================================================
--- z3c.saconfig/trunk/src/z3c/saconfig/meta.zcml (rev 0)
+++ z3c.saconfig/trunk/src/z3c/saconfig/meta.zcml 2008-07-17 15:03:12 UTC (rev 88448)
@@ -0,0 +1,17 @@
+<configure xmlns="http://namespaces.zope.org/zope"
+ xmlns:meta="http://namespaces.zope.org/meta"
+ i18n_domain="z3c.saconfig">
+
+ <include package="zope.component" file="meta.zcml" />
+
+ <meta:directives namespace="http://namespaces.zope.org/db">
+
+ <meta:directive
+ name="engine"
+ schema=".zcml.IEngineDirective"
+ handler=".zcml.engine"
+ />
+
+ </meta:directives>
+
+</configure>
Added: z3c.saconfig/trunk/src/z3c/saconfig/zcml.py
===================================================================
--- z3c.saconfig/trunk/src/z3c/saconfig/zcml.py (rev 0)
+++ z3c.saconfig/trunk/src/z3c/saconfig/zcml.py 2008-07-17 15:03:12 UTC (rev 88448)
@@ -0,0 +1,37 @@
+import zope.interface
+import zope.schema
+import zope.component.zcml
+
+import utility
+import interfaces
+
+class IEngineDirective(zope.interface.Interface):
+ """Registers a database engine factory."""
+
+ url = zope.schema.URI(
+ title=u"Database URL",
+ description=u"e.g. 'sqlite:///:memory:'.",
+ required=True)
+
+ name = zope.schema.Text(
+ title=u"Engine name",
+ description=u"Empty if this is the default engine.",
+ required=False,
+ default=u"")
+
+ echo = zope.schema.Bool(
+ title=u'Echo SQL statements',
+ description=u'Enable logging statements for debugging.',
+ required=False,
+ default=False)
+
+def engine(_context, url, name=u"", echo=False):
+ factory = utility.EngineFactory(url, echo=echo)
+
+ zope.component.zcml.utility(
+ _context,
+ provides=interfaces.IEngineFactory,
+ component=factory,
+ permission=zope.component.zcml.PublicPermission,
+ name=name)
+
More information about the Checkins
mailing list