def test_circular_ref(self): foo = FooArchive('herp', timestamp(9001), 42, ['strawberries', 'dragonfruit'], {'key': 'value'}, False, None) foo.recursive = foo plist = bplist.parse(archiver.archive(foo)) foo_obj = plist['$objects'][1] self.assertEqual(uid(1), foo_obj['recurse'])
def render_cell(value): if not isinstance(value, (bytes, str)): return None if (isinstance(value, bytes) and value.startswith(b"bplist00")) or ( isinstance(value, str) and value.startswith("bplist00")): try: parsed = bplist.parse(value) except Exception: return None return jinja2.Markup( '<pre style="white-space: pre-wrap">{data}</pre>'.format( data=jinja2.escape(json.dumps(parsed, default=repr, indent=4)))) return None
def unpack_archive_header(self): plist = bplist.parse(self.input) archiver = plist.get('$archiver') if archiver != 'NSKeyedArchiver': raise UnsupportedArchiver(archiver) version = plist.get('$version') if version != NSKeyedArchiveVersion: raise UnsupportedArchiveVersion(version) top = plist.get('$top') if not isinstance(top, dict): raise MissingTopObject(plist) self.top_uid = top.get('root') if not isinstance(self.top_uid, uid): raise MissingTopObjectUID(top) self.objects = plist.get('$objects') if not isinstance(self.objects, list): raise MissingObjectsArray(plist)
def test_parse_unknown(self): with self.assertRaisesRegex(TypeError, "expected bytes, module found"): bplist.parse(bplist)
def generate_and_parse(self, obj): self.assertEqual(obj, bplist.parse(bplist.generate(obj)))
def test_parses_equivalent_to_plistlib(self): data = self.fixture('AccessibilityDefinitions') self.assertDictEqual(plistlib.loads(data), bplist.parse(data))
def test_generates_equivalent_accessibility_info(self): dict = plistlib.loads(self.fixture('AccessibilityDefinitions')) self.assertDictEqual(dict, bplist.parse(bplist.generate(dict)))
def parse(self, plist): return bplist.parse(self.fixture(plist))
date_limit = ('1529848800000',) # before 25/06/2018 00:00 (1 month anniv. + 2d) query = 'SELECT ZCONTENTMETADATA FROM `ZMESSAGE` WHERE `ZCHAT` = 3 AND `ZCONTENTTYPE` = 7 AND ZTIMESTAMP < ? ORDER BY `ZTIMESTAMP` ASC;' # do query conn = sqlite3.connect(chat_sqlite) c = conn.cursor() c.execute(query, date_limit) rows = c.fetchall() c.close() print('rows =', len(rows)) # iterate through results for row in rows: blob = row[0] bp = bplist.parse(blob) key_index = bp['$objects'][1]['NS.keys'] obj_index = bp['$objects'][1]['NS.objects'] keys = [bp['$objects'][i] for i in key_index] obj = [bp['$objects'][i] for i in obj_index] STKVER_index = keys.index('STKVER') STKPKGID_index = keys.index('STKPKGID') STKID_index = keys.index('STKID') STKVER = obj[STKVER_index] STKPKGID = obj[STKPKGID_index] STKID = obj[STKID_index] print() #print('blob =', blob)
def bplist_to_json(value): try: return json.dumps(bplist.parse(value), default=repr) except Exception as ex: return json.dumps({"error": str(ex)})
def c_deserialize(obj): bplist.parse(obj)