[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