<!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>astropy.io.registry — Astropy v0.2.4</title> <link rel="stylesheet" href="../../../_static/bootstrap-astropy.css" type="text/css" /> <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../../../', VERSION: '0.2.4', 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/sidebar.js"></script> <link rel="shortcut icon" href="../../../_static/astropy_logo.ico"/> <link rel="top" title="Astropy v0.2.4" href="../../../index.html" /> <link rel="up" title="Module code" href="../../index.html" /> </head> <body> <div class="topbar"> <a class="brand" title="Documentation Home" href="../../../index.html"></a> <ul> <li><a class="homelink" title="AstroPy Homepage" href="http://www.astropy.org"></a></li> <li><a title="General Index" href="../../../genindex.html">Index</a></li> <li><a title="Python Module Index" href="../../../py-modindex.html">Modules</a></li> <li> <form action="../../../search.html" method="get"> <input type="text" name="q" placeholder="Search" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> </li> </ul> </div> <div class="related"> <h3>Navigation</h3> <ul> <li> <a href="../../../index.html">Astropy v0.2.4</a> » </li> <li><a href="../../index.html" accesskey="U">Module code</a> »</li> </ul> </div> <div class="document"> <div class="documentwrapper"> <div class="bodywrapper"> <div class="body"> <h1>Source code for astropy.io.registry</h1><div class="highlight"><pre> <span class="c"># Licensed under a 3-clause BSD style license - see LICENSE.rst</span> <span class="kn">import</span> <span class="nn">sys</span> <span class="kn">from</span> <span class="nn">..utils</span> <span class="kn">import</span> <span class="n">OrderedDict</span> <span class="n">__all__</span> <span class="o">=</span> <span class="p">[</span><span class="s">'register_reader'</span><span class="p">,</span> <span class="s">'register_writer'</span><span class="p">,</span> <span class="s">'register_identifier'</span><span class="p">,</span> <span class="s">'identify_format'</span><span class="p">,</span> <span class="s">'get_reader'</span><span class="p">,</span> <span class="s">'get_writer'</span><span class="p">,</span> <span class="s">'read'</span><span class="p">,</span> <span class="s">'write'</span><span class="p">]</span> <span class="n">_readers</span> <span class="o">=</span> <span class="n">OrderedDict</span><span class="p">()</span> <span class="n">_writers</span> <span class="o">=</span> <span class="n">OrderedDict</span><span class="p">()</span> <span class="n">_identifiers</span> <span class="o">=</span> <span class="n">OrderedDict</span><span class="p">()</span> <div class="viewcode-block" id="register_reader"><a class="viewcode-back" href="../../../_generated/astropy.io.registry.register_reader.html#astropy.io.registry.register_reader">[docs]</a><span class="k">def</span> <span class="nf">register_reader</span><span class="p">(</span><span class="n">data_format</span><span class="p">,</span> <span class="n">data_class</span><span class="p">,</span> <span class="n">function</span><span class="p">,</span> <span class="n">force</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Register a reader function.</span> <span class="sd"> Parameters</span> <span class="sd"> ----------</span> <span class="sd"> data_format : string</span> <span class="sd"> The data type identifier. This is the string that will be used to</span> <span class="sd"> specify the data type when reading.</span> <span class="sd"> data_class : classobj</span> <span class="sd"> The class of the object that the reader produces</span> <span class="sd"> function : function</span> <span class="sd"> The function to read in a data object.</span> <span class="sd"> force : bool</span> <span class="sd"> Whether to override any existing function if already present.</span> <span class="sd"> """</span> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">data_format</span><span class="p">,</span> <span class="n">data_class</span><span class="p">)</span> <span class="ow">in</span> <span class="n">_readers</span> <span class="ow">or</span> <span class="n">force</span><span class="p">:</span> <span class="n">_readers</span><span class="p">[(</span><span class="n">data_format</span><span class="p">,</span> <span class="n">data_class</span><span class="p">)]</span> <span class="o">=</span> <span class="n">function</span> <span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s">'Reader for format {0!r} and class {1!r} is '</span> <span class="s">'already defined'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">data_format</span><span class="p">,</span> <span class="n">data_class</span><span class="o">.</span><span class="n">__name__</span><span class="p">))</span> </div> <div class="viewcode-block" id="register_writer"><a class="viewcode-back" href="../../../_generated/astropy.io.registry.register_writer.html#astropy.io.registry.register_writer">[docs]</a><span class="k">def</span> <span class="nf">register_writer</span><span class="p">(</span><span class="n">data_format</span><span class="p">,</span> <span class="n">data_class</span><span class="p">,</span> <span class="n">function</span><span class="p">,</span> <span class="n">force</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Register a table writer function.</span> <span class="sd"> Parameters</span> <span class="sd"> ----------</span> <span class="sd"> data_format : string</span> <span class="sd"> The data type identifier. This is the string that will be used to</span> <span class="sd"> specify the data type when writing.</span> <span class="sd"> data_class : classobj</span> <span class="sd"> The class of the object that can be written</span> <span class="sd"> function : function</span> <span class="sd"> The function to write out a data object.</span> <span class="sd"> force : bool</span> <span class="sd"> Whether to override any existing function if already present.</span> <span class="sd"> """</span> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">data_format</span><span class="p">,</span> <span class="n">data_class</span><span class="p">)</span> <span class="ow">in</span> <span class="n">_writers</span> <span class="ow">or</span> <span class="n">force</span><span class="p">:</span> <span class="n">_writers</span><span class="p">[(</span><span class="n">data_format</span><span class="p">,</span> <span class="n">data_class</span><span class="p">)]</span> <span class="o">=</span> <span class="n">function</span> <span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s">'Writer for format {0!r} and class {1!r} is '</span> <span class="s">'already defined'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">data_format</span><span class="p">,</span> <span class="n">data_class</span><span class="o">.</span><span class="n">__name__</span><span class="p">))</span> </div> <div class="viewcode-block" id="register_identifier"><a class="viewcode-back" href="../../../_generated/astropy.io.registry.register_identifier.html#astropy.io.registry.register_identifier">[docs]</a><span class="k">def</span> <span class="nf">register_identifier</span><span class="p">(</span><span class="n">data_format</span><span class="p">,</span> <span class="n">data_class</span><span class="p">,</span> <span class="n">identifier</span><span class="p">,</span> <span class="n">force</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Associate an identifier function with a specific data type.</span> <span class="sd"> Parameters</span> <span class="sd"> ----------</span> <span class="sd"> data_format : str</span> <span class="sd"> The data type identifier. This is the string that is used to</span> <span class="sd"> specify the data type when reading/writing.</span> <span class="sd"> data_class : classobj</span> <span class="sd"> The class of the object that can be written</span> <span class="sd"> identifier : function</span> <span class="sd"> A function that checks the argument specified to `read` or `write` to</span> <span class="sd"> determine whether the input can be interpreted as a table of type</span> <span class="sd"> `data_format`. This function should take two arguments, which will be</span> <span class="sd"> set to the list of arguments and a dictionary of keyword arguments</span> <span class="sd"> passed to `read` or `write`. The function should return True if the</span> <span class="sd"> input can be identified as being of format `data_format`, and False</span> <span class="sd"> otherwise.</span> <span class="sd"> force : bool</span> <span class="sd"> Whether to override any existing function if already present.</span> <span class="sd"> Examples</span> <span class="sd"> --------</span> <span class="sd"> To set the identifier based on extensions, for formats that take a</span> <span class="sd"> filename as a first argument, you can do for example::</span> <span class="sd"> >>> def my_identifier(args, kwargs):</span> <span class="sd"> ... return (isinstance(args[0], basestring) and</span> <span class="sd"> ... args[0].endswith('.tbl'))</span> <span class="sd"> >>> register_identifier('ipac', Table, my_identifier)</span> <span class="sd"> """</span> <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">data_format</span><span class="p">,</span> <span class="n">data_class</span><span class="p">)</span> <span class="ow">in</span> <span class="n">_identifiers</span> <span class="ow">or</span> <span class="n">force</span><span class="p">:</span> <span class="n">_identifiers</span><span class="p">[(</span><span class="n">data_format</span><span class="p">,</span> <span class="n">data_class</span><span class="p">)]</span> <span class="o">=</span> <span class="n">identifier</span> <span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s">'Identifier for format {0!r} and class {1!r} is '</span> <span class="s">'already defined'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">data_format</span><span class="p">,</span> <span class="n">data_class</span><span class="o">.</span><span class="n">__name__</span><span class="p">))</span> </div> <div class="viewcode-block" id="identify_format"><a class="viewcode-back" href="../../../_generated/astropy.io.registry.identify_format.html#astropy.io.registry.identify_format">[docs]</a><span class="k">def</span> <span class="nf">identify_format</span><span class="p">(</span><span class="n">origin</span><span class="p">,</span> <span class="n">data_class_required</span><span class="p">,</span> <span class="n">fileobj</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">):</span> <span class="c"># Loop through identifiers to see which formats match</span> <span class="n">valid_formats</span> <span class="o">=</span> <span class="p">[]</span> <span class="k">for</span> <span class="n">data_format</span><span class="p">,</span> <span class="n">data_class</span> <span class="ow">in</span> <span class="n">_identifiers</span><span class="p">:</span> <span class="k">if</span> <span class="n">data_class</span> <span class="ow">is</span> <span class="n">data_class_required</span><span class="p">:</span> <span class="c"># We try first with the fileobj, and failing that with the</span> <span class="c"># original arguments</span> <span class="k">if</span> <span class="p">(</span><span class="n">fileobj</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">_identifiers</span><span class="p">[(</span><span class="n">data_format</span><span class="p">,</span> <span class="n">data_class</span><span class="p">)](</span> <span class="n">origin</span><span class="p">,</span> <span class="p">[</span><span class="n">fileobj</span><span class="p">]</span> <span class="o">+</span> <span class="nb">list</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:]),</span> <span class="n">kwargs</span><span class="p">)):</span> <span class="n">valid_formats</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">data_format</span><span class="p">,</span> <span class="p">[</span><span class="n">fileobj</span><span class="p">]</span> <span class="o">+</span> <span class="nb">list</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:])))</span> <span class="k">elif</span> <span class="n">_identifiers</span><span class="p">[(</span><span class="n">data_format</span><span class="p">,</span> <span class="n">data_class</span><span class="p">)](</span> <span class="n">origin</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">):</span> <span class="n">valid_formats</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">data_format</span><span class="p">,</span> <span class="n">args</span><span class="p">))</span> <span class="k">return</span> <span class="n">valid_formats</span> </div> <div class="viewcode-block" id="get_reader"><a class="viewcode-back" href="../../../_generated/astropy.io.registry.get_reader.html#astropy.io.registry.get_reader">[docs]</a><span class="k">def</span> <span class="nf">get_reader</span><span class="p">(</span><span class="n">data_format</span><span class="p">,</span> <span class="n">data_class</span><span class="p">):</span> <span class="k">if</span> <span class="p">(</span><span class="n">data_format</span><span class="p">,</span> <span class="n">data_class</span><span class="p">)</span> <span class="ow">in</span> <span class="n">_readers</span><span class="p">:</span> <span class="k">return</span> <span class="n">_readers</span><span class="p">[(</span><span class="n">data_format</span><span class="p">,</span> <span class="n">data_class</span><span class="p">)]</span> <span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s">'No reader defined for format {0!r} and class '</span> <span class="s">'{1!r}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">data_format</span><span class="p">,</span> <span class="n">data_class</span><span class="o">.</span><span class="n">__name__</span><span class="p">))</span> </div> <div class="viewcode-block" id="get_writer"><a class="viewcode-back" href="../../../_generated/astropy.io.registry.get_writer.html#astropy.io.registry.get_writer">[docs]</a><span class="k">def</span> <span class="nf">get_writer</span><span class="p">(</span><span class="n">data_format</span><span class="p">,</span> <span class="n">data_class</span><span class="p">):</span> <span class="k">if</span> <span class="p">(</span><span class="n">data_format</span><span class="p">,</span> <span class="n">data_class</span><span class="p">)</span> <span class="ow">in</span> <span class="n">_writers</span><span class="p">:</span> <span class="k">return</span> <span class="n">_writers</span><span class="p">[(</span><span class="n">data_format</span><span class="p">,</span> <span class="n">data_class</span><span class="p">)]</span> <span class="k">else</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s">'No writer defined for format {0!r} and class '</span> <span class="s">'{1!r}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">data_format</span><span class="p">,</span> <span class="n">data_class</span><span class="o">.</span><span class="n">__name__</span><span class="p">))</span> </div> <div class="viewcode-block" id="read"><a class="viewcode-back" href="../../../_generated/astropy.io.registry.read.html#astropy.io.registry.read">[docs]</a><span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Read in data</span> <span class="sd"> The arguments passed to this method depend on the format</span> <span class="sd"> """</span> <span class="k">if</span> <span class="s">'format'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="n">format</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">'format'</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="n">format</span> <span class="o">=</span> <span class="bp">None</span> <span class="n">fileobj</span> <span class="o">=</span> <span class="bp">None</span> <span class="n">ctx</span> <span class="o">=</span> <span class="bp">None</span> <span class="k">try</span><span class="p">:</span> <span class="k">if</span> <span class="n">format</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="p">(</span><span class="nb">bytes</span><span class="p">,</span> <span class="nb">unicode</span><span class="p">)):</span> <span class="kn">from</span> <span class="nn">..utils.data</span> <span class="kn">import</span> <span class="n">get_readable_fileobj</span> <span class="k">try</span><span class="p">:</span> <span class="n">ctx</span> <span class="o">=</span> <span class="n">get_readable_fileobj</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">encoding</span><span class="o">=</span><span class="s">'binary'</span><span class="p">)</span> <span class="n">fileobj</span> <span class="o">=</span> <span class="n">ctx</span><span class="o">.</span><span class="n">__enter__</span><span class="p">()</span> <span class="k">except</span><span class="p">:</span> <span class="n">ctx</span> <span class="o">=</span> <span class="bp">None</span> <span class="n">fileobj</span> <span class="o">=</span> <span class="bp">None</span> <span class="n">format</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">_get_valid_format</span><span class="p">(</span><span class="s">'read'</span><span class="p">,</span> <span class="n">cls</span><span class="p">,</span> <span class="n">fileobj</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="n">reader</span> <span class="o">=</span> <span class="n">get_reader</span><span class="p">(</span><span class="n">format</span><span class="p">,</span> <span class="n">cls</span><span class="p">)</span> <span class="k">if</span> <span class="n">fileobj</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="n">fileobj</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="n">table</span> <span class="o">=</span> <span class="n">reader</span><span class="p">(</span><span class="o">*</span><span class="n">args</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="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">table</span><span class="p">,</span> <span class="n">cls</span><span class="p">):</span> <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span> <span class="s">"reader should return a {0} instance"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">cls</span><span class="o">.</span><span class="n">__name__</span><span class="p">))</span> <span class="k">finally</span><span class="p">:</span> <span class="k">if</span> <span class="n">ctx</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> <span class="n">ctx</span><span class="o">.</span><span class="n">__exit__</span><span class="p">(</span><span class="o">*</span><span class="n">sys</span><span class="o">.</span><span class="n">exc_info</span><span class="p">())</span> <span class="k">return</span> <span class="n">table</span> </div> <div class="viewcode-block" id="write"><a class="viewcode-back" href="../../../_generated/astropy.io.registry.write.html#astropy.io.registry.write">[docs]</a><span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Write out data</span> <span class="sd"> The arguments passed to this method depend on the format</span> <span class="sd"> """</span> <span class="k">if</span> <span class="s">'format'</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span> <span class="n">format</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">'format'</span><span class="p">)</span> <span class="k">else</span><span class="p">:</span> <span class="n">format</span> <span class="o">=</span> <span class="bp">None</span> <span class="k">if</span> <span class="n">format</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> <span class="n">format</span><span class="p">,</span> <span class="n">args</span> <span class="o">=</span> <span class="n">_get_valid_format</span><span class="p">(</span><span class="s">'write'</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">__class__</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="n">writer</span> <span class="o">=</span> <span class="n">get_writer</span><span class="p">(</span><span class="n">format</span><span class="p">,</span> <span class="n">data</span><span class="o">.</span><span class="n">__class__</span><span class="p">)</span> <span class="n">writer</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> </div> <span class="k">def</span> <span class="nf">_get_valid_format</span><span class="p">(</span><span class="n">mode</span><span class="p">,</span> <span class="n">cls</span><span class="p">,</span> <span class="n">fileobj</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Returns the first valid format that can be used to read/write the data in</span> <span class="sd"> question. Mode can be either 'read' or 'write'.</span> <span class="sd"> """</span> <span class="k">if</span> <span class="n">mode</span> <span class="o">==</span> <span class="s">'read'</span><span class="p">:</span> <span class="n">funcs</span> <span class="o">=</span> <span class="n">_readers</span> <span class="k">elif</span> <span class="n">mode</span> <span class="o">==</span> <span class="s">'write'</span><span class="p">:</span> <span class="n">funcs</span> <span class="o">=</span> <span class="n">_writers</span> <span class="n">valid_formats</span> <span class="o">=</span> <span class="n">identify_format</span><span class="p">(</span><span class="n">mode</span><span class="p">,</span> <span class="n">cls</span><span class="p">,</span> <span class="n">fileobj</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">)</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">valid_formats</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span> <span class="s">"Format could not be identified. "</span><span class="p">,</span> <span class="s">"Valid formats are {0}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span> <span class="s">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">r</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">funcs</span><span class="p">))))</span> <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">valid_formats</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span> <span class="s">"Format is ambiguous - options are: {0}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span> <span class="s">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">valid_formats</span><span class="p">))))</span> <span class="k">return</span> <span class="n">valid_formats</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> </pre></div> </div> </div> </div> <div class="sphinxsidebar"> <div class="sphinxsidebarwrapper"><h3>Page Contents</h3> </div> </div> <div class="clearer"></div> </div> <footer class="footer"> <p class="pull-right"> <a href="#">Back to Top</a></p> <p> © Copyright 2011-2013, The Astropy Developers.<br/> Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3. Last built 22 Oct 2013. <br/> </p> </footer> </body> </html>