Sophie

Sophie

distrib > Mageia > 4 > x86_64 > by-pkgid > 82fd441cd3f2a8bc33fc3ed41403eced > files > 1489

python-astropy-0.2.4-4.mga4.x86_64.rpm


<!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 &mdash; 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>
	 &raquo;
      </li>
      <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</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">&#39;register_reader&#39;</span><span class="p">,</span> <span class="s">&#39;register_writer&#39;</span><span class="p">,</span> <span class="s">&#39;register_identifier&#39;</span><span class="p">,</span>
           <span class="s">&#39;identify_format&#39;</span><span class="p">,</span> <span class="s">&#39;get_reader&#39;</span><span class="p">,</span> <span class="s">&#39;get_writer&#39;</span><span class="p">,</span> <span class="s">&#39;read&#39;</span><span class="p">,</span> <span class="s">&#39;write&#39;</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">&quot;&quot;&quot;</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">    &quot;&quot;&quot;</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">&#39;Reader for format {0!r} and class {1!r} is &#39;</span>
                        <span class="s">&#39;already defined&#39;</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">&quot;&quot;&quot;</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">    &quot;&quot;&quot;</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">&#39;Writer for format {0!r} and class {1!r} is &#39;</span>
                        <span class="s">&#39;already defined&#39;</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">&quot;&quot;&quot;</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">        &gt;&gt;&gt; def my_identifier(args, kwargs):</span>
<span class="sd">        ...     return (isinstance(args[0], basestring) and</span>
<span class="sd">        ...             args[0].endswith(&#39;.tbl&#39;))</span>
<span class="sd">        &gt;&gt;&gt; register_identifier(&#39;ipac&#39;, Table, my_identifier)</span>
<span class="sd">    &quot;&quot;&quot;</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">&#39;Identifier for format {0!r} and class {1!r} is &#39;</span>
                        <span class="s">&#39;already defined&#39;</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">&#39;No reader defined for format {0!r} and class &#39;</span>
                        <span class="s">&#39;{1!r}&#39;</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">&#39;No writer defined for format {0!r} and class &#39;</span>
                        <span class="s">&#39;{1!r}&#39;</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">&quot;&quot;&quot;</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">    &quot;&quot;&quot;</span>

    <span class="k">if</span> <span class="s">&#39;format&#39;</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">&#39;format&#39;</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">&#39;binary&#39;</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">&#39;read&#39;</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">&quot;reader should return a {0} instance&quot;</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">&quot;&quot;&quot;</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">    &quot;&quot;&quot;</span>

    <span class="k">if</span> <span class="s">&#39;format&#39;</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">&#39;format&#39;</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">&#39;write&#39;</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">&quot;&quot;&quot;</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 &#39;read&#39; or &#39;write&#39;.</span>
<span class="sd">    &quot;&quot;&quot;</span>

    <span class="k">if</span> <span class="n">mode</span> <span class="o">==</span> <span class="s">&#39;read&#39;</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">&#39;write&#39;</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">&quot;Format could not be identified. &quot;</span><span class="p">,</span>
            <span class="s">&quot;Valid formats are {0}&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
                <span class="s">&#39;, &#39;</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">&gt;</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">&quot;Format is ambiguous - options are: {0}&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
                <span class="s">&#39;, &#39;</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"> &nbsp;
    <a href="#">Back to Top</a></p>
  <p>
    &copy; Copyright 2011-2013, The Astropy Developers.<br/>
    Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3. &nbsp;
    Last built 22 Oct 2013. <br/>
  </p>
</footer>
  </body>
</html>