[Zodb-checkins] CVS: StandaloneZConfig/ZConfig - info.py:1.23 schema.py:1.35

Fred L. Drake, Jr. fred at zope.com
Wed Apr 14 23:49:13 EDT 2004


Update of /cvs-repository/StandaloneZConfig/ZConfig
In directory cvs.zope.org:/tmp/cvs-serv24282

Modified Files:
	info.py schema.py 
Log Message:
desparately try to clean up someo of the internal logic so fixing really
obscure bugs is easier


=== StandaloneZConfig/ZConfig/info.py 1.22 => 1.23 ===
--- StandaloneZConfig/ZConfig/info.py:1.22	Mon Apr 12 11:27:00 2004
+++ StandaloneZConfig/ZConfig/info.py	Wed Apr 14 23:49:12 2004
@@ -99,14 +99,14 @@
         return False
 
 
-class KeyInfo(BaseInfo):
+class BaseKeyInfo(BaseInfo):
+
     def __init__(self, name, datatype, minOccurs, maxOccurs, handler,
                  attribute):
         assert minOccurs is not None
         BaseInfo.__init__(self, name, datatype, minOccurs, maxOccurs,
                           handler, attribute)
         self._finished = False
-        self._default = None
 
     def finish(self):
         if self._finished:
@@ -126,50 +126,63 @@
             raise ZConfig.SchemaError(
                 "unexpected key for default value")
 
-        value = ValueInfo(value, position)
-        if self.maxOccurs > 1:
-            if self.name == "+":
-                # This is a keyed value, not a simple value:
-                if self._default is None:
-                    self._default = {key: [value]}
-                else:
-                    if key in self._default:
-                        self._default[key].append(value)
-                    else:
-                        self._default[key] = [value]
-            elif self._default is None:
-                self._default = [value]
-            else:
-                self._default.append(value)
-        elif self.name == "+":
-            if self._default is None:
-                self._default = {key: value}
-            else:
-                if self._default.has_key(key):
-                    raise ZConfig.SchemaError(
-                        "duplicate default value for key %s" % `key`)
-                self._default[key] = value
+        self.add_valueinfo(ValueInfo(value, position), key)
+
+
+class KeyInfo(BaseKeyInfo):
+
+    _default = None
+
+    def __init__(self, name, datatype, minOccurs, handler, attribute):
+        BaseKeyInfo.__init__(self, name, datatype, minOccurs, 1,
+                             handler, attribute)
+        if self.name == "+":
+            self._default = {}
+
+    def add_valueinfo(self, vi, key):
+        if self.name == "+":
+            if self._default.has_key(key):
+                # not ideal: we're presenting the unconverted
+                # version of the key
+                raise ZConfig.SchemaError(
+                    "duplicate default value for key %s" % `key`)
+            self._default[key] = vi
         elif self._default is not None:
             raise ZConfig.SchemaError(
                 "cannot set more than one default to key with maxOccurs == 1")
         else:
-            self._default = value
+            self._default = vi
 
     def getdefault(self):
-        if not self._finished:
-            raise ZConfig.SchemaError(
-                "cannot get default value of key before KeyInfo"
-                " has been completely initialized")
-        if self._default is None:
-            if self.name == "+":
-                return {}
-            elif self.maxOccurs > 1:
-                return []
+        # Use copy.copy() to make sure we don't allow polution of
+        # our internal data without having to worry about both the
+        # list and dictionary cases:
+        return copy.copy(self._default)
+
+
+class MultiKeyInfo(BaseKeyInfo):
+
+    def __init__(self, name, datatype, minOccurs, maxOccurs, handler,
+                 attribute):
+        BaseKeyInfo.__init__(self, name, datatype, minOccurs, maxOccurs,
+                             handler, attribute)
+        if self.name == "+":
+            self._default = {}
         else:
-            # Use copy.copy() to make sure we don't allow polution of
-            # our internal data without having to worry about both the
-            # list and dictionary cases:
-            return copy.copy(self._default)
+            self._default = []
+
+    def add_valueinfo(self, vi, key):
+        if self.name == "+":
+            # This is a keyed value, not a simple value:
+            if key in self._default:
+                self._default[key].append(vi)
+            else:
+                self._default[key] = [vi]
+        else:
+            self._default.append(vi)
+
+    def getdefault(self):
+        return copy.copy(self._default)
 
 
 class SectionInfo(BaseInfo):


=== StandaloneZConfig/ZConfig/schema.py 1.34 => 1.35 ===
--- StandaloneZConfig/ZConfig/schema.py:1.34	Mon Apr 12 11:27:00 2004
+++ StandaloneZConfig/ZConfig/schema.py	Wed Apr 14 23:49:12 2004
@@ -395,7 +395,7 @@
     def start_key(self, attrs):
         name, datatype, handler, attribute = self.get_key_info(attrs, "key")
         min = self.get_required(attrs) and 1 or 0
-        key = info.KeyInfo(name, datatype, min, 1, handler, attribute)
+        key = info.KeyInfo(name, datatype, min, handler, attribute)
         if attrs.has_key("default"):
             if min:
                 self.error("required key cannot have a default value")
@@ -418,7 +418,7 @@
         name, datatype, handler, attribute = self.get_key_info(attrs,
                                                                "multikey")
         min, max = self.get_ordinality(attrs)
-        key = info.KeyInfo(name, datatype, min, max, handler, attribute)
+        key = info.MultiKeyInfo(name, datatype, min, max, handler, attribute)
         self._stack[-1].addkey(key)
         self._stack.append(key)
 




More information about the Zodb-checkins mailing list