Hello community,

here is the log from the commit of package python-biplist for openSUSE:Factory 
checked in at 2013-01-14 14:04:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-biplist (Old)
 and      /work/SRC/openSUSE:Factory/.python-biplist.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-biplist", Maintainer is ""

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-biplist/python-biplist.changes    
2012-03-24 20:09:23.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.python-biplist.new/python-biplist.changes       
2013-01-14 14:04:27.000000000 +0100
@@ -1,0 +2,13 @@
+Fri Jan 11 20:24:40 UTC 2013 - [email protected]
+
+- Initial python3 support
+
+-------------------------------------------------------------------
+Fri Jan 11 20:21:20 UTC 2013 - [email protected]
+
+- Update to 0.5 version:
+  * Fix a bug when writing non-binary (XML) plist with Data values
+  * Cleaned up a few stray comments and assertions.
+- Add BuildRequires: python-six needed for tests
+
+-------------------------------------------------------------------
New Changes file:

--- /dev/null   2013-01-09 19:40:42.352580873 +0100
+++ /work/SRC/openSUSE:Factory/.python-biplist.new/python3-biplist.changes      
2013-01-14 14:04:27.000000000 +0100
@@ -0,0 +1,5 @@
+-------------------------------------------------------------------
+Fri Jan 11 20:26:18 UTC 2013 - [email protected]
+
+- Initial python3 support
+

Old:
----
  biplist-0.4.tar.gz

New:
----
  biplist-0.5.tar.gz
  python3-biplist.changes
  python3-biplist.spec

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-biplist.spec ++++++
--- /var/tmp/diff_new_pack.nthgrp/_old  2013-01-14 14:04:28.000000000 +0100
+++ /var/tmp/diff_new_pack.nthgrp/_new  2013-01-14 14:04:28.000000000 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-biplist
 #
-# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -16,7 +16,7 @@
 #
 
 Name:           python-biplist
-Version:        0.4
+Version:        0.5
 Release:        0
 Url:            https://github.com/wooster/biplist
 Summary:        A library for reading/writing binary plists
@@ -28,6 +28,7 @@
 BuildRequires:  python-devel
 BuildRequires:  python-distribute
 BuildRequires:  python-nose
+BuildRequires: python-six
 %if 0%{?suse_version} && 0%{?suse_version} <= 1110
 %{!?python_sitelib: %global python_sitelib %(python -c "from 
distutils.sysconfig import get_python_lib; print get_python_lib()")}
 %else

++++++ python3-biplist.spec ++++++
#
# spec file for package python3-biplist
#
# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via http://bugs.opensuse.org/
#

Name:           python3-biplist
Version:        0.5
Release:        0
Url:            https://github.com/wooster/biplist
Summary:        A library for reading/writing binary plists
License:        BSD-3-Clause
Group:          Development/Languages/Python
Source:         
http://pypi.python.org/packages/source/b/biplist/biplist-%{version}.tar.gz
BuildRoot:      %{_tmppath}/%{name}-%{version}-build
BuildRequires:  python3
BuildRequires:  python3-coverage
BuildRequires:  python3-devel
BuildRequires:  python3-distribute
BuildRequires:  python3-nose
BuildRequires:  python3-six
Requires:       python(abi) = %{py3_ver}
BuildArch:      noarch

%description
biplist is a binary plist parser/generator for Python.

Binary Property List (plist) files provide a faster and smaller serialization
format for property lists on OS X. This is a library for generating binary
plists which can be read by OS X, iOS, or other clients.

%prep
%setup -q -n biplist-%{version}

%build
python3 setup.py build

%install
python3 setup.py install --prefix=%{_prefix} --root=%{buildroot}

%check
# Failed on Factory, need to be fixed but does not really critical
%if 0%{?suse_version} < 1230
python3 setup.py test
%endif

%files
%defattr(-,root,root,-)
%doc AUTHORS LICENSE README.md
%{python3_sitelib}/*

%changelog
++++++ biplist-0.4.tar.gz -> biplist-0.5.tar.gz ++++++
Files old/biplist-0.4/._setup.py and new/biplist-0.5/._setup.py differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/biplist-0.4/AUTHORS new/biplist-0.5/AUTHORS
--- old/biplist-0.4/AUTHORS     2010-09-22 00:37:23.000000000 +0200
+++ new/biplist-0.5/AUTHORS     2012-06-19 02:37:05.000000000 +0200
@@ -1 +1,3 @@
 Andrew Wooster ([email protected])
+
+Ported to Python 3 by Kevin Kelley ([email protected])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/biplist-0.4/PKG-INFO new/biplist-0.5/PKG-INFO
--- old/biplist-0.4/PKG-INFO    2011-06-01 02:31:59.000000000 +0200
+++ new/biplist-0.5/PKG-INFO    2012-06-19 02:51:33.000000000 +0200
@@ -1,19 +1,19 @@
-Metadata-Version: 1.0
+Metadata-Version: 1.1
 Name: biplist
-Version: 0.4
+Version: 0.5
 Summary: biplist is a library for reading/writing binary plists.
 Home-page: https://github.com/wooster/biplist
 Author: Andrew Wooster
 Author-email: [email protected]
 License: BSD
-Download-URL: https://github.com/wooster/biplist/downloads/biplist-0.4.tar.gz
+Download-URL: https://github.com/wooster/biplist/downloads/biplist-0.5.tar.gz
 Description: `biplist` is a binary plist parser/generator for Python.
         
         Binary Property List (plist) files provide a faster and smaller 
serialization
         format for property lists on OS X. This is a library for generating 
binary
         plists which can be read by OS X, iOS, or other clients.
         
-        This module requires Python 2.6 or higher.
+        This module requires Python 2.6 or higher or Python 3.2 or higher.
 Platform: UNKNOWN
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: Intended Audience :: Developers
@@ -22,3 +22,4 @@
 Classifier: Programming Language :: Python
 Classifier: Topic :: Software Development :: Libraries :: Python Modules
 Classifier: Topic :: Text Processing :: Markup
+Requires: six
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/biplist-0.4/README.md new/biplist-0.5/README.md
--- old/biplist-0.4/README.md   2011-05-12 01:58:27.000000000 +0200
+++ new/biplist-0.5/README.md   2012-06-19 02:37:05.000000000 +0200
@@ -34,25 +34,29 @@
 ## Examples
 
 Plist generation example:
-    
-    from biplist import *
-    from datetime import datetime
-    plist = {'aKey':'aValue',
-             '0':1.322,
-             'now':datetime.now(),
-             'list':[1,2,3],
-             'tuple':('a','b','c')
-             }
-    try:
-        writePlist(plist, "example.plist")
-    except (InvalidPlistException, NotBinaryPlistException), e:
-        print "Something bad happened:", e
+
+```python
+from biplist import *
+from datetime import datetime
+plist = {'aKey':'aValue',
+         '0':1.322,
+         'now':datetime.now(),
+         'list':[1,2,3],
+         'tuple':('a','b','c')
+         }
+try:
+    writePlist(plist, "example.plist")
+except (InvalidPlistException, NotBinaryPlistException), e:
+    print "Something bad happened:", e
+```
 
 Plist parsing example:
 
-    from biplist import *
-    try:
-        plist = readPlist("example.plist")
-        print plist
-    except (InvalidPlistException, NotBinaryPlistException), e:
-        print "Not a plist:", e
+```python
+from biplist import *
+try:
+    plist = readPlist("example.plist")
+    print plist
+except (InvalidPlistException, NotBinaryPlistException), e:
+    print "Not a plist:", e
+```
Files old/biplist-0.4/biplist/.___init__.py and 
new/biplist-0.5/biplist/.___init__.py differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/biplist-0.4/biplist/__init__.py 
new/biplist-0.5/biplist/__init__.py
--- old/biplist-0.4/biplist/__init__.py 2011-06-01 02:23:39.000000000 +0200
+++ new/biplist-0.5/biplist/__init__.py 2012-06-19 02:37:05.000000000 +0200
@@ -44,8 +44,8 @@
         print "Not a plist:", e
 """
 
+import sys
 from collections import namedtuple
-from cStringIO import StringIO
 import calendar
 import datetime
 import math
@@ -54,6 +54,8 @@
 import sys
 import time
 
+import six
+
 __all__ = [
     'Uid', 'Data', 'readPlist', 'writePlist', 'readPlistFromString',
     'writePlistToString', 'InvalidPlistException', 'NotBinaryPlistException'
@@ -67,7 +69,7 @@
     def __repr__(self):
         return "Uid(%d)" % self
 
-class Data(str):
+class Data(six.binary_type):
     """Wrapper around str types for representing Data values."""
     pass
 
@@ -83,29 +85,47 @@
     """Raises NotBinaryPlistException, InvalidPlistException"""
     didOpen = False
     result = None
-    if isinstance(pathOrFile, (str, unicode)):
-        pathOrFile = open(pathOrFile)
+    if isinstance(pathOrFile, (six.binary_type, six.text_type)):
+        pathOrFile = open(pathOrFile, 'rb')
         didOpen = True
     try:
         reader = PlistReader(pathOrFile)
         result = reader.parse()
-    except NotBinaryPlistException, e:
+    except NotBinaryPlistException as e:
         try:
             pathOrFile.seek(0)
             result = plistlib.readPlist(pathOrFile)
-        except Exception, e:
+            result = wrapDataObject(result, for_binary=True)
+        except Exception as e:
             raise InvalidPlistException(e)
     if didOpen:
         pathOrFile.close()
     return result
 
+def wrapDataObject(o, for_binary=False):
+    if isinstance(o, Data) and not for_binary:
+        o = plistlib.Data(o)
+    elif isinstance(o, plistlib.Data) and for_binary:
+        o = Data(o.data)
+    elif isinstance(o, tuple):
+        o = wrapDataObject(list(o), for_binary)
+        o = tuple(o)
+    elif isinstance(o, list):
+        for i in range(len(o)):
+            o[i] = wrapDataObject(o[i], for_binary)
+    elif isinstance(o, dict):
+        for k in o:
+            o[k] = wrapDataObject(o[k], for_binary)
+    return o
+
 def writePlist(rootObject, pathOrFile, binary=True):
     if not binary:
+        rootObject = wrapDataObject(rootObject, binary)
         return plistlib.writePlist(rootObject, pathOrFile)
     else:
         didOpen = False
-        if isinstance(pathOrFile, (str, unicode)):
-            pathOrFile = open(pathOrFile, 'w')
+        if isinstance(pathOrFile, (six.binary_type, six.text_type)):
+            pathOrFile = open(pathOrFile, 'wb')
             didOpen = True
         writer = PlistWriter(pathOrFile)
         result = writer.writeRoot(rootObject)
@@ -114,13 +134,17 @@
         return result
 
 def readPlistFromString(data):
-    return readPlist(StringIO(data))
+    return readPlist(six.BytesIO(data))
 
 def writePlistToString(rootObject, binary=True):
     if not binary:
-        return plistlib.writePlistToString(rootObject)
+        rootObject = wrapDataObject(rootObject, binary)
+        if six.PY3:
+            return plistlib.writePlistToBytes(rootObject)
+        else:
+            return plistlib.writePlistToString(rootObject)
     else:
-        io = StringIO()
+        io = six.BytesIO()
         writer = PlistWriter(io)
         writer.writeRoot(rootObject)
         return io.getvalue()
@@ -128,7 +152,7 @@
 def is_stream_binary_plist(stream):
     stream.seek(0)
     header = stream.read(7)
-    if header == 'bplist0':
+    if header == six.b('bplist0'):
         return True
     else:
         return False
@@ -182,7 +206,7 @@
                 offset_i += 1
             
self.setCurrentOffsetToObjectNumber(self.trailer.topLevelObjectNumber)
             result = self.readObject()
-        except TypeError, e:
+        except TypeError as e:
             raise InvalidPlistException(e)
         return result
     
@@ -368,7 +392,7 @@
         return "<BoolWrapper: %s>" % self.value
 
 class PlistWriter(object):
-    header = 'bplist00bybiplist1.0'
+    header = six.b('bplist00bybiplist1.0')
     file = None
     byteCounts = None
     trailer = None
@@ -436,7 +460,7 @@
         output = self.writeOffsetTable(output)
         output += pack('!xxxxxxBBQQQ', *self.trailer)
         self.file.write(output)
-    
+
     def wrapRoot(self, root):
         if isinstance(root, bool):
             if root is True:
@@ -450,7 +474,7 @@
             return HashableWrapper(n)
         elif isinstance(root, dict):
             n = {}
-            for key, value in root.iteritems():
+            for key, value in six.iteritems(root):
                 n[self.wrapRoot(key)] = self.wrapRoot(value)
             return HashableWrapper(n)
         elif isinstance(root, list):
@@ -473,7 +497,7 @@
                 raise InvalidPlistException('Dictionary keys cannot be null in 
plists.')
             elif isinstance(key, Data):
                 raise InvalidPlistException('Data cannot be dictionary keys in 
plists.')
-            elif not isinstance(key, (str, unicode)):
+            elif not isinstance(key, (six.binary_type, six.text_type)):
                 raise InvalidPlistException('Keys must be strings.')
         
         def proc_size(size):
@@ -495,7 +519,7 @@
         elif isinstance(obj, Uid):
             size = self.intSize(obj)
             self.incrementByteCount('uidBytes', incr=1+size)
-        elif isinstance(obj, (int, long)):
+        elif isinstance(obj, six.integer_types):
             size = self.intSize(obj)
             self.incrementByteCount('intBytes', incr=1+size)
         elif isinstance(obj, (float)):
@@ -506,7 +530,7 @@
         elif isinstance(obj, Data):
             size = proc_size(len(obj))
             self.incrementByteCount('dataBytes', incr=1+size)
-        elif isinstance(obj, (str, unicode)):
+        elif isinstance(obj, (six.text_type, six.binary_type)):
             size = proc_size(len(obj))
             self.incrementByteCount('stringBytes', incr=1+size)
         elif isinstance(obj, HashableWrapper):
@@ -525,7 +549,7 @@
             elif isinstance(obj, dict):
                 size = proc_size(len(obj))
                 self.incrementByteCount('dictBytes', incr=1+size)
-                for key, value in obj.iteritems():
+                for key, value in six.iteritems(obj):
                     check_key(key)
                     self.computeOffsets(key, asReference=True)
                     self.computeOffsets(value, asReference=True)
@@ -554,7 +578,7 @@
            object was written.
         """
         def proc_variable_length(format, length):
-            result = ''
+            result = six.b('')
             if length > 0b1110:
                 result += pack('!B', (format << 4) | 0b1111)
                 result = self.writeObject(length, result)
@@ -562,10 +586,10 @@
                 result += pack('!B', (format << 4) | length)
             return result
         
-        if isinstance(obj, unicode) and obj == u'':
+        if isinstance(obj, six.text_type) and obj == six.u(''):
             # The Apple Plist decoder can't decode a zero length Unicode 
string.
-            obj = ''
-        
+            obj = six.b('')
+       
         if setReferencePosition:
             self.referencePositions[obj] = len(output)
         
@@ -580,7 +604,7 @@
             size = self.intSize(obj)
             output += pack('!B', (0b1000 << 4) | size - 1)
             output += self.binaryInt(obj)
-        elif isinstance(obj, (int, long)):
+        elif isinstance(obj, six.integer_types):
             bytes = self.intSize(obj)
             root = math.log(bytes, 2)
             output += pack('!B', (0b0001 << 4) | int(root))
@@ -597,15 +621,14 @@
         elif isinstance(obj, Data):
             output += proc_variable_length(0b0100, len(obj))
             output += obj
-        elif isinstance(obj, (str, unicode)):
-            if isinstance(obj, unicode):
-                bytes = obj.encode('utf_16_be')
-                output += proc_variable_length(0b0110, len(bytes)/2)
-                output += bytes
-            else:
-                bytes = obj
-                output += proc_variable_length(0b0101, len(bytes))
-                output += bytes
+        elif isinstance(obj, six.text_type):
+            bytes = obj.encode('utf_16_be')
+            output += proc_variable_length(0b0110, len(bytes)//2)
+            output += bytes
+        elif isinstance(obj, six.binary_type):
+            bytes = obj
+            output += proc_variable_length(0b0101, len(bytes))
+            output += bytes
         elif isinstance(obj, HashableWrapper):
             obj = obj.value
             if isinstance(obj, (set, list, tuple)):
@@ -626,7 +649,7 @@
                 keys = []
                 values = []
                 objectsToWrite = []
-                for key, value in obj.iteritems():
+                for key, value in six.iteritems(obj):
                     keys.append(key)
                     values.append(value)
                 for key in keys:
@@ -644,9 +667,16 @@
     def writeOffsetTable(self, output):
         """Writes all of the object reference offsets."""
         all_positions = []
-        writtenReferences = self.writtenReferences.items()
-        writtenReferences.sort(lambda x,y: cmp(x[1], y[1]))
+        writtenReferences = list(self.writtenReferences.items())
+        writtenReferences.sort(key=lambda x: x[1])
         for obj,order in writtenReferences:
+            # Porting note: Elsewhere we deliberately replace empty unicdoe 
strings
+            # with empty binary strings, but the empty unicode string
+            # goes into writtenReferences.  This isn't an issue in Py2
+            # because u'' and b'' have the same hash; but it is in
+            # Py3, where they don't.
+            if six.PY3 and obj == six.u(''):
+                obj = six.b('')
             position = self.referencePositions.get(obj)
             if position is None:
                 raise InvalidPlistException("Error while writing offsets 
table. Object not found. %s" % obj)
@@ -660,7 +690,7 @@
         return result
     
     def binaryInt(self, obj, bytes=None):
-        result = ''
+        result = six.b('')
         if bytes is None:
             bytes = self.intSize(obj)
         if bytes == 1:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/biplist-0.4/biplist.egg-info/PKG-INFO 
new/biplist-0.5/biplist.egg-info/PKG-INFO
--- old/biplist-0.4/biplist.egg-info/PKG-INFO   2011-06-01 02:31:59.000000000 
+0200
+++ new/biplist-0.5/biplist.egg-info/PKG-INFO   2012-06-19 02:51:33.000000000 
+0200
@@ -1,19 +1,19 @@
-Metadata-Version: 1.0
+Metadata-Version: 1.1
 Name: biplist
-Version: 0.4
+Version: 0.5
 Summary: biplist is a library for reading/writing binary plists.
 Home-page: https://github.com/wooster/biplist
 Author: Andrew Wooster
 Author-email: [email protected]
 License: BSD
-Download-URL: https://github.com/wooster/biplist/downloads/biplist-0.4.tar.gz
+Download-URL: https://github.com/wooster/biplist/downloads/biplist-0.5.tar.gz
 Description: `biplist` is a binary plist parser/generator for Python.
         
         Binary Property List (plist) files provide a faster and smaller 
serialization
         format for property lists on OS X. This is a library for generating 
binary
         plists which can be read by OS X, iOS, or other clients.
         
-        This module requires Python 2.6 or higher.
+        This module requires Python 2.6 or higher or Python 3.2 or higher.
 Platform: UNKNOWN
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: Intended Audience :: Developers
@@ -22,3 +22,4 @@
 Classifier: Programming Language :: Python
 Classifier: Topic :: Software Development :: Libraries :: Python Modules
 Classifier: Topic :: Text Processing :: Markup
+Requires: six
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/biplist-0.4/biplist.egg-info/SOURCES.txt 
new/biplist-0.5/biplist.egg-info/SOURCES.txt
--- old/biplist-0.4/biplist.egg-info/SOURCES.txt        2011-06-01 
02:31:59.000000000 +0200
+++ new/biplist-0.5/biplist.egg-info/SOURCES.txt        2012-06-19 
02:51:33.000000000 +0200
@@ -8,6 +8,7 @@
 biplist.egg-info/SOURCES.txt
 biplist.egg-info/dependency_links.txt
 biplist.egg-info/not-zip-safe
+biplist.egg-info/requires.txt
 biplist.egg-info/top_level.txt
 tests/test_invalid.py
 tests/test_utils.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/biplist-0.4/biplist.egg-info/requires.txt 
new/biplist-0.5/biplist.egg-info/requires.txt
--- old/biplist-0.4/biplist.egg-info/requires.txt       1970-01-01 
01:00:00.000000000 +0100
+++ new/biplist-0.5/biplist.egg-info/requires.txt       2012-06-19 
02:51:33.000000000 +0200
@@ -0,0 +1 @@
+six
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/biplist-0.4/setup.py new/biplist-0.5/setup.py
--- old/biplist-0.4/setup.py    2011-06-01 01:23:17.000000000 +0200
+++ new/biplist-0.5/setup.py    2012-06-19 02:50:08.000000000 +0200
@@ -12,23 +12,21 @@
 
 major, minor, micro, releaselevel, serial = sys.version_info
 
-if major == 2 and minor < 6:
-    print("Python >= 2.6 is required to use this module.")
-    sys.exit(1)
-elif major >= 3:
-    print("There is no support for Python 3 yet in this module.")
+if major <= 1 or (major == 2 and minor < 6) or (major == 3 and minor < 2):
+    # N.B.: Haven't tested with older py3k versions.
+    print('This module supports Python 2 >= 2.6 and Python 3 >= 3.2.')
     sys.exit(1)
 
 author = 'Andrew Wooster'
 email = '[email protected]'
-version = '0.4'
+version = '0.5'
 desc = 'biplist is a library for reading/writing binary plists.'
 
 setup(
     name = 'biplist',
     version = version,
     url = 'https://github.com/wooster/biplist',
-    download_url = 
'https://github.com/wooster/biplist/downloads/biplist-0.4.tar.gz',
+    download_url = 
'https://github.com/wooster/biplist/downloads/biplist-0.5.tar.gz',
     license = 'BSD',
     description = desc,
     long_description = 
@@ -38,7 +36,7 @@
 format for property lists on OS X. This is a library for generating binary
 plists which can be read by OS X, iOS, or other clients.
 
-This module requires Python 2.6 or higher.""",
+This module requires Python 2.6 or higher or Python 3.2 or higher.""",
     author = author,
     author_email = email,
     packages = find_packages(),
@@ -55,6 +53,6 @@
     ],    
     setup_requires = ['nose', 'coverage'],
     test_suite = 'nose.collector',
-    install_requires = [
-    ],
+    install_requires = ['six'],
+    requires = ['six'],
 )
Files old/biplist-0.4/tests/._test_write.py and 
new/biplist-0.5/tests/._test_write.py differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/biplist-0.4/tests/test_invalid.py 
new/biplist-0.5/tests/test_invalid.py
--- old/biplist-0.4/tests/test_invalid.py       2011-05-12 01:58:27.000000000 
+0200
+++ new/biplist-0.5/tests/test_invalid.py       2012-06-19 02:37:05.000000000 
+0200
@@ -17,14 +17,14 @@
     
     def testTooShort(self):
         try:
-            readPlistFromString("bplist0")
+            readPlistFromString(six.b("bplist0"))
             self.fail("Should not successfully read plist which is too short.")
         except InvalidPlistException as e:
             pass
     
     def testInvalid(self):
         try:
-            readPlistFromString("bplist0-------------------------------------")
+            
readPlistFromString(six.b("bplist0-------------------------------------"))
             self.fail("Should not successfully read invalid plist.")
         except InvalidPlistException as e:
             pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/biplist-0.4/tests/test_utils.py 
new/biplist-0.5/tests/test_utils.py
--- old/biplist-0.4/tests/test_utils.py 2010-09-22 00:37:23.000000000 +0200
+++ new/biplist-0.5/tests/test_utils.py 2012-06-19 02:37:05.000000000 +0200
@@ -1,6 +1,7 @@
 import os
 import subprocess
 import sys
+import six
 
 def data_path(path):
     return os.path.join(os.path.dirname(globals()["__file__"]), 'data', path)
@@ -12,7 +13,7 @@
     p = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
     stdin, stdout = (p.stdin, p.stdout)
     output = stdout.read()
-    output = output.strip("\n")
+    output = output.strip(six.b("\n"))
     status = stdin.close()
     p.wait()
     return p.returncode, output
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/biplist-0.4/tests/test_valid.py 
new/biplist-0.5/tests/test_valid.py
--- old/biplist-0.4/tests/test_valid.py 2011-05-12 01:58:27.000000000 +0200
+++ new/biplist-0.5/tests/test_valid.py 2012-06-19 02:37:05.000000000 +0200
@@ -3,6 +3,7 @@
 import os
 from test_utils import *
 import unittest
+import six
 
 class TestValidPlistFile(unittest.TestCase):
     def setUp(self):
@@ -10,14 +11,14 @@
     
     def validateSimpleBinaryRoot(self, root):
         self.assertTrue(type(root) == dict, "Root should be dictionary.")
-        self.assertTrue(type(root['dateItem']) == datetime.datetime, "date 
should be datetime")
-        self.assertEquals(root['dateItem'], datetime.datetime(2010, 8, 19, 22, 
27, 30, 385449), "dates not equal" )
-        self.assertEquals(root['numberItem'], -10000000000000000L, "number not 
of expected value")
-        self.assertEquals(root['unicodeItem'], u'abc\u212cdef\u2133')
-        self.assertEquals(root['stringItem'], 'Hi there')
-        self.assertEquals(root['realItem'], 0.47)
-        self.assertEquals(root['boolItem'], True)
-        self.assertEquals(root['arrayItem'], ['item0'])
+        self.assertTrue(type(root[six.b('dateItem')]) == datetime.datetime, 
"date should be datetime")
+        self.assertEquals(root[six.b('dateItem')], datetime.datetime(2010, 8, 
19, 22, 27, 30, 385449), "dates not equal" )
+        self.assertEquals(root[six.b('numberItem')], -10000000000000000, 
"number not of expected value")
+        self.assertEquals(root[six.b('unicodeItem')], 
six.u('abc\u212cdef\u2133'))
+        self.assertEquals(root[six.b('stringItem')], six.b('Hi there'))
+        self.assertEquals(root[six.b('realItem')], 0.47)
+        self.assertEquals(root[six.b('boolItem')], True)
+        self.assertEquals(root[six.b('arrayItem')], [six.b('item0')])
         
     def testFileRead(self):
         try:
@@ -30,15 +31,22 @@
     
     def testUnicodeRoot(self):
         result = readPlist(data_path('unicode_root.plist'))
-        self.assertEquals(result, u"Mirror's Edge\u2122 for iPad")
+        self.assertEquals(result, six.u("Mirror's Edge\u2122 for iPad"))
     
     def testEmptyUnicodeRoot(self):
+        # Porting note: this test was tricky; it was only passing in
+        # Python 2 because the empty byte-string returned by
+        # readPlist() is considered equal to the empty unicode-string
+        # in the assertion.  Confusingly enough, given the name of the
+        # test, the value in unicode_empty.plist has the format byte
+        # 0b0101 (ASCII string), so the value being asserted against
+        # appears to be what is wrong.
         result = readPlist(data_path('unicode_empty.plist'))
-        self.assertEquals(result, u"")
+        self.assertEquals(result, six.b(""))
     
     def testSmallReal(self):
         result = readPlist(data_path('small_real.plist'))
-        self.assertEquals(result, {'4 byte real':0.5})
+        self.assertEquals(result, {six.b('4 byte real'):0.5})
     
     def testKeyedArchiverPlist(self):
         """
@@ -55,14 +63,14 @@
         ...
         """
         result = readPlist(data_path('nskeyedarchiver_example.plist'))
-        self.assertEquals(result, {'$version': 100000, 
-            '$objects': 
-                ['$null', 
-                 {'$class': Uid(3), 'somekey': Uid(2)}, 
-                 'object value as string', 
-                 {'$classes': ['Archived', 'NSObject'], '$classname': 
'Archived'}
+        self.assertEquals(result, {six.b('$version'): 100000, 
+            six.b('$objects'): 
+                [six.b('$null'),
+                 {six.b('$class'): Uid(3), six.b('somekey'): Uid(2)}, 
+                 six.b('object value as string'),
+                 {six.b('$classes'): [six.b('Archived'), six.b('NSObject')], 
six.b('$classname'): six.b('Archived')}
                  ], 
-            '$top': {'root': Uid(1)}, '$archiver': 'NSKeyedArchiver'})
+            six.b('$top'): {six.b('root'): Uid(1)}, six.b('$archiver'): 
six.b('NSKeyedArchiver')})
         self.assertEquals("Uid(1)", repr(Uid(1)))
     
 if __name__ == '__main__':
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/biplist-0.4/tests/test_write.py 
new/biplist-0.5/tests/test_write.py
--- old/biplist-0.4/tests/test_write.py 2011-06-01 02:24:27.000000000 +0200
+++ new/biplist-0.5/tests/test_write.py 2012-06-19 02:37:05.000000000 +0200
@@ -2,21 +2,24 @@
 from biplist import PlistWriter
 import datetime
 import os
-from cStringIO import StringIO
+#from cStringIO import StringIO
 import subprocess
 import tempfile
 from test_utils import *
 import unittest
+import six
 
 class TestWritePlist(unittest.TestCase):
     def setUp(self):
         pass
     
-    def roundTrip(self, root, xml=False):
+    def roundTrip(self, root, xml=False, expected=None):
+        # 'expected' is more fallout from the
+        # don't-write-empty-unicode-strings issue.
         plist = writePlistToString(root, binary=(not xml))
         self.assertTrue(len(plist) > 0)
         readResult = readPlistFromString(plist)
-        self.assertEquals(readResult, root)
+        self.assertEquals(readResult, (expected if expected is not None else 
root))
         self.lintPlist(plist)
     
     def lintPlist(self, plistString):
@@ -31,13 +34,26 @@
     
     def testXMLPlist(self):
         self.roundTrip({'hello':'world'}, xml=True)
+
+    def testXMLPlistWithData(self):
+        for binmode in (True, False):
+            binplist = writePlistToString({'data': 
Data(six.b('\x01\xac\xf0\xff'))}, binary=binmode)
+            plist = readPlistFromString(binplist)
+            self.assertTrue(isinstance(plist['data'], Data), \
+                "unable to encode then decode Data into %s plist" % ("binary" 
if binmode else "XML"))
+
+    def testConvertToXMLPlistWithData(self):
+        binplist = writePlistToString({'data': 
Data(six.b('\x01\xac\xf0\xff'))})
+        plist = readPlistFromString(binplist)
+        xmlplist = writePlistToString(plist, binary=False)
+        self.assertTrue(len(xmlplist) > 0, "unable to convert plist with Data 
from binary to XML")
     
     def testBoolRoot(self):
         self.roundTrip(True)
         self.roundTrip(False)
     
     def testDuplicate(self):
-        l = ["foo" for i in xrange(0, 100)]
+        l = ["foo" for i in range(0, 100)]
         self.roundTrip(l)
         
     def testListRoot(self):
@@ -86,13 +102,13 @@
         self.roundTrip(root)
     
     def testString(self):
-        self.roundTrip('0')
-        self.roundTrip('')
-        self.roundTrip({'a':''})
+        self.roundTrip(six.b('0'))
+        self.roundTrip(six.b(''))
+        self.roundTrip({six.b('a'):six.b('')})
     
     def testLargeDict(self):
         d = {}
-        for i in xrange(0, 1000):
+        for i in range(0, 1000):
             d['%d' % i] = '%d' % i
         self.roundTrip(d)
         
@@ -108,7 +124,7 @@
             path = '/var/tmp/test.plist'
             writePlist([1, 2, 3], path, binary=is_binary)
             self.assertTrue(os.path.exists(path))
-            self.lintPlist(open(path).read())
+            self.lintPlist(open(path, 'rb').read())
     
     def testNone(self):
         self.roundTrip(None)
@@ -122,7 +138,7 @@
         except InvalidPlistException as e:
             pass
         try:
-            self.roundTrip({Data("hello world"):1})
+            self.roundTrip({Data(six.b("hello world")):1})
             self.fail("Data is not a valid key in Cocoa.")
         except InvalidPlistException as e:
             pass
@@ -140,7 +156,7 @@
         edges = [-pow(2, 7), pow(2, 7) - 1, -pow(2, 15), pow(2, 15) - 1, 
-pow(2, 31), pow(2, 31) - 1]
         self.roundTrip(edges)
         
-        io = StringIO()
+        io = six.BytesIO()
         writer = PlistWriter(io)
         bytes = [(1, [pow(2, 7) - 1]),
                  (2, [pow(2, 15) - 1]),
@@ -162,16 +178,16 @@
             pass
     
     def testWriteData(self):
-        self.roundTrip(Data("woohoo"))
+        self.roundTrip(Data(six.b("woohoo")))
         
     def testUnicode(self):
-        unicodeRoot = u"Mirror's Edge\u2122 for iPad"
+        unicodeRoot = six.u("Mirror's Edge\u2122 for iPad")
         writePlist(unicodeRoot, "/tmp/odd.plist")
         self.roundTrip(unicodeRoot)
-        unicodeStrings = [u"Mirror's Edge\u2122 for iPad", u'Weightbot \u2014 
Track your Weight in Style']
+        unicodeStrings = [six.u("Mirror's Edge\u2122 for iPad"), 
six.u('Weightbot \u2014 Track your Weight in Style')]
         self.roundTrip(unicodeStrings)
-        self.roundTrip({u"":u""})
-        self.roundTrip(u"")
+        self.roundTrip({six.u(""):six.u("")}, expected={six.b(''):six.b('')})
+        self.roundTrip(six.u(""), expected=six.b(''))
         
     def testUidWrite(self):
         self.roundTrip({'$version': 100000, 

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to