예제 #1
0
 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'])
예제 #2
0
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
예제 #3
0
파일: archiver.py 프로젝트: dkw72n/bpylist
    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)
예제 #4
0
 def test_parse_unknown(self):
     with self.assertRaisesRegex(TypeError, "expected bytes, module found"):
         bplist.parse(bplist)
예제 #5
0
 def generate_and_parse(self, obj):
     self.assertEqual(obj, bplist.parse(bplist.generate(obj)))
예제 #6
0
 def test_parses_equivalent_to_plistlib(self):
     data = self.fixture('AccessibilityDefinitions')
     self.assertDictEqual(plistlib.loads(data), bplist.parse(data))
예제 #7
0
 def test_generates_equivalent_accessibility_info(self):
     dict = plistlib.loads(self.fixture('AccessibilityDefinitions'))
     self.assertDictEqual(dict, bplist.parse(bplist.generate(dict)))
예제 #8
0
 def parse(self, plist):
     return bplist.parse(self.fixture(plist))
예제 #9
0
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)
예제 #10
0
def bplist_to_json(value):
    try:
        return json.dumps(bplist.parse(value), default=repr)
    except Exception as ex:
        return json.dumps({"error": str(ex)})
예제 #11
0
def c_deserialize(obj):
    bplist.parse(obj)