<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>tables.nodes.filenode — PyTables 3.0.0 documentation</title> <link rel="stylesheet" href="../../../_static/cloud.css" type="text/css" /> <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> <link rel="stylesheet" href="../../../" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../../../', VERSION: '3.0.0', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true }; </script> <script type="text/javascript" src="../../../_static/jquery.js"></script> <script type="text/javascript" src="../../../_static/underscore.js"></script> <script type="text/javascript" src="../../../_static/doctools.js"></script> <script type="text/javascript" src="../../../_static/jquery.cookie.js"></script> <script type="text/javascript" src="../../../_static/toggle_sections.js"></script> <script type="text/javascript" src="../../../_static/toggle_sidebar.js"></script> <link rel="shortcut icon" href="../../../_static/favicon.ico"/> <link rel="top" title="PyTables 3.0.0 documentation" href="../../../index.html" /> <link rel="up" title="tables" href="../../tables.html" /> </head> <body> <div class="relbar-top"> <div class="related"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="../../../genindex.html" title="General Index" accesskey="I">index</a></li> <li class="right" > <a href="../../../py-modindex.html" title="Python Module Index" >modules</a> </li> <li class="right" > <a href="../../../np-modindex.html" title="Python Module Index" >modules</a> </li> <li><a href="../../../index.html">PyTables 3.0.0 documentation</a> »</li> <li><a href="../../index.html" >Module code</a> »</li> <li><a href="../../tables.html" accesskey="U">tables</a> »</li> </ul> </div> </div> <div class="document"> <div class="documentwrapper"> <div class="bodywrapper"> <div class="body"> <h1>Source code for tables.nodes.filenode</h1><div class="highlight"><pre> <span class="c"># -*- coding: utf-8 -*-</span> <span class="c">########################################################################</span> <span class="c">#</span> <span class="c"># License: BSD</span> <span class="c"># Created: October 2, 2004</span> <span class="c"># Author: Ivan Vilata i Balaguer - reverse:net.selidor@ivan</span> <span class="c">#</span> <span class="c"># $Id$</span> <span class="c">#</span> <span class="c">########################################################################</span> <span class="sd">"""A file interface to nodes for PyTables databases.</span> <span class="sd">The FileNode module provides a file interface for using inside of</span> <span class="sd">PyTables database files. Use the new_node() function to create a brand</span> <span class="sd">new file node which can be read and written as any ordinary Python</span> <span class="sd">file. Use the open_node() function to open an existing (i.e. created</span> <span class="sd">with new_node()) node for read-only or read-write access. Read acces</span> <span class="sd">is always available. Write access (enabled on new files and files</span> <span class="sd">opened with mode 'a+') only allows appending data to a file node.</span> <span class="sd">Currently only binary I/O is supported.</span> <span class="sd">See :ref:`filenode_usersguide` for instructions on use.</span> <span class="sd">.. versionchanged:: 3.0</span> <span class="sd"> In version 3.0 the module as been completely rewritten to be fully</span> <span class="sd"> compliant with the interfaces defined in the :mod:`io` module.</span> <span class="sd">"""</span> <span class="kn">import</span> <span class="nn">io</span> <span class="kn">import</span> <span class="nn">warnings</span> <span class="kn">import</span> <span class="nn">numpy</span> <span class="kn">as</span> <span class="nn">np</span> <span class="kn">import</span> <span class="nn">tables</span> <span class="kn">from</span> <span class="nn">tables._past</span> <span class="kn">import</span> <span class="n">previous_api</span> <span class="n">NodeType</span> <span class="o">=</span> <span class="s">'file'</span> <span class="sd">"""Value for NODE_TYPE node system attribute."""</span> <span class="n">NodeTypeVersions</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">]</span> <span class="sd">"""Supported values for NODE_TYPE_VERSION node system attribute."""</span> <div class="viewcode-block" id="RawPyTablesIO"><a class="viewcode-back" href="../../../usersguide/libref/filenode_classes.html#tables.nodes.filenode.RawPyTablesIO">[docs]</a><span class="k">class</span> <span class="nc">RawPyTablesIO</span><span class="p">(</span><span class="n">io</span><span class="o">.</span><span class="n">RawIOBase</span><span class="p">):</span> <span class="sd">"""Base class for raw binary I/O on HDF5 files using PyTables."""</span> <span class="c"># A lambda to turn a size into a shape, for each version.</span> <span class="n">_size_to_shape</span> <span class="o">=</span> <span class="p">[</span> <span class="bp">None</span><span class="p">,</span> <span class="k">lambda</span> <span class="n">l</span><span class="p">:</span> <span class="p">(</span><span class="n">l</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="k">lambda</span> <span class="n">l</span><span class="p">:</span> <span class="p">(</span><span class="n">l</span><span class="p">,</span> <span class="p">),</span> <span class="p">]</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> <span class="nb">super</span><span class="p">(</span><span class="n">RawPyTablesIO</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">()</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_node</span><span class="p">(</span><span class="n">node</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_attributes</span><span class="p">(</span><span class="n">node</span><span class="p">)</span> <span class="k">if</span> <span class="n">mode</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="n">mode</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">_v_file</span><span class="o">.</span><span class="n">mode</span> <span class="k">else</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_mode</span><span class="p">(</span><span class="n">mode</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cross_check_mode</span><span class="p">(</span><span class="n">mode</span><span class="p">,</span> <span class="n">node</span><span class="o">.</span><span class="n">_v_file</span><span class="o">.</span><span class="n">mode</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node</span> <span class="o">=</span> <span class="n">node</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mode</span> <span class="o">=</span> <span class="n">mode</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span> <span class="o">=</span> <span class="mi">0</span> <span class="bp">self</span><span class="o">.</span><span class="n">_version</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">attrs</span><span class="o">.</span><span class="n">NODE_TYPE_VERSION</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">_vshape</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_size_to_shape</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_version</span><span class="p">]</span> <span class="bp">self</span><span class="o">.</span><span class="n">_vtype</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">atom</span><span class="o">.</span><span class="n">dtype</span><span class="o">.</span><span class="n">base</span><span class="o">.</span><span class="n">type</span> <span class="c"># read only attribute</span> <span class="nd">@property</span> <div class="viewcode-block" id="RawPyTablesIO.mode"><a class="viewcode-back" href="../../../usersguide/libref/filenode_classes.html#tables.nodes.filenode.RawPyTablesIO.mode">[docs]</a> <span class="k">def</span> <span class="nf">mode</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">'''File mode'''</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mode</span> <span class="c">#def tell(self) -> int:</span></div> <div class="viewcode-block" id="RawPyTablesIO.tell"><a class="viewcode-back" href="../../../usersguide/libref/filenode_classes.html#tables.nodes.filenode.RawPyTablesIO.tell">[docs]</a> <span class="k">def</span> <span class="nf">tell</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""Return current stream position."""</span> <span class="bp">self</span><span class="o">.</span><span class="n">_checkClosed</span><span class="p">()</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span> <span class="c">#def seek(self, pos: int, whence: int = 0) -> int:</span></div> <div class="viewcode-block" id="RawPyTablesIO.seek"><a class="viewcode-back" href="../../../usersguide/libref/filenode_classes.html#tables.nodes.filenode.RawPyTablesIO.seek">[docs]</a> <span class="k">def</span> <span class="nf">seek</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pos</span><span class="p">,</span> <span class="n">whence</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span> <span class="sd">"""Change stream position.</span> <span class="sd"> Change the stream position to byte offset offset. offset is</span> <span class="sd"> interpreted relative to the position indicated by whence. Values</span> <span class="sd"> for whence are:</span> <span class="sd"> * 0 -- start of stream (the default); offset should be zero or positive</span> <span class="sd"> * 1 -- current stream position; offset may be negative</span> <span class="sd"> * 2 -- end of stream; offset is usually negative</span> <span class="sd"> Return the new absolute position.</span> <span class="sd"> """</span> <span class="bp">self</span><span class="o">.</span><span class="n">_checkClosed</span><span class="p">()</span> <span class="k">try</span><span class="p">:</span> <span class="n">pos</span> <span class="o">=</span> <span class="n">pos</span><span class="o">.</span><span class="n">__index__</span><span class="p">()</span> <span class="c">#except AttributeError as err:</span> <span class="c">#raise TypeError("an integer is required") from err</span> <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s">"an integer is required"</span><span class="p">)</span> <span class="k">if</span> <span class="n">whence</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> <span class="k">if</span> <span class="n">pos</span> <span class="o"><</span> <span class="mi">0</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">"negative seek position </span><span class="si">%r</span><span class="s">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">pos</span><span class="p">,))</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span> <span class="o">=</span> <span class="n">pos</span> <span class="k">elif</span> <span class="n">whence</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span> <span class="o">+</span> <span class="n">pos</span><span class="p">)</span> <span class="k">elif</span> <span class="n">whence</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node</span><span class="o">.</span><span class="n">nrows</span> <span class="o">+</span> <span class="n">pos</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">"invalid whence value"</span><span class="p">)</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span> <span class="c">#def seekable(self) -> bool:</span></div> <div class="viewcode-block" id="RawPyTablesIO.seekable"><a class="viewcode-back" href="../../../usersguide/libref/filenode_classes.html#tables.nodes.filenode.RawPyTablesIO.seekable">[docs]</a> <span class="k">def</span> <span class="nf">seekable</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""Return whether object supports random access.</span> <span class="sd"> If False, seek(), tell() and truncate() will raise IOError.</span> <span class="sd"> This method may need to do a test seek().</span> <span class="sd"> """</span> <span class="k">return</span> <span class="bp">True</span> <span class="c">#def fileno(self) -> int:</span></div> <div class="viewcode-block" id="RawPyTablesIO.fileno"><a class="viewcode-back" href="../../../usersguide/libref/filenode_classes.html#tables.nodes.filenode.RawPyTablesIO.fileno">[docs]</a> <span class="k">def</span> <span class="nf">fileno</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""Returns underlying file descriptor if one exists.</span> <span class="sd"> An IOError is raised if the IO object does not use a file descriptor.</span> <span class="sd"> """</span> <span class="bp">self</span><span class="o">.</span><span class="n">_checkClosed</span><span class="p">()</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node</span><span class="o">.</span><span class="n">_v_file</span><span class="o">.</span><span class="n">fileno</span><span class="p">()</span> <span class="c">#def close(self) -> None:</span></div> <div class="viewcode-block" id="RawPyTablesIO.close"><a class="viewcode-back" href="../../../usersguide/libref/filenode_classes.html#tables.nodes.filenode.RawPyTablesIO.close">[docs]</a> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""Flush and close the IO object.</span> <span class="sd"> This method has no effect if the file is already closed.</span> <span class="sd"> """</span> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">closed</span><span class="p">:</span> <span class="k">if</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_node</span><span class="p">,</span> <span class="s">'_v_file'</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s">"host PyTables file is already closed!"</span><span class="p">)</span> <span class="k">try</span><span class="p">:</span> <span class="nb">super</span><span class="p">(</span><span class="n">RawPyTablesIO</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> <span class="k">finally</span><span class="p">:</span> <span class="c"># Release node object to allow closing the file.</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node</span> <span class="o">=</span> <span class="bp">None</span> </div> <div class="viewcode-block" id="RawPyTablesIO.flush"><a class="viewcode-back" href="../../../usersguide/libref/filenode_classes.html#tables.nodes.filenode.RawPyTablesIO.flush">[docs]</a> <span class="k">def</span> <span class="nf">flush</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""Flush write buffers, if applicable.</span> <span class="sd"> This is not implemented for read-only and non-blocking streams.</span> <span class="sd"> """</span> <span class="bp">self</span><span class="o">.</span><span class="n">_checkClosed</span><span class="p">()</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span> <span class="c">#def truncate(self, pos: int = None) -> int:</span></div> <div class="viewcode-block" id="RawPyTablesIO.truncate"><a class="viewcode-back" href="../../../usersguide/libref/filenode_classes.html#tables.nodes.filenode.RawPyTablesIO.truncate">[docs]</a> <span class="k">def</span> <span class="nf">truncate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pos</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> <span class="sd">"""Truncate file to size bytes.</span> <span class="sd"> Size defaults to the current IO position as reported by tell().</span> <span class="sd"> Return the new size.</span> <span class="sd"> Currently, this method only makes sense to grow the file node,</span> <span class="sd"> since data can not be rewritten nor deleted.</span> <span class="sd"> """</span> <span class="bp">self</span><span class="o">.</span><span class="n">_checkClosed</span><span class="p">()</span> <span class="bp">self</span><span class="o">.</span><span class="n">_checkWritable</span><span class="p">()</span> <span class="k">if</span> <span class="n">pos</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="n">pos</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span> <span class="k">elif</span> <span class="n">pos</span> <span class="o"><</span> <span class="mi">0</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">"negative truncate position </span><span class="si">%r</span><span class="s">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">pos</span><span class="p">,))</span> <span class="k">if</span> <span class="n">pos</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node</span><span class="o">.</span><span class="n">nrows</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">IOError</span><span class="p">(</span><span class="s">"truncating is only allowed for growing a file"</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">_append_zeros</span><span class="p">(</span><span class="n">pos</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node</span><span class="o">.</span><span class="n">nrows</span><span class="p">)</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="n">pos</span><span class="p">)</span> <span class="c">#def readable(self) -> bool:</span></div> <div class="viewcode-block" id="RawPyTablesIO.readable"><a class="viewcode-back" href="../../../usersguide/libref/filenode_classes.html#tables.nodes.filenode.RawPyTablesIO.readable">[docs]</a> <span class="k">def</span> <span class="nf">readable</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""Return whether object was opened for reading.</span> <span class="sd"> If False, read() will raise IOError.</span> <span class="sd"> """</span> <span class="n">mode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mode</span> <span class="k">return</span> <span class="s">'r'</span> <span class="ow">in</span> <span class="n">mode</span> <span class="ow">or</span> <span class="s">'+'</span> <span class="ow">in</span> <span class="n">mode</span> <span class="c">#def writable(self) -> bool:</span></div> <div class="viewcode-block" id="RawPyTablesIO.writable"><a class="viewcode-back" href="../../../usersguide/libref/filenode_classes.html#tables.nodes.filenode.RawPyTablesIO.writable">[docs]</a> <span class="k">def</span> <span class="nf">writable</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""Return whether object was opened for writing.</span> <span class="sd"> If False, write() and truncate() will raise IOError.</span> <span class="sd"> """</span> <span class="n">mode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mode</span> <span class="k">return</span> <span class="s">'w'</span> <span class="ow">in</span> <span class="n">mode</span> <span class="ow">or</span> <span class="s">'a'</span> <span class="ow">in</span> <span class="n">mode</span> <span class="ow">or</span> <span class="s">'+'</span> <span class="ow">in</span> <span class="n">mode</span> <span class="c">#def readinto(self, b: bytearray) -> int:</span></div> <div class="viewcode-block" id="RawPyTablesIO.readinto"><a class="viewcode-back" href="../../../usersguide/libref/filenode_classes.html#tables.nodes.filenode.RawPyTablesIO.readinto">[docs]</a> <span class="k">def</span> <span class="nf">readinto</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span> <span class="sd">"""Read up to len(b) bytes into b.</span> <span class="sd"> Returns number of bytes read (0 for EOF), or None if the object</span> <span class="sd"> is set not to block as has no data to read.</span> <span class="sd"> """</span> <span class="bp">self</span><span class="o">.</span><span class="n">_checkClosed</span><span class="p">()</span> <span class="bp">self</span><span class="o">.</span><span class="n">_checkReadable</span><span class="p">()</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span> <span class="o">>=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node</span><span class="o">.</span><span class="n">nrows</span><span class="p">:</span> <span class="k">return</span> <span class="mi">0</span> <span class="n">n</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">b</span><span class="p">)</span> <span class="n">start</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span> <span class="n">stop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span> <span class="o">+</span> <span class="n">n</span> <span class="c"># XXX optimized path</span> <span class="c">#if stop <= self._node.nrows and isinstance(b, np.ndarray):</span> <span class="c"># self._node.read(start, stop, out=b)</span> <span class="c"># self._pos += n</span> <span class="c"># return n</span> <span class="k">if</span> <span class="n">stop</span> <span class="o">></span> <span class="bp">self</span><span class="o">.</span><span class="n">_node</span><span class="o">.</span><span class="n">nrows</span><span class="p">:</span> <span class="n">stop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node</span><span class="o">.</span><span class="n">nrows</span> <span class="n">n</span> <span class="o">=</span> <span class="n">stop</span> <span class="o">-</span> <span class="n">start</span> <span class="c"># XXX This ought to work with anything that supports the buffer API</span> <span class="n">b</span><span class="p">[:</span><span class="n">n</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">stop</span><span class="p">)</span><span class="o">.</span><span class="n">tostring</span><span class="p">()</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span> <span class="o">+=</span> <span class="n">n</span> <span class="k">return</span> <span class="n">n</span> <span class="c">#def readline(self, limit: int = -1) -> bytes:</span></div> <div class="viewcode-block" id="RawPyTablesIO.readline"><a class="viewcode-back" href="../../../usersguide/libref/filenode_classes.html#tables.nodes.filenode.RawPyTablesIO.readline">[docs]</a> <span class="k">def</span> <span class="nf">readline</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">limit</span><span class="o">=-</span><span class="mi">1</span><span class="p">):</span> <span class="sd">"""Read and return a line from the stream.</span> <span class="sd"> If limit is specified, at most limit bytes will be read.</span> <span class="sd"> The line terminator is always ``\\n`` for binary files; for text</span> <span class="sd"> files, the newlines argument to open can be used to select the line</span> <span class="sd"> terminator(s) recognized.</span> <span class="sd"> """</span> <span class="bp">self</span><span class="o">.</span><span class="n">_checkClosed</span><span class="p">()</span> <span class="bp">self</span><span class="o">.</span><span class="n">_checkReadable</span><span class="p">()</span> <span class="n">chunksize</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node</span><span class="o">.</span><span class="n">chunkshape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="c"># XXX: check</span> <span class="n">lsep</span> <span class="o">=</span> <span class="n">b</span><span class="s">'</span><span class="se">\n</span><span class="s">'</span> <span class="n">lseplen</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">lsep</span><span class="p">)</span> <span class="c"># Set the remaining bytes to read to the specified size.</span> <span class="n">remsize</span> <span class="o">=</span> <span class="n">limit</span> <span class="n">partial</span> <span class="o">=</span> <span class="p">[]</span> <span class="n">finished</span> <span class="o">=</span> <span class="bp">False</span> <span class="k">while</span> <span class="ow">not</span> <span class="n">finished</span><span class="p">:</span> <span class="c"># Read a string limited by the remaining number of bytes.</span> <span class="k">if</span> <span class="n">limit</span> <span class="o"><=</span> <span class="mi">0</span><span class="p">:</span> <span class="n">ibuff</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">chunksize</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="n">ibuff</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="nb">min</span><span class="p">(</span><span class="n">remsize</span><span class="p">,</span> <span class="n">chunksize</span><span class="p">))</span> <span class="n">ibufflen</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">ibuff</span><span class="p">)</span> <span class="n">remsize</span> <span class="o">-=</span> <span class="n">ibufflen</span> <span class="k">if</span> <span class="n">ibufflen</span> <span class="o">>=</span> <span class="n">lseplen</span><span class="p">:</span> <span class="c"># Separator fits, look for EOL string.</span> <span class="n">eolindex</span> <span class="o">=</span> <span class="n">ibuff</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">lsep</span><span class="p">)</span> <span class="k">elif</span> <span class="n">ibufflen</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> <span class="c"># EOF was immediately reached.</span> <span class="n">finished</span> <span class="o">=</span> <span class="bp">True</span> <span class="k">continue</span> <span class="k">else</span><span class="p">:</span> <span class="c"># ibufflen < lseplen</span> <span class="c"># EOF was hit and separator does not fit. ;)</span> <span class="n">partial</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">ibuff</span><span class="p">)</span> <span class="n">finished</span> <span class="o">=</span> <span class="bp">True</span> <span class="k">continue</span> <span class="k">if</span> <span class="n">eolindex</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">:</span> <span class="c"># Found an EOL. If there are trailing characters,</span> <span class="c"># cut the input buffer and seek back;</span> <span class="c"># else add the whole input buffer.</span> <span class="n">trailing</span> <span class="o">=</span> <span class="n">ibufflen</span> <span class="o">-</span> <span class="n">lseplen</span> <span class="o">-</span> <span class="n">eolindex</span> <span class="c"># Bytes beyond EOL.</span> <span class="k">if</span> <span class="n">trailing</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span> <span class="n">obuff</span> <span class="o">=</span> <span class="n">ibuff</span><span class="p">[:</span><span class="o">-</span><span class="n">trailing</span><span class="p">]</span> <span class="bp">self</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="o">-</span><span class="n">trailing</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="n">remsize</span> <span class="o">+=</span> <span class="n">trailing</span> <span class="k">else</span><span class="p">:</span> <span class="n">obuff</span> <span class="o">=</span> <span class="n">ibuff</span> <span class="n">finished</span> <span class="o">=</span> <span class="bp">True</span> <span class="k">elif</span> <span class="n">lseplen</span> <span class="o">></span> <span class="mi">1</span> <span class="ow">and</span> <span class="p">(</span><span class="n">limit</span> <span class="o"><=</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">remsize</span> <span class="o">></span> <span class="mi">0</span><span class="p">):</span> <span class="c"># Seek back a little since the end of the read string</span> <span class="c"># may have fallen in the middle of the line separator.</span> <span class="n">obuff</span> <span class="o">=</span> <span class="n">ibuff</span><span class="p">[:</span><span class="o">-</span><span class="n">lseplen</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="bp">self</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="o">-</span><span class="n">lseplen</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> <span class="n">remsize</span> <span class="o">+=</span> <span class="n">lseplen</span> <span class="o">-</span> <span class="mi">1</span> <span class="k">else</span><span class="p">:</span> <span class="c"># eolindex<0 and (lseplen<=1 or (limit>0 and remsize<=0))</span> <span class="c"># Did not find an EOL, add the whole input buffer.</span> <span class="n">obuff</span> <span class="o">=</span> <span class="n">ibuff</span> <span class="c"># Append (maybe cut) buffer.</span> <span class="n">partial</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">obuff</span><span class="p">)</span> <span class="c"># If a limit has been specified and the remaining count</span> <span class="c"># reaches zero, the reading is finished.</span> <span class="k">if</span> <span class="n">limit</span> <span class="o">></span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">remsize</span> <span class="o"><=</span> <span class="mi">0</span><span class="p">:</span> <span class="n">finished</span> <span class="o">=</span> <span class="bp">True</span> <span class="k">return</span> <span class="n">b</span><span class="s">''</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">partial</span><span class="p">)</span> <span class="c">#def write(self, b: bytes) -> int:</span></div> <div class="viewcode-block" id="RawPyTablesIO.write"><a class="viewcode-back" href="../../../usersguide/libref/filenode_classes.html#tables.nodes.filenode.RawPyTablesIO.write">[docs]</a> <span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span> <span class="sd">"""Write the given buffer to the IO stream.</span> <span class="sd"> Returns the number of bytes written, which may be less than len(b).</span> <span class="sd"> """</span> <span class="bp">self</span><span class="o">.</span><span class="n">_checkClosed</span><span class="p">()</span> <span class="bp">self</span><span class="o">.</span><span class="n">_checkWritable</span><span class="p">()</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">b</span><span class="p">,</span> <span class="nb">unicode</span><span class="p">):</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s">"can't write str to binary stream"</span><span class="p">)</span> <span class="n">n</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">b</span><span class="p">)</span> <span class="k">if</span> <span class="n">n</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> <span class="k">return</span> <span class="mi">0</span> <span class="n">pos</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span> <span class="c"># Is the pointer beyond the real end of data?</span> <span class="n">end2off</span> <span class="o">=</span> <span class="n">pos</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node</span><span class="o">.</span><span class="n">nrows</span> <span class="k">if</span> <span class="n">end2off</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span> <span class="c"># Zero-fill the gap between the end of data and the pointer.</span> <span class="bp">self</span><span class="o">.</span><span class="n">_append_zeros</span><span class="p">(</span><span class="n">end2off</span><span class="p">)</span> <span class="c"># Append data.</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node</span><span class="o">.</span><span class="n">append</span><span class="p">(</span> <span class="n">np</span><span class="o">.</span><span class="n">ndarray</span><span class="p">(</span><span class="nb">buffer</span><span class="o">=</span><span class="n">b</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_vtype</span><span class="p">,</span> <span class="n">shape</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_vshape</span><span class="p">(</span><span class="n">n</span><span class="p">)))</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pos</span> <span class="o">+=</span> <span class="n">n</span> <span class="k">return</span> <span class="n">n</span> </div> <span class="k">def</span> <span class="nf">_checkClosed</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""Checks if file node is open.</span> <span class="sd"> Checks whether the file node is open or has been closed.</span> <span class="sd"> In the second case, a ValueError is raised.</span> <span class="sd"> If the host PyTables has been closed, ValueError is also raised.</span> <span class="sd"> """</span> <span class="nb">super</span><span class="p">(</span><span class="n">RawPyTablesIO</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">_checkClosed</span><span class="p">()</span> <span class="k">if</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_node</span><span class="p">,</span> <span class="s">'_v_file'</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">"host PyTables file is already closed!"</span><span class="p">)</span> <span class="k">def</span> <span class="nf">_check_node</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">tables</span><span class="o">.</span><span class="n">EArray</span><span class="p">):</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s">'the "node" parameter should be a tables.EArray'</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">atom</span><span class="p">,</span> <span class="n">tables</span><span class="o">.</span><span class="n">UInt8Atom</span><span class="p">):</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s">'only nodes with atom "UInt8Atom" are allowed'</span><span class="p">)</span> <span class="k">def</span> <span class="nf">_check_mode</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mode</span><span class="p">):</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mode</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s">"invalid mode: </span><span class="si">%r</span><span class="s">"</span> <span class="o">%</span> <span class="n">mode</span><span class="p">)</span> <span class="n">modes</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">mode</span><span class="p">)</span> <span class="k">if</span> <span class="n">modes</span> <span class="o">-</span> <span class="nb">set</span><span class="p">(</span><span class="s">"arwb+tU"</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">mode</span><span class="p">)</span> <span class="o">></span> <span class="nb">len</span><span class="p">(</span><span class="n">modes</span><span class="p">):</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">"invalid mode: </span><span class="si">%r</span><span class="s">"</span> <span class="o">%</span> <span class="n">mode</span><span class="p">)</span> <span class="n">reading</span> <span class="o">=</span> <span class="s">"r"</span> <span class="ow">in</span> <span class="n">modes</span> <span class="n">writing</span> <span class="o">=</span> <span class="s">"w"</span> <span class="ow">in</span> <span class="n">modes</span> <span class="n">appending</span> <span class="o">=</span> <span class="s">"a"</span> <span class="ow">in</span> <span class="n">modes</span> <span class="c">#updating = "+" in modes</span> <span class="n">text</span> <span class="o">=</span> <span class="s">"t"</span> <span class="ow">in</span> <span class="n">modes</span> <span class="n">binary</span> <span class="o">=</span> <span class="s">"b"</span> <span class="ow">in</span> <span class="n">modes</span> <span class="k">if</span> <span class="s">"U"</span> <span class="ow">in</span> <span class="n">modes</span><span class="p">:</span> <span class="k">if</span> <span class="n">writing</span> <span class="ow">or</span> <span class="n">appending</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">"can't use U and writing mode at once"</span><span class="p">)</span> <span class="n">reading</span> <span class="o">=</span> <span class="bp">True</span> <span class="k">if</span> <span class="n">text</span> <span class="ow">and</span> <span class="n">binary</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">"can't have text and binary mode at once"</span><span class="p">)</span> <span class="k">if</span> <span class="n">reading</span> <span class="o">+</span> <span class="n">writing</span> <span class="o">+</span> <span class="n">appending</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">"can't have read/write/append mode at once"</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">reading</span> <span class="ow">or</span> <span class="n">writing</span> <span class="ow">or</span> <span class="n">appending</span><span class="p">):</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">"must have exactly one of read/write/append mode"</span><span class="p">)</span> <span class="k">def</span> <span class="nf">_cross_check_mode</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mode</span><span class="p">,</span> <span class="n">h5filemode</span><span class="p">):</span> <span class="c"># XXX: check</span> <span class="c">#readable = bool('r' in mode or '+' in mode)</span> <span class="c">#h5readable = bool('r' in h5filemode or '+' in h5filemode)</span> <span class="c">#</span> <span class="c">#if readable and not h5readable:</span> <span class="c"># raise ValueError("RawPyTablesIO can't be open in read mode if "</span> <span class="c"># "the underlying hdf5 file is not readable")</span> <span class="n">writable</span> <span class="o">=</span> <span class="nb">bool</span><span class="p">(</span><span class="s">'w'</span> <span class="ow">in</span> <span class="n">mode</span> <span class="ow">or</span> <span class="s">'a'</span> <span class="ow">in</span> <span class="n">mode</span> <span class="ow">or</span> <span class="s">'+'</span> <span class="ow">in</span> <span class="n">mode</span><span class="p">)</span> <span class="n">h5writable</span> <span class="o">=</span> <span class="nb">bool</span><span class="p">(</span><span class="s">'w'</span> <span class="ow">in</span> <span class="n">h5filemode</span> <span class="ow">or</span> <span class="s">'a'</span> <span class="ow">in</span> <span class="n">h5filemode</span> <span class="ow">or</span> <span class="s">'+'</span> <span class="ow">in</span> <span class="n">h5filemode</span><span class="p">)</span> <span class="k">if</span> <span class="n">writable</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">h5writable</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">"RawPyTablesIO can't be open in write mode if "</span> <span class="s">"the underlying hdf5 file is not writable"</span><span class="p">)</span> <span class="k">def</span> <span class="nf">_check_attributes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span> <span class="sd">"""Checks file node-specific attributes.</span> <span class="sd"> Checks for the presence and validity</span> <span class="sd"> of the system attributes 'NODE_TYPE' and 'NODE_TYPE_VERSION'</span> <span class="sd"> in the specified PyTables node (leaf).</span> <span class="sd"> ValueError is raised if an attribute is missing or incorrect.</span> <span class="sd"> """</span> <span class="n">attrs</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">attrs</span> <span class="n">ltype</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">attrs</span><span class="p">,</span> <span class="s">'NODE_TYPE'</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="n">ltypever</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">attrs</span><span class="p">,</span> <span class="s">'NODE_TYPE_VERSION'</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="k">if</span> <span class="n">ltype</span> <span class="o">!=</span> <span class="n">NodeType</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">"invalid type of node object: </span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">ltype</span><span class="p">,))</span> <span class="k">if</span> <span class="n">ltypever</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">NodeTypeVersions</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span> <span class="s">"unsupported type version of node object: </span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">ltypever</span><span class="p">,))</span> <span class="n">_checkAttributes</span> <span class="o">=</span> <span class="n">previous_api</span><span class="p">(</span><span class="n">_check_attributes</span><span class="p">)</span> <span class="k">def</span> <span class="nf">_append_zeros</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span> <span class="sd">"""_append_zeros(size) -> None. Appends a string of zeros.</span> <span class="sd"> Appends a string of 'size' zeros to the array,</span> <span class="sd"> without moving the file pointer.</span> <span class="sd"> """</span> <span class="c"># Appending an empty array would raise an error.</span> <span class="k">if</span> <span class="n">size</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> <span class="k">return</span> <span class="c"># XXX This may be redone to avoid a potentially large in-memory array.</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node</span><span class="o">.</span><span class="n">append</span><span class="p">(</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">(</span><span class="n">dtype</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_vtype</span><span class="p">,</span> <span class="n">shape</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_vshape</span><span class="p">(</span><span class="n">size</span><span class="p">)))</span> </div> <span class="k">class</span> <span class="nc">FileNodeMixin</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="sd">"""Mixin class for FileNode objects</span> <span class="sd"> It provides access to the attribute set of the node that becomes</span> <span class="sd"> available via the attrs property.</span> <span class="sd"> You can add attributes there, but try to avoid attribute names in all</span> <span class="sd"> caps or starting with '_', since they may clash with internal attributes.</span> <span class="sd"> """</span> <span class="c"># The attribute set property methods.</span> <span class="k">def</span> <span class="nf">_get_attrs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""Returns the attribute set of the file node."""</span> <span class="c">#sefl._checkClosed()</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node</span><span class="o">.</span><span class="n">attrs</span> <span class="n">getAttrs</span> <span class="o">=</span> <span class="n">previous_api</span><span class="p">(</span><span class="n">_get_attrs</span><span class="p">)</span> <span class="k">def</span> <span class="nf">_set_attrs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="sd">"""set_attrs(string) -> None. Raises ValueError."""</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">"changing the whole attribute set is not allowed"</span><span class="p">)</span> <span class="n">setAttrs</span> <span class="o">=</span> <span class="n">previous_api</span><span class="p">(</span><span class="n">_set_attrs</span><span class="p">)</span> <span class="k">def</span> <span class="nf">_del_attrs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""del_attrs() -> None. Raises ValueError."""</span> <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">"deleting the whole attribute set is not allowed"</span><span class="p">)</span> <span class="n">delAttrs</span> <span class="o">=</span> <span class="n">previous_api</span><span class="p">(</span><span class="n">_del_attrs</span><span class="p">)</span> <span class="c"># The attribute set property.</span> <span class="n">attrs</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span> <span class="n">_get_attrs</span><span class="p">,</span> <span class="n">_set_attrs</span><span class="p">,</span> <span class="n">_del_attrs</span><span class="p">,</span> <span class="s">"A property pointing to the attribute set of the file node."</span><span class="p">)</span> <div class="viewcode-block" id="ROFileNode"><a class="viewcode-back" href="../../../usersguide/libref/filenode_classes.html#tables.nodes.filenode.ROFileNode">[docs]</a><span class="k">class</span> <span class="nc">ROFileNode</span><span class="p">(</span><span class="n">FileNodeMixin</span><span class="p">,</span> <span class="n">RawPyTablesIO</span><span class="p">):</span> <span class="sd">"""Creates a new read-only file node.</span> <span class="sd"> Creates a new read-only file node associated with the specified</span> <span class="sd"> PyTables node, providing a standard Python file interface to it.</span> <span class="sd"> The node has to have been created on a previous occasion</span> <span class="sd"> using the new_node() function.</span> <span class="sd"> The node used as storage is also made available via the read-only</span> <span class="sd"> attribute node. Please do not tamper with this object if it's</span> <span class="sd"> avoidable, since you may break the operation of the file node object.</span> <span class="sd"> The constructor is not intended to be used directly.</span> <span class="sd"> Use the open_node() function in read-only mode ('r') instead.</span> <span class="sd"> :Version 1:</span> <span class="sd"> implements the file storage as a UInt8 uni-dimensional EArray.</span> <span class="sd"> :Version 2:</span> <span class="sd"> uses an UInt8 N vector EArray.</span> <span class="sd"> .. versionchanged:: 3.0</span> <span class="sd"> The offset attribute is no more available, please use seek/tell</span> <span class="sd"> methods instead.</span> <span class="sd"> .. versionchanged:: 3.0</span> <span class="sd"> The line_separator property is no more available.</span> <span class="sd"> The only line separator used for binary I/O is ``\\n``.</span> <span class="sd"> """</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span> <span class="n">RawPyTablesIO</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">,</span> <span class="s">'r'</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">_checkReadable</span><span class="p">()</span> <span class="nd">@property</span> <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node</span> </div> <div class="viewcode-block" id="RAFileNode"><a class="viewcode-back" href="../../../usersguide/libref/filenode_classes.html#tables.nodes.filenode.RAFileNode">[docs]</a><span class="k">class</span> <span class="nc">RAFileNode</span><span class="p">(</span><span class="n">FileNodeMixin</span><span class="p">,</span> <span class="n">RawPyTablesIO</span><span class="p">):</span> <span class="sd">"""Creates a new read-write file node.</span> <span class="sd"> The first syntax opens the specified PyTables node, while the</span> <span class="sd"> second one creates a new node in the specified PyTables file.</span> <span class="sd"> In the second case, additional named arguments 'where' and 'name'</span> <span class="sd"> must be passed to specify where the file node is to be created.</span> <span class="sd"> Other named arguments such as 'title' and 'filters' may also be</span> <span class="sd"> passed. The special named argument 'expectedsize', indicating an</span> <span class="sd"> estimate of the file size in bytes, may also be passed.</span> <span class="sd"> Write access means reading as well as appending data is allowed.</span> <span class="sd"> The node used as storage is also made available via the read-only</span> <span class="sd"> attribute node. Please do not tamper with this object if it's</span> <span class="sd"> avoidable, since you may break the operation of the file node object.</span> <span class="sd"> The constructor is not intended to be used directly.</span> <span class="sd"> Use the new_node() or open_node() functions instead.</span> <span class="sd"> :Version 1:</span> <span class="sd"> implements the file storage as a UInt8 uni-dimensional EArray.</span> <span class="sd"> :Version 2:</span> <span class="sd"> uses an UInt8 N vector EArray.</span> <span class="sd"> .. versionchanged:: 3.0</span> <span class="sd"> The offset attribute is no more available, please use seek/tell</span> <span class="sd"> methods instead.</span> <span class="sd"> .. versionchanged:: 3.0</span> <span class="sd"> The line_separator property is no more available.</span> <span class="sd"> The only line separator used for binary I/O is ``\\n``.</span> <span class="sd"> """</span> <span class="c"># The atom representing a byte in the array, for each version.</span> <span class="n">_byte_shape</span> <span class="o">=</span> <span class="p">[</span> <span class="bp">None</span><span class="p">,</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,),</span> <span class="p">]</span> <span class="n">__allowed_init_kwargs</span> <span class="o">=</span> <span class="p">[</span> <span class="s">'where'</span><span class="p">,</span> <span class="s">'name'</span><span class="p">,</span> <span class="s">'title'</span><span class="p">,</span> <span class="s">'filters'</span><span class="p">,</span> <span class="s">'expectedsize'</span><span class="p">]</span> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">,</span> <span class="n">h5file</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="k">if</span> <span class="n">node</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="c"># Open an existing node and get its version.</span> <span class="bp">self</span><span class="o">.</span><span class="n">_check_attributes</span><span class="p">(</span><span class="n">node</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">_version</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">attrs</span><span class="o">.</span><span class="n">NODE_TYPE_VERSION</span> <span class="k">elif</span> <span class="n">h5file</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="c"># Check for allowed keyword arguments,</span> <span class="c"># to avoid unwanted arguments falling through to array constructor.</span> <span class="k">for</span> <span class="n">kwarg</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="k">if</span> <span class="n">kwarg</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">__allowed_init_kwargs</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span> <span class="s">"</span><span class="si">%s</span><span class="s"> keyword argument is not allowed"</span> <span class="o">%</span> <span class="nb">repr</span><span class="p">(</span><span class="n">kwarg</span><span class="p">))</span> <span class="c"># Turn 'expectedsize' into 'expectedrows'.</span> <span class="k">if</span> <span class="s">'expectedsize'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="c"># These match since one byte is stored per row.</span> <span class="n">expectedrows</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'expectedsize'</span><span class="p">]</span> <span class="n">kwargs</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="k">del</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'expectedsize'</span><span class="p">]</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'expectedrows'</span><span class="p">]</span> <span class="o">=</span> <span class="n">expectedrows</span> <span class="c"># Create a new array in the specified PyTables file.</span> <span class="bp">self</span><span class="o">.</span><span class="n">_version</span> <span class="o">=</span> <span class="n">NodeTypeVersions</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="n">shape</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_byte_shape</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_version</span><span class="p">]</span> <span class="n">node</span> <span class="o">=</span> <span class="n">h5file</span><span class="o">.</span><span class="n">create_earray</span><span class="p">(</span> <span class="n">atom</span><span class="o">=</span><span class="n">tables</span><span class="o">.</span><span class="n">UInt8Atom</span><span class="p">(),</span> <span class="n">shape</span><span class="o">=</span><span class="n">shape</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="c"># Set the node attributes, else remove the array itself.</span> <span class="k">try</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_attributes</span><span class="p">(</span><span class="n">node</span><span class="p">)</span> <span class="k">except</span> <span class="ne">RuntimeError</span><span class="p">:</span> <span class="n">h5file</span><span class="o">.</span><span class="n">remove_node</span><span class="p">(</span><span class="n">kwargs</span><span class="p">[</span><span class="s">'where'</span><span class="p">],</span> <span class="n">kwargs</span><span class="p">[</span><span class="s">'name'</span><span class="p">])</span> <span class="k">raise</span> <span class="n">RawPyTablesIO</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">,</span> <span class="s">'a+'</span><span class="p">)</span> <span class="bp">self</span><span class="o">.</span><span class="n">_checkReadable</span><span class="p">()</span> <span class="bp">self</span><span class="o">.</span><span class="n">_checkWritable</span><span class="p">()</span> <span class="nd">@property</span> <span class="k">def</span> <span class="nf">node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_node</span> <span class="k">def</span> <span class="nf">_set_attributes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span> <span class="sd">"""_set_attributes(node) -> None. Adds file node-specific attributes.</span> <span class="sd"> Sets the system attributes 'NODE_TYPE' and 'NODE_TYPE_VERSION'</span> <span class="sd"> in the specified PyTables node (leaf).</span> <span class="sd"> """</span> <span class="n">attrs</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">attrs</span> <span class="n">attrs</span><span class="o">.</span><span class="n">NODE_TYPE</span> <span class="o">=</span> <span class="n">NodeType</span> <span class="n">attrs</span><span class="o">.</span><span class="n">NODE_TYPE_VERSION</span> <span class="o">=</span> <span class="n">NodeTypeVersions</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="n">_setAttributes</span> <span class="o">=</span> <span class="n">previous_api</span><span class="p">(</span><span class="n">_set_attributes</span><span class="p">)</span> </div> <div class="viewcode-block" id="new_node"><a class="viewcode-back" href="../../../usersguide/libref/filenode_classes.html#tables.nodes.filenode.new_node">[docs]</a><span class="k">def</span> <span class="nf">new_node</span><span class="p">(</span><span class="n">h5file</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="sd">"""Creates a new file node object in the specified PyTables file object.</span> <span class="sd"> Additional named arguments where and name must be passed to specify where</span> <span class="sd"> the file node is to be created. Other named arguments such as title and</span> <span class="sd"> filters may also be passed.</span> <span class="sd"> The special named argument expectedsize, indicating an estimate of the</span> <span class="sd"> file size in bytes, may also be passed. It returns the file node object.</span> <span class="sd"> """</span> <span class="k">return</span> <span class="n">RAFileNode</span><span class="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="n">h5file</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> </div> <span class="n">newNode</span> <span class="o">=</span> <span class="n">previous_api</span><span class="p">(</span><span class="n">new_node</span><span class="p">)</span> <div class="viewcode-block" id="open_node"><a class="viewcode-back" href="../../../usersguide/libref/filenode_classes.html#tables.nodes.filenode.open_node">[docs]</a><span class="k">def</span> <span class="nf">open_node</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s">'r'</span><span class="p">):</span> <span class="sd">"""Opens an existing file node.</span> <span class="sd"> Returns a file node object from the existing specified PyTables node.</span> <span class="sd"> If mode is not specified or it is 'r', the file can only be read,</span> <span class="sd"> and the pointer is positioned at the beginning of the file.</span> <span class="sd"> If mode is 'a+', the file can be read and appended, and the pointer</span> <span class="sd"> is positioned at the end of the file.</span> <span class="sd"> """</span> <span class="k">if</span> <span class="n">mode</span> <span class="o">==</span> <span class="s">'r'</span><span class="p">:</span> <span class="k">return</span> <span class="n">ROFileNode</span><span class="p">(</span><span class="n">node</span><span class="p">)</span> <span class="k">elif</span> <span class="n">mode</span> <span class="o">==</span> <span class="s">'a+'</span><span class="p">:</span> <span class="k">return</span> <span class="n">RAFileNode</span><span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">IOError</span><span class="p">(</span><span class="s">"invalid mode: </span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">mode</span><span class="p">,))</span> </div> <span class="n">openNode</span> <span class="o">=</span> <span class="n">previous_api</span><span class="p">(</span><span class="n">open_node</span><span class="p">)</span> <span class="c">## Local Variables:</span> <span class="c">## mode: python</span> <span class="c">## py-indent-offset: 4</span> <span class="c">## tab-width: 4</span> <span class="c">## End:</span> </pre></div> </div> </div> </div> <div class="sphinxsidebar"> <div class="sphinxsidebarwrapper"> <p class="logo"><a href="../../../index.html"> <img class="logo" src="../../../_static/logo-pytables-small.png" alt="Logo"/> </a></p> <div id="searchbox" style="display: none"> <h3>Quick search</h3> <form class="search" action="../../../search.html" method="get"> <input type="text" name="q" /> <input type="submit" value="Go" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> <p class="searchtip" style="font-size: 90%"> Enter search terms or a module, class or function name. </p> </div> <script type="text/javascript">$('#searchbox').show(0);</script> </div> </div> <div class="clearer"></div> </div> <div class="relbar-bottom"> <div class="related"> <h3>Navigation</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="../../../genindex.html" title="General Index" >index</a></li> <li class="right" > <a href="../../../py-modindex.html" title="Python Module Index" >modules</a> </li> <li class="right" > <a href="../../../np-modindex.html" title="Python Module Index" >modules</a> </li> <li><a href="../../../index.html">PyTables 3.0.0 documentation</a> »</li> <li><a href="../../index.html" >Module code</a> »</li> <li><a href="../../tables.html" >tables</a> »</li> </ul> </div> </div> <div class="footer"> © Copyright 2011-2013, PyTables maintainers. Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3. </div> <!-- cloud_sptheme 1.3 --> </body> </html>