Wed, 09 Oct 2013 18:34:30 +0200
Continued to shorten the code lines to max. 79 characters.
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1 | # -*- coding: utf-8 -*- |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2 | |
2302
f29e9405c851
Updated copyright for 2013.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1965
diff
changeset
|
3 | # Copyright (c) 2012 - 2013 Detlev Offenbach <detlev@die-offenbachs.de> |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4 | # |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6 | """ |
2997
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
7 | Module implementing a library for reading and writing binary property list |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
8 | files. |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
10 | Binary Property List (plist) files provide a faster and smaller serialization |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
11 | format for property lists on OS X. This is a library for generating binary |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
12 | plists which can be read by OS X, iOS, or other clients. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14 | The API models the plistlib API, and will call through to plistlib when |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15 | XML serialization or deserialization is required. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17 | To generate plists with UID values, wrap the values with the Uid object. The |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18 | value must be an int. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20 | To generate plists with NSData/CFData values, wrap the values with the |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21 | Data object. The value must be a bytes object. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
23 | Date values can only be datetime.datetime objects. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24 | |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
25 | The exceptions InvalidPlistException and NotBinaryPlistException may be |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
26 | thrown to indicate that the data cannot be serialized or deserialized as |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
27 | a binary plist. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
28 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
29 | Plist generation example: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30 | <pre> |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31 | from binplistlib import * |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
32 | from datetime import datetime |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
33 | plist = {'aKey':'aValue', |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34 | '0':1.322, |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35 | 'now':datetime.now(), |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36 | 'list':[1,2,3], |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37 | 'tuple':('a','b','c') |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38 | } |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39 | try: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40 | writePlist(plist, "example.plist") |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41 | except (InvalidPlistException, NotBinaryPlistException) as e: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42 | print("Something bad happened:", e) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43 | </pre> |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44 | Plist parsing example: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45 | <pre> |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46 | from binplistlib import * |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47 | try: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48 | plist = readPlist("example.plist") |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49 | print(plist) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50 | except (InvalidPlistException, NotBinaryPlistException) as e: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51 | print("Not a plist:", e) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52 | </pre> |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55 | # |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56 | # Ported from the Python 2 biplist.py script. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57 | # |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58 | # Original License: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59 | # |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
60 | # Copyright (c) 2010, Andrew Wooster |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61 | # All rights reserved. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
62 | # |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
63 | # Redistribution and use in source and binary forms, with or without |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64 | # modification, are permitted provided that the following conditions are met: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65 | # |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66 | # * Redistributions of source code must retain the above copyright notice, |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67 | # this list of conditions and the following disclaimer. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68 | # * Redistributions in binary form must reproduce the above copyright |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69 | # notice, this list of conditions and the following disclaimer in the |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70 | # documentation and/or other materials provided with the distribution. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71 | # * Neither the name of biplist nor the names of its contributors may be |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
72 | # used to endorse or promote products derived from this software without |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73 | # specific prior written permission. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74 | # |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
2997
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
77 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
78 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
79 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
80 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
81 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
82 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
83 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
84 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
85 | # POSSIBILITY OF SUCH DAMAGE. |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
86 | # |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
88 | from collections import namedtuple |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
89 | from io import BytesIO |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
90 | import calendar |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91 | import datetime |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
92 | import math |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
93 | import plistlib |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
94 | from struct import pack, unpack |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
95 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96 | __all__ = [ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97 | 'Uid', 'Data', 'readPlist', 'writePlist', 'readPlistFromBytes', |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98 | 'writePlistToBytes', 'InvalidPlistException', 'NotBinaryPlistException' |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
99 | ] |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
100 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
101 | apple_reference_date_offset = 978307200 |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
102 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
103 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
104 | class Uid(int): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
105 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
106 | Class implementing a wrapper around integers for representing UID values. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
107 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
108 | This is used in keyed archiving. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
109 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
110 | def __repr__(self): |
2965
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
111 | """ |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
112 | Public method to return an object representation. |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
113 | |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
114 | @return object representation (string) |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
115 | """ |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
116 | return "Uid(%d)" % self |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
117 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
118 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
119 | class Data(bytes): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
120 | """ |
2997
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
121 | Class implementing a wrapper around bytes types for representing Data |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
122 | values. |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
123 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
124 | pass |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
125 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
126 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
127 | class InvalidPlistException(Exception): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
128 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
129 | Exception raised when the plist is incorrectly formatted. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
130 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
131 | pass |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
132 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
133 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
134 | class NotBinaryPlistException(Exception): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
135 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
136 | Exception raised when a binary plist was expected but not encountered. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
137 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
138 | pass |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
139 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
140 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
141 | def readPlist(pathOrFile): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
142 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
143 | Module function to read a plist file. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
144 | |
2997
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
145 | @param pathOrFile name of the plist file (string) or an open file |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
146 | (file object) |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
147 | @return reference to the read object |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
148 | @exception InvalidPlistException raised to signal an invalid plist file |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
149 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
150 | didOpen = False |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
151 | result = None |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
152 | if isinstance(pathOrFile, str): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
153 | pathOrFile = open(pathOrFile, 'rb') |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
154 | didOpen = True |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
155 | try: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
156 | reader = PlistReader(pathOrFile) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
157 | result = reader.parse() |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
158 | except NotBinaryPlistException as e: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
159 | try: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
160 | pathOrFile.seek(0) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
161 | result = plistlib.readPlist(pathOrFile) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
162 | except Exception as e: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
163 | raise InvalidPlistException(e) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
164 | if didOpen: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
165 | pathOrFile.close() |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
166 | return result |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
167 | |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
168 | |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
169 | def writePlist(rootObject, pathOrFile, binary=True): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
170 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
171 | Module function to write a plist file. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
172 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
173 | @param rootObject reference to the object to be written |
2997
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
174 | @param pathOrFile name of the plist file (string) or an open file |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
175 | (file object) |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
176 | @param binary flag indicating the generation of a binary plist file |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
177 | (boolean) |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
178 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
179 | if not binary: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
180 | plistlib.writePlist(rootObject, pathOrFile) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
181 | return |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
182 | else: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
183 | didOpen = False |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
184 | if isinstance(pathOrFile, str): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
185 | pathOrFile = open(pathOrFile, 'wb') |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
186 | didOpen = True |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
187 | writer = PlistWriter(pathOrFile) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
188 | writer.writeRoot(rootObject) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
189 | if didOpen: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
190 | pathOrFile.close() |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
191 | return |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
192 | |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
193 | |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
194 | def readPlistFromBytes(data): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
195 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
196 | Module function to read from a plist bytes object. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
197 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
198 | @param data plist data (bytes) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
199 | @return reference to the read object |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
200 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
201 | return readPlist(BytesIO(data)) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
202 | |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
203 | |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
204 | def writePlistToBytes(rootObject, binary=True): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
205 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
206 | Module function to write a plist bytes object. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
207 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
208 | @param rootObject reference to the object to be written |
2965
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
209 | @param binary flag indicating the generation of a binary plist bytes |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
210 | object (boolean) |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
211 | @return bytes object containing the plist data |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
212 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
213 | if not binary: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
214 | return plistlib.writePlistToBytes(rootObject) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
215 | else: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
216 | io = BytesIO() |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
217 | writer = PlistWriter(io) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
218 | writer.writeRoot(rootObject) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
219 | return io.getvalue() |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
220 | |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
221 | |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
222 | def is_stream_binary_plist(stream): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
223 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
224 | Module function to check, if the stream is a binary plist. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
225 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
226 | @param stream plist stream (file object) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
227 | @return flag indicating a binary plist (boolean) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
228 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
229 | stream.seek(0) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
230 | header = stream.read(7) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
231 | if header == b'bplist0': |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
232 | return True |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
233 | else: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
234 | return False |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
235 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
236 | PlistTrailer = namedtuple('PlistTrailer', |
2997
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
237 | 'offsetSize, objectRefSize, offsetCount, topLevelObjectNumber,' |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
238 | ' offsetTableOffset') |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
239 | PlistByteCounts = namedtuple('PlistByteCounts', |
2997
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
240 | 'nullBytes, boolBytes, intBytes, realBytes, dateBytes, dataBytes,' |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
241 | ' stringBytes, uidBytes, arrayBytes, setBytes, dictBytes') |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
242 | |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
243 | |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
244 | class PlistReader(object): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
245 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
246 | Class implementing the plist reader. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
247 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
248 | file = None |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
249 | contents = b'' |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
250 | offsets = None |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
251 | trailer = None |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
252 | currentOffset = 0 |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
253 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
254 | def __init__(self, fileOrStream): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
255 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
256 | Constructor |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
257 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
258 | @param fileOrStream open file containing the plist data (file object) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
259 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
260 | self.reset() |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
261 | self.file = fileOrStream |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
262 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
263 | def parse(self): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
264 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
265 | Public method to parse the plist data. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
266 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
267 | @return unpickled object |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
268 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
269 | return self.readRoot() |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
270 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
271 | def reset(self): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
272 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
273 | Private method to reset the instance object. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
274 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
275 | self.trailer = None |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
276 | self.contents = b'' |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
277 | self.offsets = [] |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
278 | self.currentOffset = 0 |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
279 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
280 | def readRoot(self): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
281 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
282 | Private method to read the root object. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
283 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
284 | @return unpickled object |
2965
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
285 | @exception InvalidPlistException raised to indicate an invalid |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
286 | plist file |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
287 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
288 | result = None |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
289 | self.reset() |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
290 | # Get the header, make sure it's a valid file. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
291 | if not is_stream_binary_plist(self.file): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
292 | raise NotBinaryPlistException() |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
293 | self.file.seek(0) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
294 | self.contents = self.file.read() |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
295 | if len(self.contents) < 32: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
296 | raise InvalidPlistException("File is too short.") |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
297 | trailerContents = self.contents[-32:] |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
298 | try: |
2997
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
299 | self.trailer = PlistTrailer._make( |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
300 | unpack("!xxxxxxBBQQQ", trailerContents)) |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
301 | offset_size = self.trailer.offsetSize * self.trailer.offsetCount |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
302 | offset = self.trailer.offsetTableOffset |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
303 | offset_contents = self.contents[offset:offset + offset_size] |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
304 | offset_i = 0 |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
305 | while offset_i < self.trailer.offsetCount: |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
306 | begin = self.trailer.offsetSize * offset_i |
2997
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
307 | tmp_contents = offset_contents[ |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
308 | begin:begin + self.trailer.offsetSize] |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
309 | tmp_sized = self.getSizedInteger( |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
310 | tmp_contents, self.trailer.offsetSize) |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
311 | self.offsets.append(tmp_sized) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
312 | offset_i += 1 |
2997
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
313 | self.setCurrentOffsetToObjectNumber( |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
314 | self.trailer.topLevelObjectNumber) |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
315 | result = self.readObject() |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
316 | except TypeError as e: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
317 | raise InvalidPlistException(e) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
318 | return result |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
319 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
320 | def setCurrentOffsetToObjectNumber(self, objectNumber): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
321 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
322 | Private method to set the current offset. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
323 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
324 | @param objectNumber number of the object (integer) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
325 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
326 | self.currentOffset = self.offsets[objectNumber] |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
327 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
328 | def readObject(self): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
329 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
330 | Private method to read the object data. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
331 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
332 | @return unpickled object |
2965
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
333 | @exception InvalidPlistException raised to indicate an invalid |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
334 | plist file |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
335 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
336 | result = None |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
337 | tmp_byte = self.contents[self.currentOffset:self.currentOffset + 1] |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
338 | marker_byte = unpack("!B", tmp_byte)[0] |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
339 | format = (marker_byte >> 4) & 0x0f |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
340 | extra = marker_byte & 0x0f |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
341 | self.currentOffset += 1 |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
342 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
343 | def proc_extra(extra): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
344 | if extra == 0b1111: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
345 | #self.currentOffset += 1 |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
346 | extra = self.readObject() |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
347 | return extra |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
348 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
349 | # bool, null, or fill byte |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
350 | if format == 0b0000: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
351 | if extra == 0b0000: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
352 | result = None |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
353 | elif extra == 0b1000: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
354 | result = False |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
355 | elif extra == 0b1001: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
356 | result = True |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
357 | elif extra == 0b1111: |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
358 | pass # fill byte |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
359 | else: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
360 | raise InvalidPlistException( |
2997
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
361 | "Invalid object found at offset: {0}".format( |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
362 | self.currentOffset - 1)) |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
363 | # int |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
364 | elif format == 0b0001: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
365 | extra = proc_extra(extra) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
366 | result = self.readInteger(pow(2, extra)) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
367 | # real |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
368 | elif format == 0b0010: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
369 | extra = proc_extra(extra) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
370 | result = self.readReal(extra) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
371 | # date |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
372 | elif format == 0b0011 and extra == 0b0011: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
373 | result = self.readDate() |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
374 | # data |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
375 | elif format == 0b0100: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
376 | extra = proc_extra(extra) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
377 | result = self.readData(extra) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
378 | # ascii string |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
379 | elif format == 0b0101: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
380 | extra = proc_extra(extra) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
381 | result = self.readAsciiString(extra) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
382 | # Unicode string |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
383 | elif format == 0b0110: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
384 | extra = proc_extra(extra) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
385 | result = self.readUnicode(extra) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
386 | # uid |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
387 | elif format == 0b1000: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
388 | result = self.readUid(extra) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
389 | # array |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
390 | elif format == 0b1010: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
391 | extra = proc_extra(extra) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
392 | result = self.readArray(extra) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
393 | # set |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
394 | elif format == 0b1100: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
395 | extra = proc_extra(extra) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
396 | result = set(self.readArray(extra)) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
397 | # dict |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
398 | elif format == 0b1101: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
399 | extra = proc_extra(extra) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
400 | result = self.readDict(extra) |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
401 | else: |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
402 | raise InvalidPlistException( |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
403 | "Invalid object found: {{format: {0}, extra: {1}}}".format( |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
404 | bin(format), bin(extra))) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
405 | return result |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
406 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
407 | def readInteger(self, bytes): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
408 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
409 | Private method to read an Integer object. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
410 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
411 | @param bytes length of the object (integer) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
412 | @return integer object |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
413 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
414 | result = 0 |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
415 | original_offset = self.currentOffset |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
416 | data = self.contents[self.currentOffset:self.currentOffset + bytes] |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
417 | result = self.getSizedInteger(data, bytes) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
418 | self.currentOffset = original_offset + bytes |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
419 | return result |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
420 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
421 | def readReal(self, length): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
422 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
423 | Private method to read a Real object. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
424 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
425 | @param length length of the object (integer) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
426 | @return float object |
2965
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
427 | @exception InvalidPlistException raised to indicate an invalid |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
428 | plist file |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
429 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
430 | result = 0.0 |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
431 | to_read = pow(2, length) |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
432 | data = self.contents[self.currentOffset:self.currentOffset + to_read] |
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
433 | if length == 2: # 4 bytes |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
434 | result = unpack('>f', data)[0] |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
435 | elif length == 3: # 8 bytes |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
436 | result = unpack('>d', data)[0] |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
437 | else: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
438 | raise InvalidPlistException( |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
439 | "Unknown real of length {0} bytes".format(to_read)) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
440 | return result |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
441 | |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
442 | def readRefs(self, count): |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
443 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
444 | Private method to read References. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
445 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
446 | @param count amount of the references (integer) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
447 | @return list of references (list of integers) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
448 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
449 | refs = [] |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
450 | i = 0 |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
451 | while i < count: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
452 | fragment = self.contents[ |
2997
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
453 | self.currentOffset: |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
454 | self.currentOffset + self.trailer.objectRefSize] |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
455 | ref = self.getSizedInteger(fragment, len(fragment)) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
456 | refs.append(ref) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
457 | self.currentOffset += self.trailer.objectRefSize |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
458 | i += 1 |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
459 | return refs |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
460 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
461 | def readArray(self, count): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
462 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
463 | Private method to read an Array object. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
464 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
465 | @param count number of array elements (integer) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
466 | @return list of unpickled objects |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
467 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
468 | result = [] |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
469 | values = self.readRefs(count) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
470 | i = 0 |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
471 | while i < len(values): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
472 | self.setCurrentOffsetToObjectNumber(values[i]) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
473 | value = self.readObject() |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
474 | result.append(value) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
475 | i += 1 |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
476 | return result |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
477 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
478 | def readDict(self, count): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
479 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
480 | Private method to read a Dictionary object. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
481 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
482 | @param count number of dictionary elements (integer) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
483 | @return dictionary of unpickled objects |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
484 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
485 | result = {} |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
486 | keys = self.readRefs(count) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
487 | values = self.readRefs(count) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
488 | i = 0 |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
489 | while i < len(keys): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
490 | self.setCurrentOffsetToObjectNumber(keys[i]) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
491 | key = self.readObject() |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
492 | self.setCurrentOffsetToObjectNumber(values[i]) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
493 | value = self.readObject() |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
494 | result[key] = value |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
495 | i += 1 |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
496 | return result |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
497 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
498 | def readAsciiString(self, length): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
499 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
500 | Private method to read an ASCII encoded string. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
501 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
502 | @param length length of the string (integer) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
503 | @return ASCII encoded string |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
504 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
505 | result = str(unpack("!{0}s".format(length), |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
506 | self.contents[self.currentOffset:self.currentOffset + length])[0], |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
507 | encoding="ascii") |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
508 | self.currentOffset += length |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
509 | return result |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
510 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
511 | def readUnicode(self, length): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
512 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
513 | Private method to read an Unicode encoded string. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
514 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
515 | @param length length of the string (integer) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
516 | @return unicode encoded string |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
517 | """ |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
518 | actual_length = length * 2 |
2997
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
519 | data = self.contents[ |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
520 | self.currentOffset:self.currentOffset + actual_length] |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
521 | # unpack not needed?!! data = unpack(">%ds" % (actual_length), data)[0] |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
522 | self.currentOffset += actual_length |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
523 | return data.decode('utf_16_be') |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
524 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
525 | def readDate(self): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
526 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
527 | Private method to read a date. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
528 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
529 | @return date object (datetime.datetime) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
530 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
531 | global apple_reference_date_offset |
2997
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
532 | result = unpack(">d", |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
533 | self.contents[self.currentOffset:self.currentOffset + 8])[0] |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
534 | result = datetime.datetime.utcfromtimestamp( |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
535 | result + apple_reference_date_offset) |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
536 | self.currentOffset += 8 |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
537 | return result |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
538 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
539 | def readData(self, length): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
540 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
541 | Private method to read some bytes. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
542 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
543 | @param length number of bytes to read (integer) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
544 | @return Data object |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
545 | """ |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
546 | result = self.contents[self.currentOffset:self.currentOffset + length] |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
547 | self.currentOffset += length |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
548 | return Data(result) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
549 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
550 | def readUid(self, length): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
551 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
552 | Private method to read a UID. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
553 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
554 | @param length length of the UID (integer) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
555 | @return Uid object |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
556 | """ |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
557 | return Uid(self.readInteger(length + 1)) |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
558 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
559 | def getSizedInteger(self, data, bytes): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
560 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
561 | Private method to read an integer of a specific size. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
562 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
563 | @param data data to extract the integer from (bytes) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
564 | @param bytes length of the integer (integer) |
2965
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
565 | @return read integer (integer) |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
566 | @exception InvalidPlistException raised to indicate an invalid |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
567 | plist file |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
568 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
569 | result = 0 |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
570 | # 1, 2, and 4 byte integers are unsigned |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
571 | if bytes == 1: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
572 | result = unpack('>B', data)[0] |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
573 | elif bytes == 2: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
574 | result = unpack('>H', data)[0] |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
575 | elif bytes == 4: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
576 | result = unpack('>L', data)[0] |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
577 | elif bytes == 8: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
578 | result = unpack('>q', data)[0] |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
579 | else: |
2997
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
580 | raise InvalidPlistException( |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
581 | "Encountered integer longer than 8 bytes.") |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
582 | return result |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
583 | |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
584 | |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
585 | class HashableWrapper(object): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
586 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
587 | Class wrapping a hashable value. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
588 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
589 | def __init__(self, value): |
2965
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
590 | """ |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
591 | Constructor |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
592 | |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
593 | @param value object value |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
594 | """ |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
595 | self.value = value |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
596 | |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
597 | def __repr__(self): |
2965
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
598 | """ |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
599 | Public method to generate a representation of the object. |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
600 | |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
601 | @return object representation (string) |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
602 | """ |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
603 | return "<HashableWrapper: %s>" % [self.value] |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
604 | |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
605 | |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
606 | class BoolWrapper(object): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
607 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
608 | Class wrapping a boolean value. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
609 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
610 | def __init__(self, value): |
2965
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
611 | """ |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
612 | Constructor |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
613 | |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
614 | @param value object value (boolean) |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
615 | """ |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
616 | self.value = value |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
617 | |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
618 | def __repr__(self): |
2965
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
619 | """ |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
620 | Public method to generate a representation of the object. |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
621 | |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
622 | @return object representation (string) |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
623 | """ |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
624 | return "<BoolWrapper: %s>" % self.value |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
625 | |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
626 | |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
627 | class PlistWriter(object): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
628 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
629 | Class implementing the plist writer. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
630 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
631 | header = b'bplist00bybiplist1.0' |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
632 | file = None |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
633 | byteCounts = None |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
634 | trailer = None |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
635 | computedUniques = None |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
636 | writtenReferences = None |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
637 | referencePositions = None |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
638 | wrappedTrue = None |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
639 | wrappedFalse = None |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
640 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
641 | def __init__(self, file): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
642 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
643 | Constructor |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
644 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
645 | @param file file to write the plist data to (file object) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
646 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
647 | self.reset() |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
648 | self.file = file |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
649 | self.wrappedTrue = BoolWrapper(True) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
650 | self.wrappedFalse = BoolWrapper(False) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
651 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
652 | def reset(self): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
653 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
654 | Private method to reset the instance object. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
655 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
656 | self.byteCounts = PlistByteCounts(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
657 | self.trailer = PlistTrailer(0, 0, 0, 0, 0) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
658 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
659 | # A set of all the uniques which have been computed. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
660 | self.computedUniques = set() |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
661 | # A list of all the uniques which have been written. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
662 | self.writtenReferences = {} |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
663 | # A dict of the positions of the written uniques. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
664 | self.referencePositions = {} |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
665 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
666 | def positionOfObjectReference(self, obj): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
667 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
668 | Private method to get the position of an object. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
669 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
670 | If the given object has been written already, return its |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
671 | position in the offset table. Otherwise, return None. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
672 | |
2965
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
673 | @param obj object |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
674 | @return position of the object (integer) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
675 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
676 | return self.writtenReferences.get(obj) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
677 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
678 | def writeRoot(self, root): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
679 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
680 | Public method to write an object to a plist file. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
681 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
682 | Strategy is: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
683 | <ul> |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
684 | <li>write header</li> |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
685 | <li>wrap root object so everything is hashable</li> |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
686 | <li>compute size of objects which will be written |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
687 | <ul> |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
688 | <li>need to do this in order to know how large the object refs |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
689 | will be in the list/dict/set reference lists</li> |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
690 | </ul></li> |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
691 | <li>write objects |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
692 | <ul> |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
693 | <li>keep objects in writtenReferences</li> |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
694 | <li>keep positions of object references in referencePositions</li> |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
695 | <li>write object references with the length computed previously</li> |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
696 | </ul></li> |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
697 | <li>computer object reference length</li> |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
698 | <li>write object reference positions</li> |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
699 | <li>write trailer</li> |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
700 | </ul> |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
701 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
702 | @param root reference to the object to be written |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
703 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
704 | output = self.header |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
705 | wrapped_root = self.wrapRoot(root) |
2997
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
706 | should_reference_root = True |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
707 | self.computeOffsets( |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
708 | wrapped_root, asReference=should_reference_root, isRoot=True) |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
709 | self.trailer = self.trailer._replace( |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
710 | **{'objectRefSize': self.intSize(len(self.computedUniques))}) |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
711 | (_, output) = self.writeObjectReference(wrapped_root, output) |
2997
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
712 | output = self.writeObject( |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
713 | wrapped_root, output, setReferencePosition=True) |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
714 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
715 | # output size at this point is an upper bound on how big the |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
716 | # object reference offsets need to be. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
717 | self.trailer = self.trailer._replace(**{ |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
718 | 'offsetSize': self.intSize(len(output)), |
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
719 | 'offsetCount': len(self.computedUniques), |
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
720 | 'offsetTableOffset': len(output), |
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
721 | 'topLevelObjectNumber': 0 |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
722 | }) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
723 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
724 | output = self.writeOffsetTable(output) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
725 | output += pack('!xxxxxxBBQQQ', *self.trailer) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
726 | self.file.write(output) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
727 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
728 | def wrapRoot(self, root): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
729 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
730 | Private method to generate object wrappers. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
731 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
732 | @param root object to be wrapped |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
733 | @return wrapped object |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
734 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
735 | if isinstance(root, bool): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
736 | if root is True: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
737 | return self.wrappedTrue |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
738 | else: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
739 | return self.wrappedFalse |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
740 | elif isinstance(root, set): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
741 | n = set() |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
742 | for value in root: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
743 | n.add(self.wrapRoot(value)) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
744 | return HashableWrapper(n) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
745 | elif isinstance(root, dict): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
746 | n = {} |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
747 | for key, value in root.items(): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
748 | n[self.wrapRoot(key)] = self.wrapRoot(value) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
749 | return HashableWrapper(n) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
750 | elif isinstance(root, list): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
751 | n = [] |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
752 | for value in root: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
753 | n.append(self.wrapRoot(value)) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
754 | return HashableWrapper(n) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
755 | elif isinstance(root, tuple): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
756 | n = tuple([self.wrapRoot(value) for value in root]) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
757 | return HashableWrapper(n) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
758 | else: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
759 | return root |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
760 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
761 | def incrementByteCount(self, field, incr=1): |
2965
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
762 | """ |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
763 | Public method to increment the byte count. |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
764 | |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
765 | @param field field to evaluate |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
766 | @param incr byte count increment (integer) |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
767 | """ |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
768 | self.byteCounts = self.byteCounts._replace( |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
769 | **{field: self.byteCounts.__getattribute__(field) + incr}) |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
770 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
771 | def computeOffsets(self, obj, asReference=False, isRoot=False): |
2965
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
772 | """ |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
773 | Public method to compute offsets of an object. |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
774 | |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
775 | @param obj plist object |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
776 | @param asReference flag indicating offsets as references (boolean) |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
777 | @param isRoot flag indicating a root object (boolean) |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
778 | @exception InvalidPlistException raised to indicate an invalid |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
779 | plist file |
2969
0e1af1313b8b
Regenerated source docu.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2965
diff
changeset
|
780 | """ # __IGNORE_WARNING__ |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
781 | def check_key(key): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
782 | if key is None: |
2997
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
783 | raise InvalidPlistException( |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
784 | 'Dictionary keys cannot be null in plists.') |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
785 | elif isinstance(key, Data): |
2997
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
786 | raise InvalidPlistException( |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
787 | 'Data cannot be dictionary keys in plists.') |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
788 | elif not isinstance(key, str): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
789 | raise InvalidPlistException('Keys must be strings.') |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
790 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
791 | def proc_size(size): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
792 | if size > 0b1110: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
793 | size += self.intSize(size) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
794 | return size |
2965
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
795 | |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
796 | # If this should be a reference, then we keep a record of it in the |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
797 | # uniques table. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
798 | if asReference: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
799 | if obj in self.computedUniques: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
800 | return |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
801 | else: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
802 | self.computedUniques.add(obj) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
803 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
804 | if obj is None: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
805 | self.incrementByteCount('nullBytes') |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
806 | elif isinstance(obj, BoolWrapper): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
807 | self.incrementByteCount('boolBytes') |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
808 | elif isinstance(obj, Uid): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
809 | size = self.intSize(obj) |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
810 | self.incrementByteCount('uidBytes', incr=1 + size) |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
811 | elif isinstance(obj, int): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
812 | size = self.intSize(obj) |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
813 | self.incrementByteCount('intBytes', incr=1 + size) |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
814 | elif isinstance(obj, (float)): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
815 | size = self.realSize(obj) |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
816 | self.incrementByteCount('realBytes', incr=1 + size) |
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
817 | elif isinstance(obj, datetime.datetime): |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
818 | self.incrementByteCount('dateBytes', incr=2) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
819 | elif isinstance(obj, Data): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
820 | size = proc_size(len(obj)) |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
821 | self.incrementByteCount('dataBytes', incr=1 + size) |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
822 | elif isinstance(obj, str): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
823 | size = proc_size(len(obj)) |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
824 | self.incrementByteCount('stringBytes', incr=1 + size) |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
825 | elif isinstance(obj, HashableWrapper): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
826 | obj = obj.value |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
827 | if isinstance(obj, set): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
828 | size = proc_size(len(obj)) |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
829 | self.incrementByteCount('setBytes', incr=1 + size) |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
830 | for value in obj: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
831 | self.computeOffsets(value, asReference=True) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
832 | elif isinstance(obj, (list, tuple)): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
833 | size = proc_size(len(obj)) |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
834 | self.incrementByteCount('arrayBytes', incr=1 + size) |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
835 | for value in obj: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
836 | self.computeOffsets(value, asReference=True) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
837 | elif isinstance(obj, dict): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
838 | size = proc_size(len(obj)) |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
839 | self.incrementByteCount('dictBytes', incr=1 + size) |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
840 | for key, value in obj.items(): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
841 | check_key(key) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
842 | self.computeOffsets(key, asReference=True) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
843 | self.computeOffsets(value, asReference=True) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
844 | else: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
845 | raise InvalidPlistException("Unknown object type.") |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
846 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
847 | def writeObjectReference(self, obj, output): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
848 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
849 | Private method to write an object reference. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
850 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
851 | Tries to write an object reference, adding it to the references |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
852 | table. Does not write the actual object bytes or set the reference |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
853 | position. Returns a tuple of whether the object was a new reference |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
854 | (True if it was, False if it already was in the reference table) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
855 | and the new output. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
856 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
857 | @param obj object to be written |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
858 | @param output output stream to append the object to |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
859 | @return flag indicating a new reference and the new output |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
860 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
861 | position = self.positionOfObjectReference(obj) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
862 | if position is None: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
863 | self.writtenReferences[obj] = len(self.writtenReferences) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
864 | output += self.binaryInt(len(self.writtenReferences) - 1, |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
865 | bytes=self.trailer.objectRefSize) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
866 | return (True, output) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
867 | else: |
2997
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
868 | output += self.binaryInt( |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
869 | position, bytes=self.trailer.objectRefSize) |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
870 | return (False, output) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
871 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
872 | def writeObject(self, obj, output, setReferencePosition=False): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
873 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
874 | Private method to serialize the given object to the output. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
875 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
876 | @param obj object to be serialized |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
877 | @param output output to be serialized to (bytes) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
878 | @param setReferencePosition flag indicating, that the reference |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
879 | position the object was written to shall be recorded (boolean) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
880 | @return new output |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
881 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
882 | def proc_variable_length(format, length): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
883 | result = '' |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
884 | if length > 0b1110: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
885 | result += pack('!B', (format << 4) | 0b1111) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
886 | result = self.writeObject(length, result) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
887 | else: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
888 | result += pack('!B', (format << 4) | length) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
889 | return result |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
890 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
891 | if setReferencePosition: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
892 | self.referencePositions[obj] = len(output) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
893 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
894 | if obj is None: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
895 | output += pack('!B', 0b00000000) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
896 | elif isinstance(obj, BoolWrapper): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
897 | if obj.value is False: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
898 | output += pack('!B', 0b00001000) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
899 | else: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
900 | output += pack('!B', 0b00001001) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
901 | elif isinstance(obj, Uid): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
902 | size = self.intSize(obj) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
903 | output += pack('!B', (0b1000 << 4) | size - 1) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
904 | output += self.binaryInt(obj) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
905 | elif isinstance(obj, int): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
906 | bytes = self.intSize(obj) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
907 | root = math.log(bytes, 2) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
908 | output += pack('!B', (0b0001 << 4) | int(root)) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
909 | output += self.binaryInt(obj) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
910 | elif isinstance(obj, float): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
911 | # just use doubles |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
912 | output += pack('!B', (0b0010 << 4) | 3) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
913 | output += self.binaryReal(obj) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
914 | elif isinstance(obj, datetime.datetime): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
915 | timestamp = calendar.timegm(obj.utctimetuple()) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
916 | timestamp -= apple_reference_date_offset |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
917 | output += pack('!B', 0b00110011) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
918 | output += pack('!d', float(timestamp)) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
919 | elif isinstance(obj, Data): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
920 | output += proc_variable_length(0b0100, len(obj)) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
921 | output += obj |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
922 | elif isinstance(obj, str): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
923 | # Python 3 uses unicode strings only |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
924 | bytes = obj.encode('utf_16_be') |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
925 | output += proc_variable_length(0b0110, len(bytes) / 2) |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
926 | output += bytes |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
927 | elif isinstance(obj, HashableWrapper): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
928 | obj = obj.value |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
929 | if isinstance(obj, (set, list, tuple)): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
930 | if isinstance(obj, set): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
931 | output += proc_variable_length(0b1100, len(obj)) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
932 | else: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
933 | output += proc_variable_length(0b1010, len(obj)) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
934 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
935 | objectsToWrite = [] |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
936 | for objRef in obj: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
937 | (isNew, output) = self.writeObjectReference(objRef, output) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
938 | if isNew: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
939 | objectsToWrite.append(objRef) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
940 | for objRef in objectsToWrite: |
2997
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
941 | output = self.writeObject( |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
942 | objRef, output, setReferencePosition=True) |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
943 | elif isinstance(obj, dict): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
944 | output += proc_variable_length(0b1101, len(obj)) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
945 | keys = [] |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
946 | values = [] |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
947 | objectsToWrite = [] |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
948 | for key, value in obj.items(): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
949 | keys.append(key) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
950 | values.append(value) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
951 | for key in keys: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
952 | (isNew, output) = self.writeObjectReference(key, output) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
953 | if isNew: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
954 | objectsToWrite.append(key) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
955 | for value in values: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
956 | (isNew, output) = self.writeObjectReference(value, output) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
957 | if isNew: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
958 | objectsToWrite.append(value) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
959 | for objRef in objectsToWrite: |
2997
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
960 | output = self.writeObject( |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
961 | objRef, output, setReferencePosition=True) |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
962 | return output |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
963 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
964 | def writeOffsetTable(self, output): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
965 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
966 | Private method to write all of the object reference offsets. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
967 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
968 | @param output current output (bytes) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
969 | @return new output (bytes) |
2965
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
970 | @exception InvalidPlistException raised to indicate an invalid |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
971 | plist file |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
972 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
973 | all_positions = [] |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
974 | writtenReferences = list(self.writtenReferences.items()) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
975 | writtenReferences.sort(key=lambda x: x[1]) |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
976 | for obj, order in writtenReferences: |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
977 | position = self.referencePositions.get(obj) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
978 | if position is None: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
979 | raise InvalidPlistException( |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
980 | "Error while writing offsets table. Object not found. {0}" |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
981 | .format(obj)) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
982 | output += self.binaryInt(position, self.trailer.offsetSize) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
983 | all_positions.append(position) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
984 | return output |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
985 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
986 | def binaryReal(self, obj): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
987 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
988 | Private method to pack a real object. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
989 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
990 | @param obj real to be packed |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
991 | @return serialized object (bytes) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
992 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
993 | # just use doubles |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
994 | result = pack('>d', obj) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
995 | return result |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
996 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
997 | def binaryInt(self, obj, bytes=None): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
998 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
999 | Private method to pack an integer object. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1000 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1001 | @param obj integer to be packed |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1002 | @param bytes length the integer should be packed into (integer) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1003 | @return serialized object (bytes) |
2965
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
1004 | @exception InvalidPlistException raised to indicate an invalid |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
1005 | plist file |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1006 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1007 | result = '' |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1008 | if bytes is None: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1009 | bytes = self.intSize(obj) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1010 | if bytes == 1: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1011 | result += pack('>B', obj) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1012 | elif bytes == 2: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1013 | result += pack('>H', obj) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1014 | elif bytes == 4: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1015 | result += pack('>L', obj) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1016 | elif bytes == 8: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1017 | result += pack('>q', obj) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1018 | else: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1019 | raise InvalidPlistException( |
2997
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
1020 | "Core Foundation can't handle integers with size greater" |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
1021 | " than 8 bytes.") |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1022 | return result |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1023 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1024 | def intSize(self, obj): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1025 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1026 | Private method to determine the number of bytes necessary to store the |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1027 | given integer. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1028 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1029 | @param obj integer object |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1030 | @return number of bytes required (integer) |
2965
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
1031 | @exception InvalidPlistException raised to indicate an invalid |
d133c7edd88a
Continued correcting doc strings by using the new doc string checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2302
diff
changeset
|
1032 | plist file |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1033 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1034 | # SIGNED |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
1035 | if obj < 0: # Signed integer, always 8 bytes |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1036 | return 8 |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1037 | # UNSIGNED |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
1038 | elif obj <= 0xFF: # 1 byte |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1039 | return 1 |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
1040 | elif obj <= 0xFFFF: # 2 bytes |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1041 | return 2 |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
1042 | elif obj <= 0xFFFFFFFF: # 4 bytes |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1043 | return 4 |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1044 | # SIGNED |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1045 | # 0x7FFFFFFFFFFFFFFF is the max. |
1965
96f5a76e1845
Fixed some PEP-8 related issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1720
diff
changeset
|
1046 | elif obj <= 0x7FFFFFFFFFFFFFFF: # 8 bytes |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1047 | return 8 |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1048 | else: |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1049 | raise InvalidPlistException( |
2997
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
1050 | "Core Foundation can't handle integers with size greater" |
7f0ef975da9e
Continued to shorten the code lines to max. 79 characters.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
2969
diff
changeset
|
1051 | " than 8 bytes.") |
1720
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1052 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1053 | def realSize(self, obj): |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1054 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1055 | Private method to determine the number of bytes necessary to store the |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1056 | given real. |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1057 | |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1058 | @param obj real object |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1059 | @return number of bytes required (integer) |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1060 | """ |
201622cf8a01
Added a bookmarks importer for Apple Safari.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1061 | return 8 |