[Zope-CVS] CVS: Products/Ape - component.xml:1.1 datatypes.py:1.1

Chris McDonough chris.mcdonough@cox.net
02 Aug 2003 19:18:24 -0400


I just updated the container-class directive in zopeschema.xml, so
you'll likely need to apply the same change here. :-(

- C

On Sat, 2003-08-02 at 13:19, Shane Hathaway wrote:
> Update of /cvs-repository/Products/Ape
> In directory cvs.zope.org:/tmp/cvs-serv4227
> 
> Added Files:
> 	component.xml datatypes.py 
> Log Message:
> Added to the Zope 2 ZConfig schema.  You can now set up Ape databases via zope.conf if you make a minor local change to zopeschema.xml.
> 
> === Added File Products/Ape/component.xml ===
> <?xml version="1.0"?>
> 
> <!-- Ape storage and database ZConfig section setup
> 
> To use this, first add the following line near the top of
> Zope/Startup/zopeschema.xml:
> 
>   <import package="Products.Ape"/>
> 
> Then add to zope.conf:
> 
> <ape-db fs>
>   <ape-storage>
>     mapper-variation filesystem
>     <ape-fs-connection fs>
>       basepath $INSTANCE/var/myfs
>     </ape-fs-connection>
>   </ape-storage>
>   mount-point /fs
>   scan-interval 10
> </ape-db>
> 
> -->
> 
> 
> <component prefix="Products.Ape.datatypes">
> 
>   <abstracttype name="apelib.Connection" />
> 
>   <sectiontype name="ape-storage" implements="ZODB.storage"
>       datatype=".Storage">
>     <key name="mapper-variation" required="yes">
>       <description>
>         The name of the mapper variation to load from apeconf.xml
>         files.  See Products/Ape/doc/apexml.txt.
>       </description>
>     </key>
>     <multisection type="apelib.Connection" name="+" attribute="connections">
>       <description>
>         Defines a database connector for use with this storage.
>       </description>
>     </multisection>
>   </sectiontype>
> 
> 
>   <sectiontype name="ape-fs-connection" implements="apelib.Connection"
>       datatype=".FSConnection">
>     <key name="basepath" required="yes">
>       <description>
>         The base filesystem path for the storage.
>       </description>
>     </key>
>     <key name="metadata-prefix" default=".">
>       <description>
>         The prefix to use for all metadata files.
>       </description>
>     </key>
>     <key name="hidden-filenames" default="_">
>       <description>
>         A regular expression that determines which filenames should be
>         hidden from the object system.  The default is '_', meaning
>         that filenames starting with an underscore do not appear in
>         the object system.  This filter is in addition to the metadata
>         filename filtering.
>       </description>
>     </key>
>   </sectiontype>
> 
> 
>   <sectiontype name="ape-dbapi-connection" implements="apelib.Connection"
>       datatype=".DBAPIConnection">
>     <key name="module-name" required="yes">
>       <description>
>         The base filesystem path for the storage.
>       </description>
>     </key>
>     <key name="prefix" default="zodb">
>       <description>
>         A prefix to use for all tables in the database.
>       </description>
>     </key>
>     <multikey name="param" attribute="params">
>       <description>
>         Positional parameters for opening the database.
>       </description>
>     </multikey>
>     <key name="+" attribute="kwparams">
>       <description>
>         Keyword parameters for opening the database.
>       </description>
>     </key>
>   </sectiontype>
> 
> 
>   <sectiontype name="ape-db" implements="ZODB.database"
>       datatype=".Database">
>     <key name="mapper-variation" required="no">
>       <description>
>         The name of the mapper variation to load from apeconf.xml
>         files.  See Products/Ape/doc/apexml.txt.
>       </description>
>     </key>
>     <key name="scan-interval" datatype="integer" default="10">
>       <description>
>         Cache scan interval in seconds.  Set to 0 to disable scanning.
>       </description>
>     </key>
> 
>     <!-- ZConfig refuses to let us extend the "zodb_db" section type,
>     therefore we have to duplicate.  Grumble.  The following is copied
>     from ZODB/component.xml and Zope/Startup/zopeschema.xml, with
>     package names expanded. -->
> 
>     <section type="ZODB.storage" name="*" attribute="storage"/>
>     <key name="cache-size" datatype="integer" default="5000"/>
>     <key name="pool-size" datatype="integer" default="7"/>
>     <key name="version-pool-size" datatype="integer" default="3"/>
>     <key name="version-cache-size" datatype="integer" default="100"/>
> 
>     <multikey name="mount-point" required="yes" attribute="mount_points"
>               datatype="Zope.Startup.datatypes.mount_point">
>       <description>
>        The mount point is the slash-separated path to which this database
>        will be mounted within the Zope application server.
>       </description>
>     </multikey>
> 
>     <key name="connection-class"
>          datatype="Zope.Startup.datatypes.importable_name">
>       <description>
>        Change the connection class a database uses on a per-database basis to
>        support different connection policies.  Use a Python dotted-path
>        name to specify the connection class.
>       </description>
>     </key>
> 
>    <key name="class-factory" datatype="Zope.Startup.datatypes.importable_name"
>         default="DBTab.ClassFactories.autoClassFactory">
>       <description>
>        Change the class factory function a database uses on a
>        per-database basis to support different class factory policy.
>        Use a Python dotted-path name to specify the class factory function.
>       </description>
>     </key>
> 
>     <key name="container-class"
>          datatype="Zope.Startup.datatypes.importable_name">
>       <description>
>        Change the contiainer class a (mounted) database uses on a
>        per-database basis to support a different container than a plain
>        Folder. Use a Python dotted-path name to specify the container class.
>       </description>
>     </key>
> 
>   </sectiontype>
> 
> </component>
> 
> 
> 
> === Added File Products/Ape/datatypes.py ===
> ##############################################################################
> #
> # Copyright (c) 2003 Zope Corporation and Contributors.
> # All Rights Reserved.
> #
> # This software is subject to the provisions of the Zope Public License,
> # Version 2.0 (ZPL).  A copy of the ZPL should accompany this distribution.
> # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
> # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
> # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
> # FOR A PARTICULAR PURPOSE.
> #
> ##############################################################################
> """ZConfig data types
> 
> $Id: datatypes.py,v 1.1 2003/08/02 17:18:56 shane Exp $
> """
> 
> from ZODB.config import BaseConfig
> from Zope.Startup.datatypes import ZopeDatabase
> from apelib.zope2.mapper import createMapper
> from apelib.zodb3 import storage, db, resource
> 
> 
> class Storage(BaseConfig):
> 
>     def open(self):
>         config = self.config
>         conns = {}
>         for c in config.connections:
>             conns[c.name] = c.open()
>         mapper = createMapper(config.mapper_variation, search_products=1)
>         r = resource.StaticResource(mapper)
>         return storage.ApeStorage(r, conns, name=self.name)
> 
> 
> class Database(ZopeDatabase):
> 
>     def createDB(self):
>         config = self.config
>         if config.mapper_variation:
>             mapper = createMapper(config.mapper_variation, search_products=1)
>             r = resource.StaticResource(mapper)
>         else:
>             r = None
>         s = config.storage.open()
>         kw = {}
>         for name in ('scan_interval', 'pool_size', 'cache_size',
>                      'version_pool_size', 'version_cache_size'):
>             if hasattr(config, name):
>                 kw[name] = getattr(config, name)
>         d = db.ApeDB(s, r, **kw)
>         return d
> 
> 
> def getParams(config):
>     kw = {}
>     for name in config.__dict__.keys():
>         if not name.startswith('_'):
>             kw[name] = getattr(config, name)
>     return kw
> 
> 
> class FSConnection(BaseConfig):
> 
>     def open(self):
>         from apelib.fs.connection import FSConnection as impl
>         return impl(**getParams(self.config))
> 
> 
> class DBAPIConnection:
> 
>     def open(self):
>         from apelib.sql.dbapi import DBAPIConnector as impl
>         config = self.config
>         return impl(module_name=config.module_name,
>                     prefix=config.prefix,
>                     params=config.params,
>                     kwparams=config.kwparams)
> 
> 
> 
> _______________________________________________
> Zope-CVS maillist  -  Zope-CVS@zope.org
> http://mail.zope.org/mailman/listinfo/zope-cvs
> 
> Zope CVS instructions: http://dev.zope.org/CVS
-- 
Chris McDonough <chris.mcdonough@cox.net>