Commit 121c8345 authored by Andrew Udvare's avatar Andrew Udvare Committed by Nikias Bassen

cython: Implement dump()/dumps() to match up with plistlib (Python 3.4)

parent 7be52ea1
......@@ -71,6 +71,8 @@ cpdef object from_bin(bytes bin)
cpdef object load(fp, fmt=*, use_builtin_types=*, dict_type=*)
cpdef object loads(data, fmt=*, use_builtin_types=*, dict_type=*)
cpdef object dump(value, fp, fmt=*, sort_keys=*, skipkeys=*)
cpdef object dumps(value, fmt=*, sort_keys=*, skipkeys=*)
cdef object plist_t_to_node(plist_t c_plist, bint managed=*)
cdef plist_t native_to_plist_t(object native)
......@@ -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()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment