[Zope3-checkins] CVS: Packages/ZConfig - matcher.py:1.1.2.28

Fred L. Drake, Jr. fred@zope.com
Tue, 31 Dec 2002 17:06:13 -0500


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

Modified Files:
      Tag: zconfig-schema-devel-branch
	matcher.py 
Log Message:
SectionValue:  Override __setattr__() and __setitem__(), so that the
config values that are accessible by both name and position are kept
in sync.


=== Packages/ZConfig/matcher.py 1.1.2.27 => 1.1.2.28 ===
--- Packages/ZConfig/matcher.py:1.1.2.27	Thu Dec 19 16:11:22 2002
+++ Packages/ZConfig/matcher.py	Tue Dec 31 17:06:12 2002
@@ -209,13 +209,18 @@
 
 
 class SectionValue:
-    """Generic 'bag-of-values' object for a section."""
+    """Generic 'bag-of-values' object for a section.
+
+    Derived classes should always call the SectionValue constructor
+    before attempting to modify self.
+    """
 
     def __init__(self, attrnames, values, name, type):
-        self._attrnames = attrnames
-        self._values = values
-        self.__name__ = name
-        self.__type__ = type
+        d = self.__dict__
+        d['_attrnames'] = attrnames
+        d['_values'] = values
+        d['__name__'] = name
+        d['__type__'] = type
 
     def __repr__(self):
         if self.__name__:
@@ -235,9 +240,22 @@
             raise TypeError("SectionValue does not support slicing")
         return self._values[index]
 
+    def __setitem__(self, index, value):
+        if isinstance(index, types.SliceType):
+            raise TypeError("SectionValue does not support slicing")
+        self._values[index] = value
+
     def __getattr__(self, name):
         try:
             i = self._attrnames.index(name)
         except ValueError:
             raise AttributeError, name
         return self._values[i]
+
+    def __setattr__(self, name, value):
+        try:
+            i = self._attrnames.index(name)
+        except ValueError:
+            self.__dict__[name] = value
+        else:
+            self._values[i] = value