<!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.link — 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.link</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: November 25, 2009</span> <span class="c"># Author: Francesc Alted - faltet@pytables.com</span> <span class="c">#</span> <span class="c"># $Id$</span> <span class="c">#</span> <span class="c">########################################################################</span> <span class="sd">"""Create links in the HDF5 file.</span> <span class="sd">This module implements containers for soft and external links. Hard</span> <span class="sd">links doesn't need a container as such as they are the same as regular</span> <span class="sd">nodes (groups or leaves).</span> <span class="sd">Classes:</span> <span class="sd"> SoftLink</span> <span class="sd"> ExternalLink</span> <span class="sd">Functions:</span> <span class="sd">Misc variables:</span> <span class="sd">"""</span> <span class="kn">import</span> <span class="nn">os</span> <span class="kn">import</span> <span class="nn">tables</span> <span class="kn">as</span> <span class="nn">t</span> <span class="kn">from</span> <span class="nn">tables</span> <span class="kn">import</span> <span class="n">linkextension</span> <span class="kn">from</span> <span class="nn">tables.node</span> <span class="kn">import</span> <span class="n">Node</span> <span class="kn">from</span> <span class="nn">tables.utils</span> <span class="kn">import</span> <span class="n">lazyattr</span> <span class="kn">from</span> <span class="nn">tables.attributeset</span> <span class="kn">import</span> <span class="n">AttributeSet</span> <span class="kn">import</span> <span class="nn">tables.file</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="p">,</span> <span class="n">previous_api_property</span> <span class="k">def</span> <span class="nf">_g_get_link_class</span><span class="p">(</span><span class="n">parent_id</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span> <span class="sd">"""Guess the link class."""</span> <span class="k">return</span> <span class="n">linkextension</span><span class="o">.</span><span class="n">_get_link_class</span><span class="p">(</span><span class="n">parent_id</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span> <span class="n">_g_getLinkClass</span> <span class="o">=</span> <span class="n">previous_api</span><span class="p">(</span><span class="n">_g_get_link_class</span><span class="p">)</span> <div class="viewcode-block" id="Link"><a class="viewcode-back" href="../../usersguide/libref/link_classes.html#tables.link.Link">[docs]</a><span class="k">class</span> <span class="nc">Link</span><span class="p">(</span><span class="n">Node</span><span class="p">):</span> <span class="sd">"""Abstract base class for all PyTables links.</span> <span class="sd"> A link is a node that refers to another node. The Link class inherits from</span> <span class="sd"> Node class and the links that inherits from Link are SoftLink and</span> <span class="sd"> ExternalLink. There is not a HardLink subclass because hard links behave</span> <span class="sd"> like a regular Group or Leaf. Contrarily to other nodes, links cannot have</span> <span class="sd"> HDF5 attributes. This is an HDF5 library limitation that might be solved</span> <span class="sd"> in future releases.</span> <span class="sd"> See :ref:`LinksTutorial` for a small tutorial on how to work with links.</span> <span class="sd"> .. rubric:: Link attributes</span> <span class="sd"> .. attribute:: target</span> <span class="sd"> The path string to the pointed node.</span> <span class="sd"> """</span> <span class="c"># Properties</span> <span class="nd">@lazyattr</span> <div class="viewcode-block" id="Link._v_attrs"><a class="viewcode-back" href="../../usersguide/libref/link_classes.html#tables.link.Link._v_attrs">[docs]</a> <span class="k">def</span> <span class="nf">_v_attrs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> A *NoAttrs* instance replacing the typical *AttributeSet* instance of</span> <span class="sd"> other node objects. The purpose of *NoAttrs* is to make clear that</span> <span class="sd"> HDF5 attributes are not supported in link nodes.</span> <span class="sd"> """</span> <span class="k">class</span> <span class="nc">NoAttrs</span><span class="p">(</span><span class="n">AttributeSet</span><span class="p">):</span> <span class="k">def</span> <span class="nf">__getattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span> <span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="s">"you cannot get attributes from this "</span> <span class="s">"`</span><span class="si">%s</span><span class="s">` instance"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__name__</span><span class="p">)</span> <span class="k">def</span> <span class="nf">__setattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> <span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="s">"you cannot set attributes to this "</span> <span class="s">"`</span><span class="si">%s</span><span class="s">` instance"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__name__</span><span class="p">)</span> <span class="k">def</span> <span class="nf">_g_close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">pass</span> <span class="k">return</span> <span class="n">NoAttrs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> </div> <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">parentnode</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">_log</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">_v_new</span> <span class="o">=</span> <span class="n">target</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="o">=</span> <span class="n">target</span> <span class="sd">"""The path string to the pointed node."""</span> <span class="nb">super</span><span class="p">(</span><span class="n">Link</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="n">parentnode</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">_log</span><span class="p">)</span> <span class="c"># Public and tailored versions for copy, move, rename and remove methods</span> <div class="viewcode-block" id="Link.copy"><a class="viewcode-back" href="../../usersguide/libref/link_classes.html#tables.link.Link.copy">[docs]</a> <span class="k">def</span> <span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">newparent</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">newname</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">overwrite</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span> <span class="n">createparents</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span> <span class="sd">"""Copy this link and return the new one.</span> <span class="sd"> See :meth:`Node._f_copy` for a complete explanation of the arguments.</span> <span class="sd"> Please note that there is no recursive flag since links do not have</span> <span class="sd"> child nodes.</span> <span class="sd"> """</span> <span class="n">newnode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_f_copy</span><span class="p">(</span><span class="n">newparent</span><span class="o">=</span><span class="n">newparent</span><span class="p">,</span> <span class="n">newname</span><span class="o">=</span><span class="n">newname</span><span class="p">,</span> <span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">,</span> <span class="n">createparents</span><span class="o">=</span><span class="n">createparents</span><span class="p">)</span> <span class="c"># Insert references to a `newnode` via `newname`</span> <span class="n">newnode</span><span class="o">.</span><span class="n">_v_parent</span><span class="o">.</span><span class="n">_g_refnode</span><span class="p">(</span><span class="n">newnode</span><span class="p">,</span> <span class="n">newname</span><span class="p">,</span> <span class="bp">True</span><span class="p">)</span> <span class="k">return</span> <span class="n">newnode</span> </div> <div class="viewcode-block" id="Link.move"><a class="viewcode-back" href="../../usersguide/libref/link_classes.html#tables.link.Link.move">[docs]</a> <span class="k">def</span> <span class="nf">move</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">newparent</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">newname</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">overwrite</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span> <span class="sd">"""Move or rename this link.</span> <span class="sd"> See :meth:`Node._f_move` for a complete explanation of the arguments.</span> <span class="sd"> """</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_f_move</span><span class="p">(</span><span class="n">newparent</span><span class="o">=</span><span class="n">newparent</span><span class="p">,</span> <span class="n">newname</span><span class="o">=</span><span class="n">newname</span><span class="p">,</span> <span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">)</span> </div> <div class="viewcode-block" id="Link.remove"><a class="viewcode-back" href="../../usersguide/libref/link_classes.html#tables.link.Link.remove">[docs]</a> <span class="k">def</span> <span class="nf">remove</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""Remove this link from the hierarchy."""</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_f_remove</span><span class="p">()</span> </div> <div class="viewcode-block" id="Link.rename"><a class="viewcode-back" href="../../usersguide/libref/link_classes.html#tables.link.Link.rename">[docs]</a> <span class="k">def</span> <span class="nf">rename</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">newname</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">overwrite</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span> <span class="sd">"""Rename this link in place.</span> <span class="sd"> See :meth:`Node._f_rename` for a complete explanation of the arguments.</span> <span class="sd"> """</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_f_rename</span><span class="p">(</span><span class="n">newname</span><span class="o">=</span><span class="n">newname</span><span class="p">,</span> <span class="n">overwrite</span><span class="o">=</span><span class="n">overwrite</span><span class="p">)</span> </div> <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> </div> <div class="viewcode-block" id="SoftLink"><a class="viewcode-back" href="../../usersguide/libref/link_classes.html#tables.link.SoftLink">[docs]</a><span class="k">class</span> <span class="nc">SoftLink</span><span class="p">(</span><span class="n">linkextension</span><span class="o">.</span><span class="n">SoftLink</span><span class="p">,</span> <span class="n">Link</span><span class="p">):</span> <span class="sd">"""Represents a soft link (aka symbolic link).</span> <span class="sd"> A soft link is a reference to another node in the *same* file hierarchy.</span> <span class="sd"> Getting access to the pointed node (this action is called *dereferrencing*)</span> <span class="sd"> is done via the __call__ special method (see below).</span> <span class="sd"> """</span> <span class="c"># Class identifier.</span> <span class="n">_c_classid</span> <span class="o">=</span> <span class="s">'SOFTLINK'</span> <span class="n">_c_classId</span> <span class="o">=</span> <span class="n">previous_api_property</span><span class="p">(</span><span class="s">'_c_classid'</span><span class="p">)</span> <div class="viewcode-block" id="SoftLink.__call__"><a class="viewcode-back" href="../../usersguide/libref/link_classes.html#tables.link.SoftLink.__call__">[docs]</a> <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""Dereference `self.target` and return the object.</span> <span class="sd"> Examples</span> <span class="sd"> --------</span> <span class="sd"> ::</span> <span class="sd"> >>> f=tables.open_file('data/test.h5')</span> <span class="sd"> >>> print f.root.link0</span> <span class="sd"> /link0 (SoftLink) -> /another/path</span> <span class="sd"> >>> print f.root.link0()</span> <span class="sd"> /another/path (Group) ''</span> <span class="sd"> """</span> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="c"># Check for relative pathnames</span> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">'/'</span><span class="p">):</span> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_v_parent</span><span class="o">.</span><span class="n">_g_join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">)</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_v_file</span><span class="o">.</span><span class="n">_get_node</span><span class="p">(</span><span class="n">target</span><span class="p">)</span> </div> <div class="viewcode-block" id="SoftLink.__str__"><a class="viewcode-back" href="../../usersguide/libref/link_classes.html#tables.link.SoftLink.__str__">[docs]</a> <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""Return a short string representation of the link.</span> <span class="sd"> Examples</span> <span class="sd"> --------</span> <span class="sd"> ::</span> <span class="sd"> >>> f=tables.open_file('data/test.h5')</span> <span class="sd"> >>> print f.root.link0</span> <span class="sd"> /link0 (SoftLink) -> /path/to/node</span> <span class="sd"> """</span> <span class="n">classname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__name__</span> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span> <span class="c"># Check for relative pathnames</span> <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">'/'</span><span class="p">):</span> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_v_parent</span><span class="o">.</span><span class="n">_g_join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">)</span> <span class="k">if</span> <span class="n">target</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_v_file</span><span class="p">:</span> <span class="n">dangling</span> <span class="o">=</span> <span class="s">""</span> <span class="k">else</span><span class="p">:</span> <span class="n">dangling</span> <span class="o">=</span> <span class="s">" (dangling)"</span> <span class="k">return</span> <span class="s">"</span><span class="si">%s</span><span class="s"> (</span><span class="si">%s</span><span class="s">) -> </span><span class="si">%s%s</span><span class="s">"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_v_pathname</span><span class="p">,</span> <span class="n">classname</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="p">,</span> <span class="n">dangling</span><span class="p">)</span> </div></div> <div class="viewcode-block" id="ExternalLink"><a class="viewcode-back" href="../../usersguide/libref/link_classes.html#tables.link.ExternalLink">[docs]</a><span class="k">class</span> <span class="nc">ExternalLink</span><span class="p">(</span><span class="n">linkextension</span><span class="o">.</span><span class="n">ExternalLink</span><span class="p">,</span> <span class="n">Link</span><span class="p">):</span> <span class="sd">"""Represents an external link.</span> <span class="sd"> An external link is a reference to a node in *another* file.</span> <span class="sd"> Getting access to the pointed node (this action is called</span> <span class="sd"> *dereferencing*) is done via the :meth:`__call__` special method</span> <span class="sd"> (see below).</span> <span class="sd"> .. rubric:: ExternalLink attributes</span> <span class="sd"> .. attribute:: extfile</span> <span class="sd"> The external file handler, if the link has been dereferenced.</span> <span class="sd"> In case the link has not been dereferenced yet, its value is</span> <span class="sd"> None.</span> <span class="sd"> """</span> <span class="c"># Class identifier.</span> <span class="n">_c_classid</span> <span class="o">=</span> <span class="s">'EXTERNALLINK'</span> <span class="n">_c_classId</span> <span class="o">=</span> <span class="n">previous_api_property</span><span class="p">(</span><span class="s">'_c_classid'</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">parentnode</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">_log</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span> <span class="bp">self</span><span class="o">.</span><span class="n">extfile</span> <span class="o">=</span> <span class="bp">None</span> <span class="sd">"""The external file handler, if the link has been dereferenced.</span> <span class="sd"> In case the link has not been dereferenced yet, its value is</span> <span class="sd"> None."""</span> <span class="nb">super</span><span class="p">(</span><span class="n">ExternalLink</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="n">parentnode</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="n">_log</span><span class="p">)</span> <span class="k">def</span> <span class="nf">_get_filename_node</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""Return the external filename and nodepath from `self.target`."""</span> <span class="c"># This is needed for avoiding the 'C:\\file.h5' filepath notation</span> <span class="n">filename</span><span class="p">,</span> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">':/'</span><span class="p">)</span> <span class="k">return</span> <span class="n">filename</span><span class="p">,</span> <span class="s">'/'</span> <span class="o">+</span> <span class="n">target</span> <div class="viewcode-block" id="ExternalLink.__call__"><a class="viewcode-back" href="../../usersguide/libref/link_classes.html#tables.link.ExternalLink.__call__">[docs]</a> <span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="sd">"""Dereference self.target and return the object.</span> <span class="sd"> You can pass all the arguments supported by the :func:`open_file`</span> <span class="sd"> function (except filename, of course) so as to open the referenced</span> <span class="sd"> external file.</span> <span class="sd"> Examples</span> <span class="sd"> --------</span> <span class="sd"> ::</span> <span class="sd"> >>> f=tables.open_file('data1/test1.h5')</span> <span class="sd"> >>> print f.root.link2</span> <span class="sd"> /link2 (ExternalLink) -> data2/test2.h5:/path/to/node</span> <span class="sd"> >>> plink2 = f.root.link2('a') # open in 'a'ppend mode</span> <span class="sd"> >>> print plink2</span> <span class="sd"> /path/to/node (Group) ''</span> <span class="sd"> >>> print plink2._v_filename</span> <span class="sd"> 'data2/test2.h5' # belongs to referenced file</span> <span class="sd"> """</span> <span class="n">filename</span><span class="p">,</span> <span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_filename_node</span><span class="p">()</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isabs</span><span class="p">(</span><span class="n">filename</span><span class="p">):</span> <span class="c"># Resolve the external link with respect to the this</span> <span class="c"># file's directory. See #306.</span> <span class="n">base_directory</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_v_file</span><span class="o">.</span><span class="n">filename</span><span class="p">)</span> <span class="n">filename</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">base_directory</span><span class="p">,</span> <span class="n">filename</span><span class="p">)</span> <span class="c"># Fetch the external file and save a reference to it.</span> <span class="c"># Check first in already opened files.</span> <span class="n">open_files</span> <span class="o">=</span> <span class="n">tables</span><span class="o">.</span><span class="n">file</span><span class="o">.</span><span class="n">_open_files</span> <span class="k">if</span> <span class="n">filename</span> <span class="ow">in</span> <span class="n">open_files</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">extfile</span> <span class="o">=</span> <span class="n">open_files</span><span class="p">[</span><span class="n">filename</span><span class="p">]</span> <span class="k">else</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">extfile</span> <span class="o">=</span> <span class="n">t</span><span class="o">.</span><span class="n">open_file</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">extfile</span><span class="o">.</span><span class="n">_get_node</span><span class="p">(</span><span class="n">target</span><span class="p">)</span> </div> <div class="viewcode-block" id="ExternalLink.umount"><a class="viewcode-back" href="../../usersguide/libref/link_classes.html#tables.link.ExternalLink.umount">[docs]</a> <span class="k">def</span> <span class="nf">umount</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""Safely unmount self.extfile, if opened."""</span> <span class="n">extfile</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">extfile</span> <span class="c"># Close external file, if open</span> <span class="k">if</span> <span class="n">extfile</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">extfile</span><span class="o">.</span><span class="n">isopen</span><span class="p">:</span> <span class="n">extfile</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> <span class="bp">self</span><span class="o">.</span><span class="n">extfile</span> <span class="o">=</span> <span class="bp">None</span> </div> <span class="k">def</span> <span class="nf">_f_close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""Especific close for external links."""</span> <span class="bp">self</span><span class="o">.</span><span class="n">umount</span><span class="p">()</span> <span class="nb">super</span><span class="p">(</span><span class="n">ExternalLink</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">_f_close</span><span class="p">()</span> <div class="viewcode-block" id="ExternalLink.__str__"><a class="viewcode-back" href="../../usersguide/libref/link_classes.html#tables.link.ExternalLink.__str__">[docs]</a> <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""Return a short string representation of the link.</span> <span class="sd"> Examples</span> <span class="sd"> --------</span> <span class="sd"> ::</span> <span class="sd"> >>> f=tables.open_file('data1/test1.h5')</span> <span class="sd"> >>> print f.root.link2</span> <span class="sd"> /link2 (ExternalLink) -> data2/test2.h5:/path/to/node</span> <span class="sd"> """</span> <span class="n">classname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__name__</span> <span class="k">return</span> <span class="s">"</span><span class="si">%s</span><span class="s"> (</span><span class="si">%s</span><span class="s">) -> </span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_v_pathname</span><span class="p">,</span> <span class="n">classname</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">target</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">## fill-column: 72</span> <span class="c">## End:</span></div></div> </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>