#!/usr/bin/env python3 from Cocoa import NSMutableDictionary, NSMutableArray, NSString, NSDate from Cocoa import NSPropertyListSerialization, NSPropertyListOpenStepFormat from Cocoa import NSPropertyListXMLFormat_v1_0, NSPropertyListBinaryFormat_v1_0 from Cocoa import CFUUIDCreateFromString, NSNull, NSUUID, CFPropertyListCreateData from Cocoa import NSURL import binascii FORMATS=[ ('plistlib.FMT_XML', NSPropertyListXMLFormat_v1_0), ('plistlib.FMT_BINARY', NSPropertyListBinaryFormat_v1_0), ] def nsstr(value): return NSString.alloc().initWithString_(value) def main(): pl = {} pl[nsstr('a')] = 2 ** 63 + 1 pl[nsstr('b')] = 2 ** 64-1 #pl[nsstr('c')] = 2 ** 65 #pl[nsstr('d')] = -2 ** 65 for fmt_name, fmt_key in FORMATS: data, error = NSPropertyListSerialization.dataWithPropertyList_format_options_error_( pl, fmt_key, 0, None) if data is None: print("#Cannot serialize", fmt_name, error) else: p, error = NSPropertyListSerialization.propertyListWithData_options_format_error_( data, 0, None, None) if p is None: print("#Cannot deserialize", fmt_name, error) elif dict(pl) != dict(p): print("#Deserializing wrong", fmt_name, pl, p) else: print(" %s: binascii.a2b_base64(b'''\n %s'''),"%(fmt_name, _encode_base64(bytes(data)).decode('ascii')[:-1])) print("}") print() def _encode_base64(s, maxlinelength=60): maxbinsize = (maxlinelength//4)*3 pieces = [] for i in range(0, len(s), maxbinsize): chunk = s[i : i + maxbinsize] pieces.append(binascii.b2a_base64(chunk)) return b' '.join(pieces) main()