Documentation/Source/eric5.Utilities.binplistlib.html

changeset 1720
201622cf8a01
child 1968
eb57efc415c6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Documentation/Source/eric5.Utilities.binplistlib.html	Mon Mar 19 20:14:07 2012 +0100
@@ -0,0 +1,997 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
+'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
+<html><head>
+<title>eric5.Utilities.binplistlib</title>
+<style>
+body {
+    background: #EDECE6;
+    margin: 0em 1em 10em 1em;
+    color: black;
+}
+
+h1 { color: white; background: #85774A; }
+h2 { color: white; background: #85774A; }
+h3 { color: white; background: #9D936E; }
+h4 { color: white; background: #9D936E; }
+    
+a { color: #BA6D36; }
+
+</style>
+</head>
+<body><a NAME="top" ID="top"></a>
+<h1>eric5.Utilities.binplistlib</h1>
+<p>
+Module implementing a library for reading and writing binary property list files.
+</p><p>
+Binary Property List (plist) files provide a faster and smaller serialization
+format for property lists on OS X. This is a library for generating binary
+plists which can be read by OS X, iOS, or other clients.
+</p><p>
+The API models the plistlib API, and will call through to plistlib when
+XML serialization or deserialization is required.
+</p><p>
+To generate plists with UID values, wrap the values with the Uid object. The
+value must be an int.
+</p><p>
+To generate plists with NSData/CFData values, wrap the values with the
+Data object. The value must be a bytes object.
+</p><p>
+Date values can only be datetime.datetime objects.
+</p><p>
+The exceptions InvalidPlistException and NotBinaryPlistException may be 
+thrown to indicate that the data cannot be serialized or deserialized as
+a binary plist.
+</p><p>
+Plist generation example:
+<pre>
+    from binplistlib import *
+    from datetime import datetime
+    plist = {'aKey':'aValue',
+             '0':1.322,
+             'now':datetime.now(),
+             'list':[1,2,3],
+             'tuple':('a','b','c')
+             }
+    try:
+        writePlist(plist, "example.plist")
+    except (InvalidPlistException, NotBinaryPlistException) as e:
+        print("Something bad happened:", e)
+</pre>
+Plist parsing example:
+<pre>
+    from binplistlib import *
+    try:
+        plist = readPlist("example.plist")
+        print(plist)
+    except (InvalidPlistException, NotBinaryPlistException) as e:
+        print("Not a plist:", e)
+</pre>
+</p>
+<h3>Global Attributes</h3>
+<table>
+<tr><td>PlistByteCounts</td></tr><tr><td>PlistTrailer</td></tr><tr><td>__all__</td></tr><tr><td>apple_reference_date_offset</td></tr>
+</table>
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#BoolWrapper">BoolWrapper</a></td>
+<td>Class wrapping a boolean value.</td>
+</tr><tr>
+<td><a href="#Data">Data</a></td>
+<td>Class implementing a wrapper around bytes types for representing Data values.</td>
+</tr><tr>
+<td><a href="#HashableWrapper">HashableWrapper</a></td>
+<td>Class wrapping a hashable value.</td>
+</tr><tr>
+<td><a href="#InvalidPlistException">InvalidPlistException</a></td>
+<td>Exception raised when the plist is incorrectly formatted.</td>
+</tr><tr>
+<td><a href="#NotBinaryPlistException">NotBinaryPlistException</a></td>
+<td>Exception raised when a binary plist was expected but not encountered.</td>
+</tr><tr>
+<td><a href="#PlistReader">PlistReader</a></td>
+<td>Class implementing the plist reader.</td>
+</tr><tr>
+<td><a href="#PlistWriter">PlistWriter</a></td>
+<td>Class implementing the plist writer.</td>
+</tr><tr>
+<td><a href="#Uid">Uid</a></td>
+<td>Class implementing a wrapper around integers for representing UID values.</td>
+</tr>
+</table>
+<h3>Functions</h3>
+<table>
+<tr>
+<td><a href="#is_stream_binary_plist">is_stream_binary_plist</a></td>
+<td>Module function to check, if the stream is a binary plist.</td>
+</tr><tr>
+<td><a href="#readPlist">readPlist</a></td>
+<td>Module function to read a plist file.</td>
+</tr><tr>
+<td><a href="#readPlistFromBytes">readPlistFromBytes</a></td>
+<td>Module function to read from a plist bytes object.</td>
+</tr><tr>
+<td><a href="#writePlist">writePlist</a></td>
+<td>Module function to write a plist file.</td>
+</tr><tr>
+<td><a href="#writePlistToBytes">writePlistToBytes</a></td>
+<td>Module function to write a plist bytes object.</td>
+</tr>
+</table>
+<hr /><hr />
+<a NAME="BoolWrapper" ID="BoolWrapper"></a>
+<h2>BoolWrapper</h2>
+<p>
+    Class wrapping a boolean value.
+</p>
+<h3>Derived from</h3>
+object
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#BoolWrapper.__init__">BoolWrapper</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#BoolWrapper.__repr__">__repr__</a></td>
+<td></td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="BoolWrapper.__init__" ID="BoolWrapper.__init__"></a>
+<h4>BoolWrapper (Constructor)</h4>
+<b>BoolWrapper</b>(<i>value</i>)
+<a NAME="BoolWrapper.__repr__" ID="BoolWrapper.__repr__"></a>
+<h4>BoolWrapper.__repr__</h4>
+<b>__repr__</b>(<i></i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="Data" ID="Data"></a>
+<h2>Data</h2>
+<p>
+    Class implementing a wrapper around bytes types for representing Data values.
+</p>
+<h3>Derived from</h3>
+bytes
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="HashableWrapper" ID="HashableWrapper"></a>
+<h2>HashableWrapper</h2>
+<p>
+    Class wrapping a hashable value.
+</p>
+<h3>Derived from</h3>
+object
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#HashableWrapper.__init__">HashableWrapper</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#HashableWrapper.__repr__">__repr__</a></td>
+<td></td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="HashableWrapper.__init__" ID="HashableWrapper.__init__"></a>
+<h4>HashableWrapper (Constructor)</h4>
+<b>HashableWrapper</b>(<i>value</i>)
+<a NAME="HashableWrapper.__repr__" ID="HashableWrapper.__repr__"></a>
+<h4>HashableWrapper.__repr__</h4>
+<b>__repr__</b>(<i></i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="InvalidPlistException" ID="InvalidPlistException"></a>
+<h2>InvalidPlistException</h2>
+<p>
+    Exception raised when the plist is incorrectly formatted.
+</p>
+<h3>Derived from</h3>
+Exception
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="NotBinaryPlistException" ID="NotBinaryPlistException"></a>
+<h2>NotBinaryPlistException</h2>
+<p>
+    Exception raised when a binary plist was expected but not encountered.
+</p>
+<h3>Derived from</h3>
+Exception
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="PlistReader" ID="PlistReader"></a>
+<h2>PlistReader</h2>
+<p>
+    Class implementing the plist reader.
+</p>
+<h3>Derived from</h3>
+object
+<h3>Class Attributes</h3>
+<table>
+<tr><td>contents</td></tr><tr><td>currentOffset</td></tr><tr><td>file</td></tr><tr><td>offsets</td></tr><tr><td>trailer</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#PlistReader.__init__">PlistReader</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#PlistReader.getSizedInteger">getSizedInteger</a></td>
+<td>Private method to read an integer of a specific size.</td>
+</tr><tr>
+<td><a href="#PlistReader.parse">parse</a></td>
+<td>Public method to parse the plist data.</td>
+</tr><tr>
+<td><a href="#PlistReader.proc_extra">proc_extra</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#PlistReader.readArray">readArray</a></td>
+<td>Private method to read an Array object.</td>
+</tr><tr>
+<td><a href="#PlistReader.readAsciiString">readAsciiString</a></td>
+<td>Private method to read an ASCII encoded string.</td>
+</tr><tr>
+<td><a href="#PlistReader.readData">readData</a></td>
+<td>Private method to read some bytes.</td>
+</tr><tr>
+<td><a href="#PlistReader.readDate">readDate</a></td>
+<td>Private method to read a date.</td>
+</tr><tr>
+<td><a href="#PlistReader.readDict">readDict</a></td>
+<td>Private method to read a Dictionary object.</td>
+</tr><tr>
+<td><a href="#PlistReader.readInteger">readInteger</a></td>
+<td>Private method to read an Integer object.</td>
+</tr><tr>
+<td><a href="#PlistReader.readObject">readObject</a></td>
+<td>Private method to read the object data.</td>
+</tr><tr>
+<td><a href="#PlistReader.readReal">readReal</a></td>
+<td>Private method to read a Real object.</td>
+</tr><tr>
+<td><a href="#PlistReader.readRefs">readRefs</a></td>
+<td>Private method to read References.</td>
+</tr><tr>
+<td><a href="#PlistReader.readRoot">readRoot</a></td>
+<td>Private method to read the root object.</td>
+</tr><tr>
+<td><a href="#PlistReader.readUid">readUid</a></td>
+<td>Private method to read a UID.</td>
+</tr><tr>
+<td><a href="#PlistReader.readUnicode">readUnicode</a></td>
+<td>Private method to read an Unicode encoded string.</td>
+</tr><tr>
+<td><a href="#PlistReader.reset">reset</a></td>
+<td>Private method to reset the instance object.</td>
+</tr><tr>
+<td><a href="#PlistReader.setCurrentOffsetToObjectNumber">setCurrentOffsetToObjectNumber</a></td>
+<td>Private method to set the current offset.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="PlistReader.__init__" ID="PlistReader.__init__"></a>
+<h4>PlistReader (Constructor)</h4>
+<b>PlistReader</b>(<i>fileOrStream</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>fileOrStream</i></dt>
+<dd>
+open file containing the plist data (file object)
+</dd>
+</dl><a NAME="PlistReader.getSizedInteger" ID="PlistReader.getSizedInteger"></a>
+<h4>PlistReader.getSizedInteger</h4>
+<b>getSizedInteger</b>(<i>data, bytes</i>)
+<p>
+        Private method to read an integer of a specific size.
+</p><dl>
+<dt><i>data</i></dt>
+<dd>
+data to extract the integer from (bytes)
+</dd><dt><i>bytes</i></dt>
+<dd>
+length of the integer (integer)
+</dd>
+</dl><a NAME="PlistReader.parse" ID="PlistReader.parse"></a>
+<h4>PlistReader.parse</h4>
+<b>parse</b>(<i></i>)
+<p>
+        Public method to parse the plist data.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+unpickled object
+</dd>
+</dl><a NAME="PlistReader.proc_extra" ID="PlistReader.proc_extra"></a>
+<h4>PlistReader.proc_extra</h4>
+<b>proc_extra</b>(<i></i>)
+<a NAME="PlistReader.readArray" ID="PlistReader.readArray"></a>
+<h4>PlistReader.readArray</h4>
+<b>readArray</b>(<i>count</i>)
+<p>
+        Private method to read an Array object.
+</p><dl>
+<dt><i>count</i></dt>
+<dd>
+number of array elements (integer)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+list of unpickled objects
+</dd>
+</dl><a NAME="PlistReader.readAsciiString" ID="PlistReader.readAsciiString"></a>
+<h4>PlistReader.readAsciiString</h4>
+<b>readAsciiString</b>(<i>length</i>)
+<p>
+        Private method to read an ASCII encoded string.
+</p><dl>
+<dt><i>length</i></dt>
+<dd>
+length of the string (integer)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+ASCII encoded string
+</dd>
+</dl><a NAME="PlistReader.readData" ID="PlistReader.readData"></a>
+<h4>PlistReader.readData</h4>
+<b>readData</b>(<i>length</i>)
+<p>
+        Private method to read some bytes.
+</p><dl>
+<dt><i>length</i></dt>
+<dd>
+number of bytes to read (integer)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+Data object
+</dd>
+</dl><a NAME="PlistReader.readDate" ID="PlistReader.readDate"></a>
+<h4>PlistReader.readDate</h4>
+<b>readDate</b>(<i></i>)
+<p>
+        Private method to read a date.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+date object (datetime.datetime)
+</dd>
+</dl><a NAME="PlistReader.readDict" ID="PlistReader.readDict"></a>
+<h4>PlistReader.readDict</h4>
+<b>readDict</b>(<i>count</i>)
+<p>
+        Private method to read a Dictionary object.
+</p><dl>
+<dt><i>count</i></dt>
+<dd>
+number of dictionary elements (integer)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+dictionary of unpickled objects
+</dd>
+</dl><a NAME="PlistReader.readInteger" ID="PlistReader.readInteger"></a>
+<h4>PlistReader.readInteger</h4>
+<b>readInteger</b>(<i>bytes</i>)
+<p>
+        Private method to read an Integer object.
+</p><dl>
+<dt><i>bytes</i></dt>
+<dd>
+length of the object (integer)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+integer object
+</dd>
+</dl><a NAME="PlistReader.readObject" ID="PlistReader.readObject"></a>
+<h4>PlistReader.readObject</h4>
+<b>readObject</b>(<i></i>)
+<p>
+        Private method to read the object data.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+unpickled object
+</dd>
+</dl><a NAME="PlistReader.readReal" ID="PlistReader.readReal"></a>
+<h4>PlistReader.readReal</h4>
+<b>readReal</b>(<i>length</i>)
+<p>
+        Private method to read a Real object.
+</p><dl>
+<dt><i>length</i></dt>
+<dd>
+length of the object (integer)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+float object
+</dd>
+</dl><a NAME="PlistReader.readRefs" ID="PlistReader.readRefs"></a>
+<h4>PlistReader.readRefs</h4>
+<b>readRefs</b>(<i>count</i>)
+<p>
+        Private method to read References.
+</p><dl>
+<dt><i>count</i></dt>
+<dd>
+amount of the references (integer)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+list of references (list of integers)
+</dd>
+</dl><a NAME="PlistReader.readRoot" ID="PlistReader.readRoot"></a>
+<h4>PlistReader.readRoot</h4>
+<b>readRoot</b>(<i></i>)
+<p>
+        Private method to read the root object.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+unpickled object
+</dd>
+</dl><a NAME="PlistReader.readUid" ID="PlistReader.readUid"></a>
+<h4>PlistReader.readUid</h4>
+<b>readUid</b>(<i>length</i>)
+<p>
+        Private method to read a UID.
+</p><dl>
+<dt><i>length</i></dt>
+<dd>
+length of the UID (integer)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+Uid object
+</dd>
+</dl><a NAME="PlistReader.readUnicode" ID="PlistReader.readUnicode"></a>
+<h4>PlistReader.readUnicode</h4>
+<b>readUnicode</b>(<i>length</i>)
+<p>
+        Private method to read an Unicode encoded string.
+</p><dl>
+<dt><i>length</i></dt>
+<dd>
+length of the string (integer)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+unicode encoded string
+</dd>
+</dl><a NAME="PlistReader.reset" ID="PlistReader.reset"></a>
+<h4>PlistReader.reset</h4>
+<b>reset</b>(<i></i>)
+<p>
+        Private method to reset the instance object.
+</p><a NAME="PlistReader.setCurrentOffsetToObjectNumber" ID="PlistReader.setCurrentOffsetToObjectNumber"></a>
+<h4>PlistReader.setCurrentOffsetToObjectNumber</h4>
+<b>setCurrentOffsetToObjectNumber</b>(<i>objectNumber</i>)
+<p>
+        Private method to set the current offset.
+</p><dl>
+<dt><i>objectNumber</i></dt>
+<dd>
+number of the object (integer)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="PlistWriter" ID="PlistWriter"></a>
+<h2>PlistWriter</h2>
+<p>
+    Class implementing the plist writer.
+</p>
+<h3>Derived from</h3>
+object
+<h3>Class Attributes</h3>
+<table>
+<tr><td>byteCounts</td></tr><tr><td>computedUniques</td></tr><tr><td>file</td></tr><tr><td>header</td></tr><tr><td>referencePositions</td></tr><tr><td>trailer</td></tr><tr><td>wrappedFalse</td></tr><tr><td>wrappedTrue</td></tr><tr><td>writtenReferences</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#PlistWriter.__init__">PlistWriter</a></td>
+<td>Constructor</td>
+</tr><tr>
+<td><a href="#PlistWriter.binaryInt">binaryInt</a></td>
+<td>Private method to pack an integer object.</td>
+</tr><tr>
+<td><a href="#PlistWriter.binaryReal">binaryReal</a></td>
+<td>Private method to pack a real object.</td>
+</tr><tr>
+<td><a href="#PlistWriter.check_key">check_key</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#PlistWriter.computeOffsets">computeOffsets</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#PlistWriter.incrementByteCount">incrementByteCount</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#PlistWriter.intSize">intSize</a></td>
+<td>Private method to determine the number of bytes necessary to store the given integer.</td>
+</tr><tr>
+<td><a href="#PlistWriter.positionOfObjectReference">positionOfObjectReference</a></td>
+<td>Private method to get the position of an object.</td>
+</tr><tr>
+<td><a href="#PlistWriter.proc_size">proc_size</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#PlistWriter.proc_variable_length">proc_variable_length</a></td>
+<td></td>
+</tr><tr>
+<td><a href="#PlistWriter.realSize">realSize</a></td>
+<td>Private method to determine the number of bytes necessary to store the given real.</td>
+</tr><tr>
+<td><a href="#PlistWriter.reset">reset</a></td>
+<td>Private method to reset the instance object.</td>
+</tr><tr>
+<td><a href="#PlistWriter.wrapRoot">wrapRoot</a></td>
+<td>Private method to generate object wrappers.</td>
+</tr><tr>
+<td><a href="#PlistWriter.writeObject">writeObject</a></td>
+<td>Private method to serialize the given object to the output.</td>
+</tr><tr>
+<td><a href="#PlistWriter.writeObjectReference">writeObjectReference</a></td>
+<td>Private method to write an object reference.</td>
+</tr><tr>
+<td><a href="#PlistWriter.writeOffsetTable">writeOffsetTable</a></td>
+<td>Private method to write all of the object reference offsets.</td>
+</tr><tr>
+<td><a href="#PlistWriter.writeRoot">writeRoot</a></td>
+<td>Public method to write an object to a plist file.</td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="PlistWriter.__init__" ID="PlistWriter.__init__"></a>
+<h4>PlistWriter (Constructor)</h4>
+<b>PlistWriter</b>(<i>file</i>)
+<p>
+        Constructor
+</p><dl>
+<dt><i>file</i></dt>
+<dd>
+file to write the plist data to (file object)
+</dd>
+</dl><a NAME="PlistWriter.binaryInt" ID="PlistWriter.binaryInt"></a>
+<h4>PlistWriter.binaryInt</h4>
+<b>binaryInt</b>(<i>obj, bytes=None</i>)
+<p>
+        Private method to pack an integer object.
+</p><dl>
+<dt><i>obj</i></dt>
+<dd>
+integer to be packed
+</dd><dt><i>bytes</i></dt>
+<dd>
+length the integer should be packed into (integer)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+serialized object (bytes)
+</dd>
+</dl><a NAME="PlistWriter.binaryReal" ID="PlistWriter.binaryReal"></a>
+<h4>PlistWriter.binaryReal</h4>
+<b>binaryReal</b>(<i>obj</i>)
+<p>
+        Private method to pack a real object.
+</p><dl>
+<dt><i>obj</i></dt>
+<dd>
+real to be packed
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+serialized object (bytes)
+</dd>
+</dl><a NAME="PlistWriter.check_key" ID="PlistWriter.check_key"></a>
+<h4>PlistWriter.check_key</h4>
+<b>check_key</b>(<i></i>)
+<a NAME="PlistWriter.computeOffsets" ID="PlistWriter.computeOffsets"></a>
+<h4>PlistWriter.computeOffsets</h4>
+<b>computeOffsets</b>(<i>obj, asReference=False, isRoot=False</i>)
+<a NAME="PlistWriter.incrementByteCount" ID="PlistWriter.incrementByteCount"></a>
+<h4>PlistWriter.incrementByteCount</h4>
+<b>incrementByteCount</b>(<i>field, incr=1</i>)
+<a NAME="PlistWriter.intSize" ID="PlistWriter.intSize"></a>
+<h4>PlistWriter.intSize</h4>
+<b>intSize</b>(<i>obj</i>)
+<p>
+        Private method to determine the number of bytes necessary to store the
+        given integer.
+</p><dl>
+<dt><i>obj</i></dt>
+<dd>
+integer object
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+number of bytes required (integer)
+</dd>
+</dl><a NAME="PlistWriter.positionOfObjectReference" ID="PlistWriter.positionOfObjectReference"></a>
+<h4>PlistWriter.positionOfObjectReference</h4>
+<b>positionOfObjectReference</b>(<i>obj</i>)
+<p>
+        Private method to get the position of an object.
+</p><p>
+        If the given object has been written already, return its
+        position in the offset table. Otherwise, return None.
+</p><dl>
+<dt>Returns:</dt>
+<dd>
+position of the object (integer)
+</dd>
+</dl><a NAME="PlistWriter.proc_size" ID="PlistWriter.proc_size"></a>
+<h4>PlistWriter.proc_size</h4>
+<b>proc_size</b>(<i></i>)
+<a NAME="PlistWriter.proc_variable_length" ID="PlistWriter.proc_variable_length"></a>
+<h4>PlistWriter.proc_variable_length</h4>
+<b>proc_variable_length</b>(<i>length</i>)
+<a NAME="PlistWriter.realSize" ID="PlistWriter.realSize"></a>
+<h4>PlistWriter.realSize</h4>
+<b>realSize</b>(<i>obj</i>)
+<p>
+        Private method to determine the number of bytes necessary to store the
+        given real.
+</p><dl>
+<dt><i>obj</i></dt>
+<dd>
+real object
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+number of bytes required (integer)
+</dd>
+</dl><a NAME="PlistWriter.reset" ID="PlistWriter.reset"></a>
+<h4>PlistWriter.reset</h4>
+<b>reset</b>(<i></i>)
+<p>
+        Private method to reset the instance object.
+</p><a NAME="PlistWriter.wrapRoot" ID="PlistWriter.wrapRoot"></a>
+<h4>PlistWriter.wrapRoot</h4>
+<b>wrapRoot</b>(<i>root</i>)
+<p>
+        Private method to generate object wrappers.
+</p><dl>
+<dt><i>root</i></dt>
+<dd>
+object to be wrapped
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+wrapped object
+</dd>
+</dl><a NAME="PlistWriter.writeObject" ID="PlistWriter.writeObject"></a>
+<h4>PlistWriter.writeObject</h4>
+<b>writeObject</b>(<i>obj, output, setReferencePosition=False</i>)
+<p>
+        Private method to serialize the given object to the output.
+</p><dl>
+<dt><i>obj</i></dt>
+<dd>
+object to be serialized
+</dd><dt><i>output</i></dt>
+<dd>
+output to be serialized to (bytes)
+</dd><dt><i>setReferencePosition</i></dt>
+<dd>
+flag indicating, that the reference
+            position the object was written to shall be recorded (boolean)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+new output
+</dd>
+</dl><a NAME="PlistWriter.writeObjectReference" ID="PlistWriter.writeObjectReference"></a>
+<h4>PlistWriter.writeObjectReference</h4>
+<b>writeObjectReference</b>(<i>obj, output</i>)
+<p>
+        Private method to write an object reference.
+</p><p>
+        Tries to write an object reference, adding it to the references
+        table. Does not write the actual object bytes or set the reference
+        position. Returns a tuple of whether the object was a new reference
+        (True if it was, False if it already was in the reference table)
+        and the new output.
+</p><dl>
+<dt><i>obj</i></dt>
+<dd>
+object to be written
+</dd><dt><i>output</i></dt>
+<dd>
+output stream to append the object to
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating a new reference and the new output
+</dd>
+</dl><a NAME="PlistWriter.writeOffsetTable" ID="PlistWriter.writeOffsetTable"></a>
+<h4>PlistWriter.writeOffsetTable</h4>
+<b>writeOffsetTable</b>(<i>output</i>)
+<p>
+        Private method to write all of the object reference offsets.
+</p><dl>
+<dt><i>output</i></dt>
+<dd>
+current output (bytes)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+new output (bytes)
+</dd>
+</dl><a NAME="PlistWriter.writeRoot" ID="PlistWriter.writeRoot"></a>
+<h4>PlistWriter.writeRoot</h4>
+<b>writeRoot</b>(<i>root</i>)
+<p>
+        Public method to write an object to a plist file.
+</p><p>
+        Strategy is:
+        <ul>
+        <li>write header</li>
+        <li>wrap root object so everything is hashable</li>
+        <li>compute size of objects which will be written
+          <ul>
+          <li>need to do this in order to know how large the object refs
+            will be in the list/dict/set reference lists</li>
+        </ul></li>
+        <li>write objects
+          <ul>
+          <li>keep objects in writtenReferences</li>
+          <li>keep positions of object references in referencePositions</li>
+          <li>write object references with the length computed previously</li>
+        </ul></li>
+        <li>computer object reference length</li>
+        <li>write object reference positions</li>
+        <li>write trailer</li>
+        </ul>
+</p><dl>
+<dt><i>root</i></dt>
+<dd>
+reference to the object to be written
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="Uid" ID="Uid"></a>
+<h2>Uid</h2>
+<p>
+    Class implementing a wrapper around integers for representing UID values.
+</p><p>
+    This is used in keyed archiving.
+</p>
+<h3>Derived from</h3>
+int
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#Uid.__repr__">__repr__</a></td>
+<td></td>
+</tr>
+</table>
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+<a NAME="Uid.__repr__" ID="Uid.__repr__"></a>
+<h4>Uid.__repr__</h4>
+<b>__repr__</b>(<i></i>)
+
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="is_stream_binary_plist" ID="is_stream_binary_plist"></a>
+<h2>is_stream_binary_plist</h2>
+<b>is_stream_binary_plist</b>(<i>stream</i>)
+<p>
+    Module function to check, if the stream is a binary plist.
+</p><dl>
+<dt><i>stream</i></dt>
+<dd>
+plist stream (file object)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating a binary plist (boolean)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="readPlist" ID="readPlist"></a>
+<h2>readPlist</h2>
+<b>readPlist</b>(<i>pathOrFile</i>)
+<p>
+    Module function to read a plist file.
+</p><dl>
+<dt><i>pathOrFile</i></dt>
+<dd>
+name of the plist file (string) or an open file (file object)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+reference to the read object
+</dd>
+</dl><dl>
+<dt>Raises <b>InvalidPlistException</b>:</dt>
+<dd>
+raised to signal an invalid plist file
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="readPlistFromBytes" ID="readPlistFromBytes"></a>
+<h2>readPlistFromBytes</h2>
+<b>readPlistFromBytes</b>(<i>data</i>)
+<p>
+    Module function to read from a plist bytes object.
+</p><dl>
+<dt><i>data</i></dt>
+<dd>
+plist data (bytes)
+</dd>
+</dl><dl>
+<dt>Returns:</dt>
+<dd>
+reference to the read object
+</dd>
+</dl><dl>
+<dt>Raises <b>InvalidPlistException</b>:</dt>
+<dd>
+raised to signal an invalid plist file
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="writePlist" ID="writePlist"></a>
+<h2>writePlist</h2>
+<b>writePlist</b>(<i>rootObject, pathOrFile, binary=True</i>)
+<p>
+    Module function to write a plist file.
+</p><dl>
+<dt><i>rootObject</i></dt>
+<dd>
+reference to the object to be written
+</dd><dt><i>pathOrFile</i></dt>
+<dd>
+name of the plist file (string) or an open file (file object)
+</dd><dt><i>binary</i></dt>
+<dd>
+flag indicating the generation of a binary plist file (boolean)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr /><hr />
+<a NAME="writePlistToBytes" ID="writePlistToBytes"></a>
+<h2>writePlistToBytes</h2>
+<b>writePlistToBytes</b>(<i>rootObject, binary=True</i>)
+<p>
+    Module function to write a plist bytes object.
+</p><dl>
+<dt><i>rootObject</i></dt>
+<dd>
+reference to the object to be written
+</dd><dt><i>binary</i></dt>
+<dd>
+flag indicating the generation of a binary plist bytes object (boolean)
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
\ No newline at end of file

eric ide

mercurial