[Python-checkins] python/dist/src/Lib/plat-mac plistlib.py, 1.12, 1.13

jvr at users.sourceforge.net jvr at users.sourceforge.net
Tue Oct 26 09:38:19 CEST 2004


Update of /cvsroot/python/python/dist/src/Lib/plat-mac
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32063

Modified Files:
	plistlib.py 
Log Message:
Deprecating Dict class; going through a few hoops to get the warnings right.

Index: plistlib.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/plat-mac/plistlib.py,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- plistlib.py	26 Oct 2004 07:20:26 -0000	1.12
+++ plistlib.py	26 Oct 2004 07:38:16 -0000	1.13
@@ -20,23 +20,17 @@
 dictionary keys) may be unicode strings -- they will be written out as
 UTF-8.
 
-This module exports a class named Dict(), which allows you to easily
-construct (nested) dicts using keyword arguments as well as accessing
-values with attribute notation, where d.foo is equivalent to d["foo"].
-Regular dictionaries work, too. Dictionaries are always represented with
-Dict instances when loading plist data.
-
 The <data> plist type is supported through the Data class. This is a
 thin wrapper around a Python string.
 
 Generate Plist example:
 
-    pl = Dict(
+    pl = dict(
         aString="Doodah",
         aList=["A", "B", 12, 32.1, [1, 2, 3]],
         aFloat = 0.1,
         anInt = 728,
-        aDict=Dict(
+        aDict=dict(
             anotherString="<hello & hi there!>",
             aUnicodeValue=u'M\xe4ssig, Ma\xdf',
             aTrueValue=True,
@@ -53,9 +47,7 @@
 Parse Plist example:
 
     pl = readPlist(pathOrFile)
-    print pl.aKey  # same as pl["aKey"]
-
-
+    print pl["aKey"]
 """
 
 
@@ -64,7 +56,7 @@
     "readPlistFromResource", "writePlistToResource",
     "Plist", "Data", "Dict"
 ]
-# Note: the Plist class has been deprecated.
+# Note: the Plist and Dict classes have been deprecated.
 
 import base64
 import datetime
@@ -282,20 +274,26 @@
         self.endElement("array")
 
 
-class Dict(dict):
+class _InternalDict(dict):
 
-    """Convenience dictionary subclass: it allows attribute notation
-    to retrieve values, making d.foo equivalent to d["foo"].
-    """
+    # This class is needed while Dict is scheduled for deprecation:
+    # we only need to warn when a *user* instantiates Dict or when
+    # the "attribute notation for dict keys" is used.
 
     def __getattr__(self, attr):
         try:
             value = self[attr]
         except KeyError:
             raise AttributeError, attr
+        from warnings import warn
+        warn("Attribute access from plist dicts is deprecated, use d[key] "
+             "notation instead", PendingDeprecationWarning)
         return value
 
     def __setattr__(self, attr, value):
+        from warnings import warn
+        warn("Attribute access from plist dicts is deprecated, use d[key] "
+             "notation instead", PendingDeprecationWarning)
         self[attr] = value
 
     def __delattr__(self, attr):
@@ -303,12 +301,23 @@
             del self[attr]
         except KeyError:
             raise AttributeError, attr
+        from warnings import warn
+        warn("Attribute access from plist dicts is deprecated, use d[key] "
+             "notation instead", PendingDeprecationWarning)
 
+class Dict(_InternalDict):
 
-class Plist(Dict):
+    def __init__(self, **kwargs):
+        from warnings import warn
+        warn("The plistlib.Dict class is deprecated, use builtin dict instead",
+             PendingDeprecationWarning)
+        super(Dict, self).__init__(**kwargs)
 
-    """This class has been deprecated. Use the Dict with readPlist() and
-    writePlist() functions instead.
+
+class Plist(_InternalDict):
+
+    """This class has been deprecated. Use readPlist() and writePlist() 
+    functions instead, together with regular dict objects.
     """
 
     def __init__(self, **kwargs):
@@ -408,7 +417,7 @@
     # element handlers
 
     def begin_dict(self, attrs):
-        d = Dict()
+        d = _InternalDict()
         self.addObject(d)
         self.stack.append(d)
     def end_dict(self):



More information about the Python-checkins mailing list