From 121c834561b1b3f06259d32681cab0cff1a1a8ae Mon Sep 17 00:00:00 2001 From: Andrew Udvare Date: Wed, 2 Apr 2014 20:37:40 -0700 Subject: cython: Implement dump()/dumps() to match up with plistlib (Python 3.4) --- cython/plist.pyx | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'cython/plist.pyx') diff --git a/cython/plist.pyx b/cython/plist.pyx index 573f17f..3c6389c 100644 --- a/cython/plist.pyx +++ b/cython/plist.pyx @@ -907,3 +907,38 @@ cpdef object loads(data, fmt=None, use_builtin_types=True, dict_type=dict): raise ValueError('Cannot parse XML property list as binary') return cb(data) + +cpdef object dump(value, fp, fmt=FMT_XML, sort_keys=True, skipkeys=False): + fp.write(dumps(value, fmt=fmt)) + +cpdef object dumps(value, fmt=FMT_XML, sort_keys=True, skipkeys=False): + if fmt not in (FMT_XML, FMT_BINARY): + raise ValueError('Format must be constant FMT_XML or FMT_BINARY') + + if check_datetime(value): + node = Date(value) + elif isinstance(value, unicode): + node = String(value) + elif PY_MAJOR_VERSION >= 3 and isinstance(value, bytes): + node = Data(value) + elif isinstance(value, str): + # See if this is binary + try: + node = String(value) + except ValueError: + node = Data(value) + elif isinstance(value, bool): + node = Bool(value) + elif isinstance(value, int): + node = Integer(value) + elif isinstance(value, float): + node = Real(value) + elif isinstance(value, dict): + node = Dict(value) + elif type(value) in (list, set, tuple): + node = Array(value) + + if fmt == FMT_XML: + return node.to_xml() + + return node.to_bin() -- cgit v1.1-32-gdbae