[Zope-Checkins] CVS: Packages/ZConfig - matcher.py:1.1.2.17
Fred L. Drake, Jr.
fred@zope.com
Fri, 13 Dec 2002 09:53:48 -0500
Update of /cvs-repository/Packages/ZConfig
In directory cvs.zope.org:/tmp/cvs-serv25148
Modified Files:
Tag: zconfig-schema-devel-branch
matcher.py
Log Message:
Add __name__ and __type__ to the SectionValue, and give it a
reasonable __repr__().
=== Packages/ZConfig/matcher.py 1.1.2.16 => 1.1.2.17 ===
--- Packages/ZConfig/matcher.py:1.1.2.16 Thu Dec 12 17:50:48 2002
+++ Packages/ZConfig/matcher.py Fri Dec 13 09:53:47 2002
@@ -129,7 +129,7 @@
values[i] = [dt.convert(s) for s in values[i]]
else:
values[i] = dt.convert(values[i])
- v = SectionValue(attrnames, values)
+ v = self.createValue(attrnames)
# XXX Really should delay this until after all the
# XXX sibling SectionValue instances have been created and
# XXX we're ready to construct the parent.
@@ -137,17 +137,21 @@
v = self.info.handler(v)
return v
+ def createValue(self, attrnames):
+ return SectionValue(attrnames, self._values, None, self.type)
+
class SectionMatcher(BaseMatcher):
- def __init__(self, info, name):
- if name is not None:
+ def __init__(self, info, type, name):
+ if name or info.allowUnnamed():
self.name = name
- elif info.allowUnnamed():
- self.name = None
else:
raise ZConfig.ConfigurationError(
- `info.name` + " sections may not be unnamed")
- BaseMatcher.__init__(self, info, info.sectiontype)
+ `type.name` + " sections may not be unnamed")
+ BaseMatcher.__init__(self, info, type)
+
+ def createValue(self, attrnames):
+ return SectionValue(attrnames, self._values, self.name, self.type)
class SchemaMatcher(BaseMatcher):
@@ -164,9 +168,21 @@
class SectionValue:
"""Generic 'bag-of-values' object for a section."""
- def __init__(self, attrnames, values):
+ def __init__(self, attrnames, values, name, type):
self._attrnames = attrnames
self._values = values
+ self.__name__ = name
+ self.__type__ = type
+
+ def __repr__(self):
+ if self.__name__:
+ # probably unique for a given config file; more readable than id()
+ name = `self.__name__`
+ else:
+ # identify uniquely
+ name = "at %#x" % id(self)
+ clsname = self.__class__.__name__
+ return "<%s for %s %s>" % (clsname, self.__type__.name, name)
def __len__(self):
return len(self._values)