[Zope-Checkins] CVS: ZODB3/ZODB - config.xml:1.1.4.7 config.py:1.1.4.6

Jeremy Hylton jeremy@zope.com
Fri, 3 Jan 2003 14:21:52 -0500


Update of /cvs-repository/ZODB3/ZODB
In directory cvs.zope.org:/tmp/cvs-serv30603/ZODB

Modified Files:
      Tag: zconfig-schema-devel-branch
	config.xml config.py 
Log Message:
Change configuration to use datatypes for section.


=== ZODB3/ZODB/config.xml 1.1.4.6 => 1.1.4.7 ===
--- ZODB3/ZODB/config.xml:1.1.4.6	Fri Jan  3 14:03:58 2003
+++ ZODB3/ZODB/config.xml	Fri Jan  3 14:21:49 2003
@@ -2,7 +2,7 @@
 
   <sectiongroup type="storage">
 
-    <sectiontype type="filestorage">
+    <sectiontype type="filestorage" datatype="ZODB.config.FileStorage">
       <key name="path" required="yes"/>
       <key name="create" datatype="boolean" default="true"/>
       <key name="read_only" datatype="boolean" default="false"/>
@@ -10,11 +10,11 @@
       <key name="quota" datatype="integer"/>
     </sectiontype>
 
-    <sectiontype type="mappingstorage">
+    <sectiontype type="mappingstorage" datatype="ZODB.config.MappingStorage">
       <key name="name" default="Mapping Storage"/>
     </sectiontype>
 
-    <sectiontype type="fullstorage">
+    <sectiontype type="fullstorage" datatype="ZODB.config.BDBStorage">
       <key name="name" required="yes" />
       <key name="interval" datatype="time-interval" default="2m" />
       <key name="kbyte" datatype="integer" default="0" />
@@ -29,7 +29,7 @@
 
     <!-- XXX Fred promises to make it so minimal storage is just an
          extension of fullstorage -->
-    <sectiontype type="minimalstorage">
+    <sectiontype type="minimalstorage" datatype="ZODB.config.BDBStorage">
       <key name="name" required="yes" />
       <key name="interval" datatype="time-interval" default="2m" />
       <key name="kbyte" datatype="integer" default="0" />
@@ -42,7 +42,7 @@
       <key name="read_only" datatype="boolean" default="off"/>
     </sectiontype>
 
-    <sectiontype type="zeoclient">
+    <sectiontype type="zeoclient" datatype="ZODB.config.ZEOClient">
       <multikey name="server" datatype="socket-address" required="yes"/>
       <key name="storage" default="1"/>
       <key name="cache_size" datatype="integer" default="20000000"/>
@@ -54,6 +54,13 @@
       <key name="wait" datatype="boolean" default="on"/>
       <key name="read_only" datatype="boolean" default="off"/>
       <key name="read_only_fallback" datatype="boolean" default="off"/>
+    </sectiontype>
+
+    <sectiontype type="demostorage">
+      <!--datatype="ZODB.config.DemoStorage"-->
+      <key name="name" default="Demo Storage"/>
+      <section type="storage" name="*" attribute="base"/>
+      <key name="quota" datatype="integer"/>
     </sectiontype>
 
   </sectiongroup>


=== ZODB3/ZODB/config.py 1.1.4.5 => 1.1.4.6 ===
--- ZODB3/ZODB/config.py:1.1.4.5	Fri Jan  3 14:03:14 2003
+++ ZODB3/ZODB/config.py	Fri Jan  3 14:21:49 2003
@@ -43,36 +43,64 @@
     return databaseFromConfig(config)
 
 def databaseFromConfig(config):
-    return ZODB.DB(storageFromConfig(config.storage),
+    return ZODB.DB(config.storage.open(),
                    pool_size=config.pool_size,
                    cache_size=config.cache_size,
                    version_pool_size=config.version_pool_size,
                    version_cache_size=config.version_cache_size)
 
-class StorageOpener:
+class StorageConfig:
 
-    def fromConfig(self, config):
-        meth = getattr(self, config.getSectionType())
-        return meth(config)
+    def __init__(self, config):
+        self.config = config
 
-    def mappingstorage(self, config):
+    def open(self):
+        raise NotImplementedError
+
+class MappingStorage(StorageConfig):
+
+    def open(self):
         from ZODB.MappingStorage import MappingStorage
-        return MappingStorage(config.name)
+        return MappingStorage(self.config.name)
 
-    def filestorage(self, config):
+class FileStorage(StorageConfig):
+
+    def open(self):
         from ZODB.FileStorage import FileStorage
-        return FileStorage(config.path,
-                           create=config.create,
-                           read_only=config.read_only,
-                           stop=config.stop,
-                           quota=config.quota)
+        return FileStorage(self.config.path,
+                           create=self.config.create,
+                           read_only=self.config.read_only,
+                           stop=self.config.stop,
+                           quota=self.config.quota)
+
+class ZEOClient(StorageConfig):
 
-    def _bdbstorage(self, config):
+    def open(self):
+        from ZEO.ClientStorage import ClientStorage
+        # config.server is a multikey of socket-address values
+        # where the value is a socket family, address tuple.
+        L = [addr for family, addr in self.config.server]
+        return ClientStorage(
+            L,
+            storage=self.config.storage,
+            cache_size=self.config.cache_size,
+            name=self.config.name,
+            client=self.config.client,
+            var=self.config.var,
+            min_disconnect_poll=self.config.min_disconnect_poll,
+            max_disconnect_poll=self.config.max_disconnect_poll,
+            wait=self.config.wait,
+            read_only=self.config.read_only,
+            read_only_fallback=self.config.read_only_fallback)
+
+class BDBStorage(StorageConfig):
+    
+    def open(self):
         from BDBStorage.BerkeleyBase import BerkeleyConfig
         from BDBStorage.BDBFullStorage import BDBFullStorage
         from BDBStorage.BDBMinimalStorage import BDBMinimalStorage
         # Figure out which class we want
-        sectiontype = config.getSectionType()
+        sectiontype = self.config.getSectionType()
         storageclass = {'fullstorage': BDBFullStorage,
                         'minimalstorage': BDBMinimalStorage,
                         }[sectiontype]
@@ -80,27 +108,5 @@
         for name in dir(BerkeleyConfig):
             if name.startswith('_'):
                 continue
-            setattr(bconf, name, getattr(config, name))
-        return storageclass(config.name, config=bconf)
-
-    fullstorage = _bdbstorage
-    minimalstorage = _bdbstorage
-
-    def zeoclient(self, config):
-        from ZEO.ClientStorage import ClientStorage
-        # config.server is a multikey of socket-address values
-        # where the value is a socket family, address tuple.
-        L = [addr for family, addr in config.server]
-        return ClientStorage(L,
-                             storage=config.storage,
-                             cache_size=config.cache_size,
-                             name=config.name,
-                             client=config.client,
-                             var=config.var,
-                             min_disconnect_poll=config.min_disconnect_poll,
-                             max_disconnect_poll=config.max_disconnect_poll,
-                             wait=config.wait,
-                             read_only=config.read_only,
-                             read_only_fallback=config.read_only_fallback)
-
-storageFromConfig = StorageOpener().fromConfig
+            setattr(bconf, name, getattr(self.config, name))
+        return storageclass(self.config.name, config=bconf)