17db96d56Sopenharmony_ci#!/usr/bin/env python3 27db96d56Sopenharmony_ci 37db96d56Sopenharmony_cifrom Cocoa import NSMutableDictionary, NSMutableArray, NSString, NSDate, NSNumber 47db96d56Sopenharmony_cifrom Cocoa import NSPropertyListSerialization, NSPropertyListOpenStepFormat 57db96d56Sopenharmony_cifrom Cocoa import NSPropertyListXMLFormat_v1_0, NSPropertyListBinaryFormat_v1_0 67db96d56Sopenharmony_cifrom Cocoa import CFUUIDCreateFromString, NSNull, NSUUID, CFPropertyListCreateData 77db96d56Sopenharmony_cifrom Cocoa import NSURL 87db96d56Sopenharmony_cifrom Cocoa import NSKeyedArchiver 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ciimport datetime 117db96d56Sopenharmony_cifrom collections import OrderedDict 127db96d56Sopenharmony_ciimport binascii 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ciFORMATS=[ 157db96d56Sopenharmony_ci# ('openstep', NSPropertyListOpenStepFormat), 167db96d56Sopenharmony_ci ('plistlib.FMT_XML', NSPropertyListXMLFormat_v1_0), 177db96d56Sopenharmony_ci ('plistlib.FMT_BINARY', NSPropertyListBinaryFormat_v1_0), 187db96d56Sopenharmony_ci] 197db96d56Sopenharmony_ci 207db96d56Sopenharmony_cidef nsstr(value): 217db96d56Sopenharmony_ci return NSString.alloc().initWithString_(value) 227db96d56Sopenharmony_ci 237db96d56Sopenharmony_ci 247db96d56Sopenharmony_cidef main(): 257db96d56Sopenharmony_ci pl = OrderedDict() 267db96d56Sopenharmony_ci 277db96d56Sopenharmony_ci # Note: pl is an OrderedDict to control the order 287db96d56Sopenharmony_ci # of keys, and hence have some control on the structure 297db96d56Sopenharmony_ci # of the output file. 307db96d56Sopenharmony_ci # New keys should be added in alphabetical order. 317db96d56Sopenharmony_ci 327db96d56Sopenharmony_ci seconds = datetime.datetime(2004, 10, 26, 10, 33, 33, tzinfo=datetime.timezone(datetime.timedelta(0))).timestamp() 337db96d56Sopenharmony_ci pl[nsstr('aBigInt')] = 2 ** 63 - 44 347db96d56Sopenharmony_ci pl[nsstr('aBigInt2')] = NSNumber.numberWithUnsignedLongLong_(2 ** 63 + 44) 357db96d56Sopenharmony_ci pl[nsstr('aDate')] = NSDate.dateWithTimeIntervalSince1970_(seconds) 367db96d56Sopenharmony_ci 377db96d56Sopenharmony_ci pl[nsstr('aDict')] = d = OrderedDict() 387db96d56Sopenharmony_ci d[nsstr('aFalseValue')] = False 397db96d56Sopenharmony_ci d[nsstr('aTrueValue')] = True 407db96d56Sopenharmony_ci d[nsstr('aUnicodeValue')] = "M\xe4ssig, Ma\xdf" 417db96d56Sopenharmony_ci d[nsstr('anotherString')] = "<hello & 'hi' there!>" 427db96d56Sopenharmony_ci d[nsstr('deeperDict')] = dd = OrderedDict() 437db96d56Sopenharmony_ci dd[nsstr('a')] = 17 447db96d56Sopenharmony_ci dd[nsstr('b')] = 32.5 457db96d56Sopenharmony_ci dd[nsstr('c')] = a = NSMutableArray.alloc().init() 467db96d56Sopenharmony_ci a.append(1) 477db96d56Sopenharmony_ci a.append(2) 487db96d56Sopenharmony_ci a.append(nsstr('text')) 497db96d56Sopenharmony_ci 507db96d56Sopenharmony_ci pl[nsstr('aFloat')] = 0.5 517db96d56Sopenharmony_ci 527db96d56Sopenharmony_ci pl[nsstr('aList')] = a = NSMutableArray.alloc().init() 537db96d56Sopenharmony_ci a.append(nsstr('A')) 547db96d56Sopenharmony_ci a.append(nsstr('B')) 557db96d56Sopenharmony_ci a.append(12) 567db96d56Sopenharmony_ci a.append(32.5) 577db96d56Sopenharmony_ci aa = NSMutableArray.alloc().init() 587db96d56Sopenharmony_ci a.append(aa) 597db96d56Sopenharmony_ci aa.append(1) 607db96d56Sopenharmony_ci aa.append(2) 617db96d56Sopenharmony_ci aa.append(3) 627db96d56Sopenharmony_ci 637db96d56Sopenharmony_ci pl[nsstr('aNegativeBigInt')] = -80000000000 647db96d56Sopenharmony_ci pl[nsstr('aNegativeInt')] = -5 657db96d56Sopenharmony_ci pl[nsstr('aString')] = nsstr('Doodah') 667db96d56Sopenharmony_ci 677db96d56Sopenharmony_ci pl[nsstr('anEmptyDict')] = NSMutableDictionary.alloc().init() 687db96d56Sopenharmony_ci 697db96d56Sopenharmony_ci pl[nsstr('anEmptyList')] = NSMutableArray.alloc().init() 707db96d56Sopenharmony_ci 717db96d56Sopenharmony_ci pl[nsstr('anInt')] = 728 727db96d56Sopenharmony_ci 737db96d56Sopenharmony_ci pl[nsstr('nestedData')] = a = NSMutableArray.alloc().init() 747db96d56Sopenharmony_ci a.append(b'''<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03''') 757db96d56Sopenharmony_ci 767db96d56Sopenharmony_ci 777db96d56Sopenharmony_ci pl[nsstr('someData')] = b'<binary gunk>' 787db96d56Sopenharmony_ci 797db96d56Sopenharmony_ci pl[nsstr('someMoreData')] = b'''<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03<lots of binary gunk>\x00\x01\x02\x03''' 807db96d56Sopenharmony_ci 817db96d56Sopenharmony_ci pl[nsstr('\xc5benraa')] = nsstr("That was a unicode key.") 827db96d56Sopenharmony_ci 837db96d56Sopenharmony_ci print("TESTDATA={") 847db96d56Sopenharmony_ci for fmt_name, fmt_key in FORMATS: 857db96d56Sopenharmony_ci data, error = NSPropertyListSerialization.dataWithPropertyList_format_options_error_( 867db96d56Sopenharmony_ci pl, fmt_key, 0, None) 877db96d56Sopenharmony_ci if data is None: 887db96d56Sopenharmony_ci print("Cannot serialize", fmt_name, error) 897db96d56Sopenharmony_ci 907db96d56Sopenharmony_ci else: 917db96d56Sopenharmony_ci print(" %s: binascii.a2b_base64(b'''\n %s'''),"%(fmt_name, _encode_base64(bytes(data)).decode('ascii')[:-1])) 927db96d56Sopenharmony_ci 937db96d56Sopenharmony_ci keyed_archive_data = NSKeyedArchiver.archivedDataWithRootObject_("KeyArchive UID Test") 947db96d56Sopenharmony_ci print(" 'KEYED_ARCHIVE': binascii.a2b_base64(b'''\n %s''')," % (_encode_base64(bytes(keyed_archive_data)).decode('ascii')[:-1])) 957db96d56Sopenharmony_ci print("}") 967db96d56Sopenharmony_ci print() 977db96d56Sopenharmony_ci 987db96d56Sopenharmony_cidef _encode_base64(s, maxlinelength=60): 997db96d56Sopenharmony_ci maxbinsize = (maxlinelength//4)*3 1007db96d56Sopenharmony_ci pieces = [] 1017db96d56Sopenharmony_ci for i in range(0, len(s), maxbinsize): 1027db96d56Sopenharmony_ci chunk = s[i : i + maxbinsize] 1037db96d56Sopenharmony_ci pieces.append(binascii.b2a_base64(chunk)) 1047db96d56Sopenharmony_ci return b' '.join(pieces) 1057db96d56Sopenharmony_ci 1067db96d56Sopenharmony_cimain() 107