[Checkins] SVN: ZODB/trunk/src/ZEO/ Allow the storage name to be ommitted from the storage configuration

Jim Fulton jim at zope.com
Sun Nov 16 12:11:41 EST 2008


Log message for revision 93012:
  Allow the storage name to be ommitted from the storage configuration
  when there is just one storage.
  

Changed:
  U   ZODB/trunk/src/ZEO/runzeo.py
  U   ZODB/trunk/src/ZEO/schema.xml
  A   ZODB/trunk/src/ZEO/tests/zdoptions.test

-=-
Modified: ZODB/trunk/src/ZEO/runzeo.py
===================================================================
--- ZODB/trunk/src/ZEO/runzeo.py	2008-11-16 15:51:24 UTC (rev 93011)
+++ ZODB/trunk/src/ZEO/runzeo.py	2008-11-16 17:11:41 UTC (rev 93012)
@@ -124,6 +124,20 @@
         self.add("storages", "storages",
                  required="no storages specified; use -f or -C")
 
+    def realize(self, *a, **k):
+        ZDOptions.realize(self, *a, **k)
+        nunnamed = [s for s in self.storages if s.name is None]
+        if nunnamed:
+            if len(nunnamed) > 1:
+                return self.usage("No more than one storage may be unnamed.")
+            if [s for s in self.storages if s.name == '1']:
+                return self.usage(
+                    "Can't have an unnamed storage and a storage named 1.")
+            for s in self.storages:
+                if s.name is None:
+                    s.name = '1'
+                    break
+                
 
 class ZEOServer:
 

Modified: ZODB/trunk/src/ZEO/schema.xml
===================================================================
--- ZODB/trunk/src/ZEO/schema.xml	2008-11-16 15:51:24 UTC (rev 93011)
+++ ZODB/trunk/src/ZEO/schema.xml	2008-11-16 17:11:41 UTC (rev 93012)
@@ -24,7 +24,7 @@
 
   <section type="runner" name="*" required="no" attribute="runner" />
 
-  <multisection name="+" type="ZODB.storage"
+  <multisection name="*" type="ZODB.storage"
                 attribute="storages"
                 required="yes">
     <description>

Added: ZODB/trunk/src/ZEO/tests/zdoptions.test
===================================================================
--- ZODB/trunk/src/ZEO/tests/zdoptions.test	                        (rev 0)
+++ ZODB/trunk/src/ZEO/tests/zdoptions.test	2008-11-16 17:11:41 UTC (rev 93012)
@@ -0,0 +1,132 @@
+Minimal test of Server Options Handling
+=======================================
+
+This is initially motivated by a desire to remove the requirement of
+specifying a storage name when there is only one storage.
+
+Storage Names
+-------------
+
+It is an error not to specify any storages:
+
+    >>> import StringIO, sys, ZEO.runzeo
+    >>> stderr = sys.stderr
+
+    >>> open('config', 'w').write("""
+    ... <zeo>
+    ...     address 8100
+    ... </zeo>
+    ... """)
+    
+    >>> sys.stderr = StringIO.StringIO() 
+    >>> options = ZEO.runzeo.ZEOOptions()
+    >>> options.realize('-C config'.split())
+    Traceback (most recent call last):
+    ...
+    SystemExit: 2
+
+    >>> print sys.stderr.getvalue() # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
+    Error: not enough values for section type 'zodb.storage';
+     0 found, 1 required
+    ...
+
+
+But we can specify a storage without a name:
+
+    >>> open('config', 'w').write("""
+    ... <zeo>
+    ...     address 8100
+    ... </zeo>
+    ... <mappingstorage>
+    ... </mappingstorage>
+    ... """)
+    >>> options = ZEO.runzeo.ZEOOptions()
+    >>> options.realize('-C config'.split())
+    >>> [storage.name for storage in options.storages]
+    ['1']
+
+We can't have multiple unnamed storages:
+
+    >>> sys.stderr = StringIO.StringIO() 
+    >>> open('config', 'w').write("""
+    ... <zeo>
+    ...     address 8100
+    ... </zeo>
+    ... <mappingstorage>
+    ... </mappingstorage>
+    ... <mappingstorage>
+    ... </mappingstorage>
+    ... """)
+    >>> options = ZEO.runzeo.ZEOOptions()
+    >>> options.realize('-C config'.split())
+    Traceback (most recent call last):
+    ...
+    SystemExit: 2
+
+    >>> print sys.stderr.getvalue() # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
+    Error: No more than one storage may be unnamed.
+    ...
+
+Or an unnamed storage and one named '1':
+
+    >>> sys.stderr = StringIO.StringIO() 
+    >>> open('config', 'w').write("""
+    ... <zeo>
+    ...     address 8100
+    ... </zeo>
+    ... <mappingstorage>
+    ... </mappingstorage>
+    ... <mappingstorage 1>
+    ... </mappingstorage>
+    ... """)
+    >>> options = ZEO.runzeo.ZEOOptions()
+    >>> options.realize('-C config'.split())
+    Traceback (most recent call last):
+    ...
+    SystemExit: 2
+
+    >>> print sys.stderr.getvalue() # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
+    Error: Can't have an unnamed storage and a storage named 1.
+    ...
+
+But we can have multiple storages:
+
+    >>> open('config', 'w').write("""
+    ... <zeo>
+    ...     address 8100
+    ... </zeo>
+    ... <mappingstorage x>
+    ... </mappingstorage>
+    ... <mappingstorage y>
+    ... </mappingstorage>
+    ... """)
+    >>> options = ZEO.runzeo.ZEOOptions()
+    >>> options.realize('-C config'.split())
+    >>> [storage.name for storage in options.storages]
+    ['x', 'y']
+
+As long as the names are unique:
+
+    >>> sys.stderr = StringIO.StringIO() 
+    >>> open('config', 'w').write("""
+    ... <zeo>
+    ...     address 8100
+    ... </zeo>
+    ... <mappingstorage 1>
+    ... </mappingstorage>
+    ... <mappingstorage 1>
+    ... </mappingstorage>
+    ... """)
+    >>> options = ZEO.runzeo.ZEOOptions()
+    >>> options.realize('-C config'.split())
+    Traceback (most recent call last):
+    ...
+    SystemExit: 2
+
+    >>> print sys.stderr.getvalue() # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
+    Error: section names must not be re-used within the same container:'1'
+    ...
+
+.. Cleanup =====================================================
+
+    >>> sys.stderr = stderr


Property changes on: ZODB/trunk/src/ZEO/tests/zdoptions.test
___________________________________________________________________
Added: svn:eol-style
   + native



More information about the Checkins mailing list