[Zope-Checkins] CVS: Packages/ZConfig - datatypes.py:1.1.2.8 matcher.py:1.1.2.19 schema.py:1.1.2.15

Fred L. Drake, Jr. fred@zope.com
Fri, 13 Dec 2002 12:28:12 -0500


Update of /cvs-repository/Packages/ZConfig
In directory cvs.zope.org:/tmp/cvs-serv17266

Modified Files:
      Tag: zconfig-schema-devel-branch
	datatypes.py matcher.py schema.py 
Log Message:
Change the datatype converters to not be special objects, but any callable
that takes one argument.


=== Packages/ZConfig/datatypes.py 1.1.2.7 => 1.1.2.8 ===
--- Packages/ZConfig/datatypes.py:1.1.2.7	Thu Dec 12 17:02:26 2002
+++ Packages/ZConfig/datatypes.py	Fri Dec 13 12:28:11 2002
@@ -22,18 +22,6 @@
     False = 0
 
 
-class NullConversion:
-    def convert(self, value):
-        return value
-
-
-class TrivialConversion:
-    """Datatype that exposes a conversion implemented as a function."""
-
-    def __init__(self, conversion):
-        self.convert = conversion
-
-
 class MemoizedConversion:
     """Conversion helper that caches the results of expensive conversions."""
 
@@ -165,15 +153,15 @@
 
 
 stock_datatypes = {
-    "boolean":       TrivialConversion(asBoolean),
-    "integer":       TrivialConversion(int),
-    "float":         TrivialConversion(float),
-    "str":           TrivialConversion(str),
-    "locale":        MemoizedConversion(Locale().convert),
-    "port-number":   RangeCheckedConversion(int, min=1, max=0xffff),
-    "basic-key":     BasicKeyConversion(),
-    "identifier":    IdentifierConversion(),
-    "logging-level": LogLevelConversion(),
+    "boolean":       asBoolean,
+    "integer":       int,
+    "float":         float,
+    "str":           str,
+    "locale":        MemoizedConversion(Locale().convert).convert,
+    "port-number":   RangeCheckedConversion(int, min=1, max=0xffff).convert,
+    "basic-key":     BasicKeyConversion().convert,
+    "identifier":    IdentifierConversion().convert,
+    "logging-level": LogLevelConversion().convert,
     }
 
 class Registry:
@@ -214,9 +202,8 @@
             except AttributeError:
                 n = '.'.join(modulenames)
                 package = __import__(n, g, g, component)
-        datatype = package()
-        self._other[name] = datatype
-        return datatype
+        self._other[name] = package
+        return package
 
 
 _r = Registry()


=== Packages/ZConfig/matcher.py 1.1.2.18 => 1.1.2.19 ===
--- Packages/ZConfig/matcher.py:1.1.2.18	Fri Dec 13 10:41:52 2002
+++ Packages/ZConfig/matcher.py	Fri Dec 13 12:28:11 2002
@@ -126,14 +126,14 @@
             name, ci = self.type[i]
             if ci.ismulti():
                 if ci.issection():
-                    values[i] = [s.__type__.datatype.convert(s)
+                    values[i] = [s.__type__.datatype(s)
                                  for s in values[i]]
                 else:
-                    values[i] = [ci.datatype.convert(s) for s in values[i]]
+                    values[i] = [ci.datatype(s) for s in values[i]]
             elif ci.issection():
-                values[i] = values[i].__type__.datatype.convert(values[i])
+                values[i] = values[i].__type__.datatype(values[i])
             else:
-                values[i] = ci.datatype.convert(values[i])
+                values[i] = ci.datatype(values[i])
         v = self.createValue(attrnames)
         # XXX  Really should delay this until after all the
         # XXX  sibling SectionValue instances have been created and
@@ -164,10 +164,10 @@
         BaseMatcher.__init__(self, info, info)
 
     def finish(self):
-        # Since there's no outer container to call datatype.convert()
+        # Since there's no outer container to call datatype()
         # for the schema, we convert on the way out.
         v = BaseMatcher.finish(self)
-        return self.type.datatype.convert(v)
+        return self.type.datatype(v)
 
 
 class SectionValue:


=== Packages/ZConfig/schema.py 1.1.2.14 => 1.1.2.15 ===
--- Packages/ZConfig/schema.py:1.1.2.14	Fri Dec 13 12:12:59 2002
+++ Packages/ZConfig/schema.py	Fri Dec 13 12:28:11 2002
@@ -34,9 +34,11 @@
 default_value_type = datatypes.get("str")
 default_key_type = datatypes.get("basic-key")
 default_name_type = default_key_type
-default_section_type = datatypes.NullConversion()
 
-_identifier = datatypes.get("identifier").convert
+def default_section_type(value):
+    return value
+
+_identifier = datatypes.get("identifier")
 
 
 class SchemaParser(xml.sax.ContentHandler):
@@ -194,7 +196,7 @@
         if not name:
             self.doSchemaError("key name may not be omitted or empty")
         # run the keytype converter to make sure this is a valid key
-        name = self._stack[-1].keytype.convert(name)
+        name = self._stack[-1].keytype(name)
         datatype = datatypes.get(attrs.get("datatype"))
         maxOccurs, minOccurs, handler = self.get_common_info(attrs)
         attribute = attrs.get("attribute")