<?xml version="1.0" encoding="ascii"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>Bio.SeqRecord._RestrictedDict</title> <link rel="stylesheet" href="epydoc.css" type="text/css" /> <script type="text/javascript" src="epydoc.js"></script> </head> <body bgcolor="white" text="black" link="blue" vlink="#204080" alink="#204080"> <!-- ==================== NAVIGATION BAR ==================== --> <table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0"> <tr valign="middle"> <!-- Tree link --> <th> <a href="module-tree.html">Trees</a> </th> <!-- Index link --> <th> <a href="identifier-index.html">Indices</a> </th> <!-- Help link --> <th> <a href="help.html">Help</a> </th> <th class="navbar" width="100%"></th> </tr> </table> <table width="100%" cellpadding="0" cellspacing="0"> <tr valign="top"> <td width="100%"> <span class="breadcrumbs"> <a href="Bio-module.html">Package Bio</a> :: <a href="Bio.SeqRecord-module.html">Module SeqRecord</a> :: Class _RestrictedDict </span> </td> <td> <table cellpadding="0" cellspacing="0"> <!-- hide/show private --> <tr><td align="right"><span class="options">[<a href="javascript:void(0);" class="privatelink" onclick="toggle_private();">hide private</a>]</span></td></tr> <tr><td align="right"><span class="options" >[<a href="frames.html" target="_top">frames</a >] | <a href="Bio.SeqRecord._RestrictedDict-class.html" target="_top">no frames</a>]</span></td></tr> </table> </td> </tr> </table> <!-- ==================== CLASS DESCRIPTION ==================== --> <h1 class="epydoc">Class _RestrictedDict</h1><p class="nomargin-top"><span class="codelink"><a href="Bio.SeqRecord-pysrc.html#_RestrictedDict">source code</a></span></p> <pre class="base-tree"> object --+ | dict --+ | <strong class="uidshort">_RestrictedDict</strong> </pre> <hr /> <p>Dict which only allows sequences of given length as values (PRIVATE).</p> <p>This simple subclass of the Python dictionary is used in the SeqRecord object for holding per-letter-annotations. This class is intended to prevent simple errors by only allowing python sequences (e.g. lists, strings and tuples) to be stored, and only if their length matches that expected (the length of the SeqRecord's seq object). It cannot however prevent the entries being edited in situ (for example appending entries to a list).</p> <pre class="py-doctest"> <span class="py-prompt">>>> </span>x = _RestrictedDict(5) <span class="py-prompt">>>> </span>x[<span class="py-string">"test"</span>] = <span class="py-string">"hello"</span> <span class="py-prompt">>>> </span>x <span class="py-output">{'test': 'hello'}</span></pre> <p>Adding entries which don't have the expected length are blocked:</p> <pre class="py-doctest"> <span class="py-prompt">>>> </span>x[<span class="py-string">"test"</span>] = <span class="py-string">"hello world"</span> <span class="py-except">Traceback (most recent call last):</span> <span class="py-except">...</span> <span class="py-except">TypeError: We only allow python sequences (lists, tuples or strings) of length 5.</span></pre> <p>The expected length is stored as a private attribute,</p> <pre class="py-doctest"> <span class="py-prompt">>>> </span>x._length <span class="py-output">5</span></pre> <p>In order that the SeqRecord (and other objects using this class) can be pickled, for example for use in the multiprocessing library, we need to be able to pickle the restricted dictionary objects.</p> <p>Using the default protocol, which is 0 on Python 2.x,</p> <pre class="py-doctest"> <span class="py-prompt">>>> </span><span class="py-keyword">import</span> pickle <span class="py-prompt">>>> </span>y = pickle.loads(pickle.dumps(x)) <span class="py-prompt">>>> </span>y <span class="py-output">{'test': 'hello'}</span> <span class="py-output"></span><span class="py-prompt">>>> </span>y._length <span class="py-output">5</span></pre> <p>Using the highest protocol, which is 2 on Python 2.x,</p> <pre class="py-doctest"> <span class="py-prompt">>>> </span><span class="py-keyword">import</span> pickle <span class="py-prompt">>>> </span>z = pickle.loads(pickle.dumps(x, pickle.HIGHEST_PROTOCOL)) <span class="py-prompt">>>> </span>z <span class="py-output">{'test': 'hello'}</span> <span class="py-output"></span><span class="py-prompt">>>> </span>z._length <span class="py-output">5</span></pre> <!-- ==================== INSTANCE METHODS ==================== --> <a name="section-InstanceMethods"></a> <table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr bgcolor="#70b0f0" class="table-header"> <td colspan="2" class="table-header"> <table border="0" cellpadding="0" cellspacing="0" width="100%"> <tr valign="top"> <td align="left"><span class="table-header">Instance Methods</span></td> <td align="right" valign="top" ><span class="options">[<a href="#section-InstanceMethods" class="privatelink" onclick="toggle_private();" >hide private</a>]</span></td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"><pre class="literalblock"> new empty dictionary </pre></span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a href="Bio.SeqRecord._RestrictedDict-class.html#__init__" class="summary-sig-name">__init__</a>(<span class="summary-sig-arg">self</span>, <span class="summary-sig-arg">length</span>)</span><br /> Create an EMPTY restricted dictionary.</td> <td align="right" valign="top"> <span class="codelink"><a href="Bio.SeqRecord-pysrc.html#_RestrictedDict.__init__">source code</a></span> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type"> </span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a href="Bio.SeqRecord._RestrictedDict-class.html#__setitem__" class="summary-sig-name">__setitem__</a>(<span class="summary-sig-arg">self</span>, <span class="summary-sig-arg">key</span>, <span class="summary-sig-arg">value</span>)</span><br /> x[i]=y</td> <td align="right" valign="top"> <span class="codelink"><a href="Bio.SeqRecord-pysrc.html#_RestrictedDict.__setitem__">source code</a></span> </td> </tr> </table> </td> </tr> <tr> <td width="15%" align="right" valign="top" class="summary"> <span class="summary-type">None</span> </td><td class="summary"> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr> <td><span class="summary-sig"><a href="Bio.SeqRecord._RestrictedDict-class.html#update" class="summary-sig-name">update</a>(<span class="summary-sig-arg">self</span>, <span class="summary-sig-arg">new_dict</span>)</span><br /> Update D from dict/iterable E and F.</td> <td align="right" valign="top"> <span class="codelink"><a href="Bio.SeqRecord-pysrc.html#_RestrictedDict.update">source code</a></span> </td> </tr> </table> </td> </tr> <tr> <td colspan="2" class="summary"> <p class="indent-wrapped-lines"><b>Inherited from <code>dict</code></b>: <code>__cmp__</code>, <code>__contains__</code>, <code>__delitem__</code>, <code>__eq__</code>, <code>__ge__</code>, <code>__getattribute__</code>, <code>__getitem__</code>, <code>__gt__</code>, <code>__iter__</code>, <code>__le__</code>, <code>__len__</code>, <code>__lt__</code>, <code>__ne__</code>, <code>__new__</code>, <code>__repr__</code>, <code>__sizeof__</code>, <code>clear</code>, <code>copy</code>, <code>fromkeys</code>, <code>get</code>, <code>has_key</code>, <code>items</code>, <code>iteritems</code>, <code>iterkeys</code>, <code>itervalues</code>, <code>keys</code>, <code>pop</code>, <code>popitem</code>, <code>setdefault</code>, <code>values</code>, <code>viewitems</code>, <code>viewkeys</code>, <code>viewvalues</code> </p> <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: <code>__delattr__</code>, <code>__format__</code>, <code>__reduce__</code>, <code>__reduce_ex__</code>, <code>__setattr__</code>, <code>__str__</code>, <code>__subclasshook__</code> </p> </td> </tr> </table> <!-- ==================== CLASS VARIABLES ==================== --> <a name="section-ClassVariables"></a> <table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr bgcolor="#70b0f0" class="table-header"> <td colspan="2" class="table-header"> <table border="0" cellpadding="0" cellspacing="0" width="100%"> <tr valign="top"> <td align="left"><span class="table-header">Class Variables</span></td> <td align="right" valign="top" ><span class="options">[<a href="#section-ClassVariables" class="privatelink" onclick="toggle_private();" >hide private</a>]</span></td> </tr> </table> </td> </tr> <tr> <td colspan="2" class="summary"> <p class="indent-wrapped-lines"><b>Inherited from <code>dict</code></b>: <code>__hash__</code> </p> </td> </tr> </table> <!-- ==================== PROPERTIES ==================== --> <a name="section-Properties"></a> <table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr bgcolor="#70b0f0" class="table-header"> <td colspan="2" class="table-header"> <table border="0" cellpadding="0" cellspacing="0" width="100%"> <tr valign="top"> <td align="left"><span class="table-header">Properties</span></td> <td align="right" valign="top" ><span class="options">[<a href="#section-Properties" class="privatelink" onclick="toggle_private();" >hide private</a>]</span></td> </tr> </table> </td> </tr> <tr> <td colspan="2" class="summary"> <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>: <code>__class__</code> </p> </td> </tr> </table> <!-- ==================== METHOD DETAILS ==================== --> <a name="section-MethodDetails"></a> <table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr bgcolor="#70b0f0" class="table-header"> <td colspan="2" class="table-header"> <table border="0" cellpadding="0" cellspacing="0" width="100%"> <tr valign="top"> <td align="left"><span class="table-header">Method Details</span></td> <td align="right" valign="top" ><span class="options">[<a href="#section-MethodDetails" class="privatelink" onclick="toggle_private();" >hide private</a>]</span></td> </tr> </table> </td> </tr> </table> <a name="__init__"></a> <div> <table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr><td> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr valign="top"><td> <h3 class="epydoc"><span class="sig"><span class="sig-name">__init__</span>(<span class="sig-arg">self</span>, <span class="sig-arg">length</span>)</span> <br /><em class="fname">(Constructor)</em> </h3> </td><td align="right" valign="top" ><span class="codelink"><a href="Bio.SeqRecord-pysrc.html#_RestrictedDict.__init__">source code</a></span> </td> </tr></table> <p>Create an EMPTY restricted dictionary.</p> <dl class="fields"> <dt>Returns: <pre class="literalblock"> new empty dictionary </pre></dt> <dt>Overrides: object.__init__ </dt> </dl> </td></tr></table> </div> <a name="__setitem__"></a> <div> <table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr><td> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr valign="top"><td> <h3 class="epydoc"><span class="sig"><span class="sig-name">__setitem__</span>(<span class="sig-arg">self</span>, <span class="sig-arg">key</span>, <span class="sig-arg">value</span>)</span> <br /><em class="fname">(Index assignment operator)</em> </h3> </td><td align="right" valign="top" ><span class="codelink"><a href="Bio.SeqRecord-pysrc.html#_RestrictedDict.__setitem__">source code</a></span> </td> </tr></table> <p>x[i]=y</p> <dl class="fields"> <dt>Overrides: dict.__setitem__ <dd><em class="note">(inherited documentation)</em></dd> </dt> </dl> </td></tr></table> </div> <a name="update"></a> <div> <table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white"> <tr><td> <table width="100%" cellpadding="0" cellspacing="0" border="0"> <tr valign="top"><td> <h3 class="epydoc"><span class="sig"><span class="sig-name">update</span>(<span class="sig-arg">self</span>, <span class="sig-arg">new_dict</span>)</span> </h3> </td><td align="right" valign="top" ><span class="codelink"><a href="Bio.SeqRecord-pysrc.html#_RestrictedDict.update">source code</a></span> </td> </tr></table> <p>Update D from dict/iterable E and F. If E has a .keys() method, does: for k in E: D[k] = E[k] If E lacks .keys() method, does: for (k, v) in E: D[k] = v In either case, this is followed by: for k in F: D[k] = F[k]</p> <dl class="fields"> <dt>Returns: None</dt> <dt>Overrides: dict.update <dd><em class="note">(inherited documentation)</em></dd> </dt> </dl> </td></tr></table> </div> <br /> <!-- ==================== NAVIGATION BAR ==================== --> <table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0"> <tr valign="middle"> <!-- Tree link --> <th> <a href="module-tree.html">Trees</a> </th> <!-- Index link --> <th> <a href="identifier-index.html">Indices</a> </th> <!-- Help link --> <th> <a href="help.html">Help</a> </th> <th class="navbar" width="100%"></th> </tr> </table> <table border="0" cellpadding="0" cellspacing="0" width="100%%"> <tr> <td align="left" class="footer"> Generated by Epydoc 3.0.1 on Thu Aug 18 18:22:16 2011 </td> <td align="right" class="footer"> <a target="mainFrame" href="http://epydoc.sourceforge.net" >http://epydoc.sourceforge.net</a> </td> </tr> </table> <script type="text/javascript"> <!-- // Private objects are initially displayed (because if // javascript is turned off then we want them to be // visible); but by default, we want to hide them. So hide // them unless we have a cookie that says to show them. checkCookie(); // --> </script> </body> </html>