source: sasview/_modules/sas/dataloader/loader.html @ a462c6a

gh-pages
Last change on this file since a462c6a was a462c6a, checked in by ajj, 9 years ago

Rebuild to fix index and modules docs

  • Property mode set to 100644
File size: 54.3 KB
Line 
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
4
5<html xmlns="http://www.w3.org/1999/xhtml">
6  <head>
7    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8   
9    <title>sas.dataloader.loader &mdash; SasView 3.0.0 documentation</title>
10   
11    <link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
12    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
13   
14    <script type="text/javascript">
15      var DOCUMENTATION_OPTIONS = {
16        URL_ROOT:    '../../../',
17        VERSION:     '3.0.0',
18        COLLAPSE_INDEX: false,
19        FILE_SUFFIX: '.html',
20        HAS_SOURCE:  true
21      };
22    </script>
23    <script type="text/javascript" src="../../../_static/jquery.js"></script>
24    <script type="text/javascript" src="../../../_static/underscore.js"></script>
25    <script type="text/javascript" src="../../../_static/doctools.js"></script>
26    <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
27    <link rel="top" title="SasView 3.0.0 documentation" href="../../../index.html" />
28    <link rel="up" title="Module code" href="../../index.html" /> 
29  </head>
30  <body>
31    <div class="related">
32      <h3>Navigation</h3>
33      <ul>
34        <li class="right" style="margin-right: 10px">
35          <a href="../../../genindex.html" title="General Index"
36             accesskey="I">index</a></li>
37        <li class="right" >
38          <a href="../../../py-modindex.html" title="Python Module Index"
39             >modules</a> |</li>
40        <li><a href="../../../index.html">SasView 3.0.0 documentation</a> &raquo;</li>
41          <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li> 
42      </ul>
43    </div> 
44
45    <div class="document">
46      <div class="documentwrapper">
47        <div class="bodywrapper">
48          <div class="body">
49           
50  <h1>Source code for sas.dataloader.loader</h1><div class="highlight"><pre>
51<span class="sd">&quot;&quot;&quot;</span>
52<span class="sd">    File handler to support different file extensions.</span>
53<span class="sd">    Uses reflectometry&#39;s registry utility.</span>
54<span class="sd">    </span>
55<span class="sd">    The default readers are found in the &#39;readers&#39; sub-module</span>
56<span class="sd">    and registered by default at initialization time.</span>
57<span class="sd">    </span>
58<span class="sd">    To add a new default reader, one must register it in</span>
59<span class="sd">    the register_readers method found in readers/__init__.py.</span>
60<span class="sd">    </span>
61<span class="sd">    A utility method (find_plugins) is available to inspect</span>
62<span class="sd">    a directory (for instance, a user plug-in directory) and</span>
63<span class="sd">    look for new readers/writers.</span>
64<span class="sd">&quot;&quot;&quot;</span>
65<span class="c">#####################################################################</span>
66<span class="c">#This software was developed by the University of Tennessee as part of the</span>
67<span class="c">#Distributed Data Analysis of Neutron Scattering Experiments (DANSE)</span>
68<span class="c">#project funded by the US National Science Foundation.</span>
69<span class="c">#See the license text in license.txt</span>
70<span class="c">#copyright 2008, University of Tennessee</span>
71<span class="c">######################################################################</span>
72
73<span class="kn">import</span> <span class="nn">os</span>
74<span class="kn">import</span> <span class="nn">sys</span>
75<span class="kn">import</span> <span class="nn">logging</span>
76<span class="kn">import</span> <span class="nn">time</span>
77<span class="kn">from</span> <span class="nn">zipfile</span> <span class="kn">import</span> <span class="n">ZipFile</span>
78<span class="kn">from</span> <span class="nn">sas.data_util.registry</span> <span class="kn">import</span> <span class="n">ExtensionRegistry</span>
79<span class="c"># Default readers are defined in the readers sub-module</span>
80<span class="kn">import</span> <span class="nn">readers</span>
81<span class="kn">from</span> <span class="nn">readers</span> <span class="kn">import</span> <span class="n">ascii_reader</span>
82<span class="kn">from</span> <span class="nn">readers</span> <span class="kn">import</span> <span class="n">cansas_reader</span>
83
84<div class="viewcode-block" id="Registry"><a class="viewcode-back" href="../../../dev/api/sas.dataloader.html#sas.dataloader.loader.Registry">[docs]</a><span class="k">class</span> <span class="nc">Registry</span><span class="p">(</span><span class="n">ExtensionRegistry</span><span class="p">):</span>
85    <span class="sd">&quot;&quot;&quot;</span>
86<span class="sd">    Registry class for file format extensions.</span>
87<span class="sd">    Readers and writers are supported.</span>
88<span class="sd">    &quot;&quot;&quot;</span>
89   
90    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
91        <span class="nb">super</span><span class="p">(</span><span class="n">Registry</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>
92       
93        <span class="c">## Writers</span>
94        <span class="bp">self</span><span class="o">.</span><span class="n">writers</span> <span class="o">=</span> <span class="p">{}</span>
95       
96        <span class="c">## List of wildcards</span>
97        <span class="bp">self</span><span class="o">.</span><span class="n">wildcards</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;All (*.*)|*.*&#39;</span><span class="p">]</span>
98       
99        <span class="c">## Creation time, for testing</span>
100        <span class="bp">self</span><span class="o">.</span><span class="n">_created</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
101       
102        <span class="c"># Register default readers</span>
103        <span class="n">readers</span><span class="o">.</span><span class="n">read_associations</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
104       
105        <span class="c">#TODO: remove the following line when ready to switch to</span>
106        <span class="c">#the new default readers</span>
107        <span class="c">#readers.register_readers(self._identify_plugin)</span>
108       
109        <span class="c"># Look for plug-in readers</span>
110        <span class="c">#self.find_plugins(&#39;plugins&#39;)</span>
111
112<div class="viewcode-block" id="Registry.load"><a class="viewcode-back" href="../../../dev/api/sas.dataloader.html#sas.dataloader.loader.Registry.load">[docs]</a>    <span class="k">def</span> <span class="nf">load</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">format</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
113        <span class="sd">&quot;&quot;&quot;</span>
114<span class="sd">        Call the loader for the file type of path.</span>
115
116<span class="sd">        :param path: file path</span>
117<span class="sd">        :param format: explicit extension, to force the use</span>
118<span class="sd">            of a particular reader</span>
119
120<span class="sd">        Defaults to the ascii (multi-column) reader</span>
121<span class="sd">        if no reader was registered for the file&#39;s</span>
122<span class="sd">        extension.</span>
123<span class="sd">        &quot;&quot;&quot;</span>
124        <span class="k">try</span><span class="p">:</span>
125            <span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">Registry</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">format</span><span class="o">=</span><span class="n">format</span><span class="p">)</span>
126        <span class="k">except</span><span class="p">:</span>
127            <span class="k">try</span><span class="p">:</span>
128                <span class="c"># No reader was found. Default to the ascii reader.</span>
129                <span class="n">ascii_loader</span> <span class="o">=</span> <span class="n">ascii_reader</span><span class="o">.</span><span class="n">Reader</span><span class="p">()</span>
130                <span class="k">return</span> <span class="n">ascii_loader</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
131            <span class="k">except</span><span class="p">:</span>
132                <span class="n">cansas_loader</span> <span class="o">=</span> <span class="n">cansas_reader</span><span class="o">.</span><span class="n">Reader</span><span class="p">()</span>
133                <span class="k">return</span> <span class="n">cansas_loader</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
134            </div>
135<div class="viewcode-block" id="Registry.find_plugins"><a class="viewcode-back" href="../../../dev/api/sas.dataloader.html#sas.dataloader.loader.Registry.find_plugins">[docs]</a>    <span class="k">def</span> <span class="nf">find_plugins</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">dir</span><span class="p">):</span>
136        <span class="sd">&quot;&quot;&quot;</span>
137<span class="sd">        Find readers in a given directory. This method</span>
138<span class="sd">        can be used to inspect user plug-in directories to</span>
139<span class="sd">        find new readers/writers.</span>
140<span class="sd">        </span>
141<span class="sd">        :param dir: directory to search into</span>
142<span class="sd">        </span>
143<span class="sd">        :return: number of readers found</span>
144<span class="sd">        &quot;&quot;&quot;</span>
145        <span class="n">readers_found</span> <span class="o">=</span> <span class="mi">0</span>
146        <span class="n">temp_path</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">abspath</span><span class="p">(</span><span class="nb">dir</span><span class="p">)</span>
147        <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">isdir</span><span class="p">(</span><span class="n">temp_path</span><span class="p">):</span>
148            <span class="n">temp_path</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">os</span><span class="o">.</span><span class="n">getcwd</span><span class="p">(),</span> <span class="nb">dir</span><span class="p">)</span>
149        <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">isdir</span><span class="p">(</span><span class="n">temp_path</span><span class="p">):</span>
150            <span class="n">temp_path</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">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="n">__file__</span><span class="p">),</span> <span class="nb">dir</span><span class="p">)</span>
151        <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">isdir</span><span class="p">(</span><span class="n">temp_path</span><span class="p">):</span>
152            <span class="n">temp_path</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">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="n">sys</span><span class="o">.</span><span class="n">path</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="nb">dir</span><span class="p">)</span>
153       
154        <span class="nb">dir</span> <span class="o">=</span> <span class="n">temp_path</span>
155        <span class="c"># Check whether the directory exists</span>
156        <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">isdir</span><span class="p">(</span><span class="nb">dir</span><span class="p">):</span>
157            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;DataLoader couldn&#39;t locate DataLoader plugin folder.&quot;</span>
158            <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot;&quot;&quot; &quot;</span><span class="si">%s</span><span class="s">&quot; does not exist&quot;&quot;&quot;</span> <span class="o">%</span> <span class="nb">dir</span>
159            <span class="n">logging</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
160            <span class="k">return</span> <span class="n">readers_found</span>
161       
162        <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="nb">dir</span><span class="p">):</span>
163            <span class="n">full_path</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="nb">dir</span><span class="p">,</span> <span class="n">item</span><span class="p">)</span>
164            <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">full_path</span><span class="p">):</span>
165               
166                <span class="c"># Process python files</span>
167                <span class="k">if</span> <span class="n">item</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s">&#39;.py&#39;</span><span class="p">):</span>
168                    <span class="n">toks</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">splitext</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">item</span><span class="p">))</span>
169                    <span class="k">try</span><span class="p">:</span>
170                        <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="nb">dir</span><span class="p">))</span>
171                        <span class="n">module</span> <span class="o">=</span> <span class="nb">__import__</span><span class="p">(</span><span class="n">toks</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nb">globals</span><span class="p">(),</span> <span class="nb">locals</span><span class="p">())</span>
172                        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_identify_plugin</span><span class="p">(</span><span class="n">module</span><span class="p">):</span>
173                            <span class="n">readers_found</span> <span class="o">+=</span> <span class="mi">1</span>
174                    <span class="k">except</span><span class="p">:</span>
175                        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Loader: Error importing &quot;</span>
176                        <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="se">\n</span><span class="s">  </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_value</span><span class="p">)</span>
177                        <span class="n">logging</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
178                           
179                <span class="c"># Process zip files</span>
180                <span class="k">elif</span> <span class="n">item</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s">&#39;.zip&#39;</span><span class="p">):</span>
181                    <span class="k">try</span><span class="p">:</span>
182                        <span class="c"># Find the modules in the zip file</span>
183                        <span class="n">zfile</span> <span class="o">=</span> <span class="n">ZipFile</span><span class="p">(</span><span class="n">item</span><span class="p">)</span>
184                        <span class="n">nlist</span> <span class="o">=</span> <span class="n">zfile</span><span class="o">.</span><span class="n">namelist</span><span class="p">()</span>
185                       
186                        <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">item</span><span class="p">)</span>
187                        <span class="k">for</span> <span class="n">mfile</span> <span class="ow">in</span> <span class="n">nlist</span><span class="p">:</span>
188                            <span class="k">try</span><span class="p">:</span>
189                                <span class="c"># Change OS path to python path</span>
190                                <span class="n">fullname</span> <span class="o">=</span> <span class="n">mfile</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;/&#39;</span><span class="p">,</span> <span class="s">&#39;.&#39;</span><span class="p">)</span>
191                                <span class="n">fullname</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">splitext</span><span class="p">(</span><span class="n">fullname</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
192                                <span class="n">module</span> <span class="o">=</span> <span class="nb">__import__</span><span class="p">(</span><span class="n">fullname</span><span class="p">,</span> <span class="nb">globals</span><span class="p">(),</span>
193                                                     <span class="nb">locals</span><span class="p">(),</span> <span class="p">[</span><span class="s">&quot;&quot;</span><span class="p">])</span>
194                                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_identify_plugin</span><span class="p">(</span><span class="n">module</span><span class="p">):</span>
195                                    <span class="n">readers_found</span> <span class="o">+=</span> <span class="mi">1</span>
196                            <span class="k">except</span><span class="p">:</span>
197                                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Loader: Error importing&quot;</span>
198                                <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot; </span><span class="si">%s</span><span class="se">\n</span><span class="s">  </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">mfile</span><span class="p">,</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_value</span><span class="p">)</span>
199                                <span class="n">logging</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
200                           
201                    <span class="k">except</span><span class="p">:</span>
202                        <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Loader: Error importing &quot;</span>
203                        <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot; </span><span class="si">%s</span><span class="se">\n</span><span class="s">  </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_value</span><span class="p">)</span>
204                        <span class="n">logging</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
205                     
206        <span class="k">return</span> <span class="n">readers_found</span>
207    </div>
208<div class="viewcode-block" id="Registry.associate_file_type"><a class="viewcode-back" href="../../../dev/api/sas.dataloader.html#sas.dataloader.loader.Registry.associate_file_type">[docs]</a>    <span class="k">def</span> <span class="nf">associate_file_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ext</span><span class="p">,</span> <span class="n">module</span><span class="p">):</span>
209        <span class="sd">&quot;&quot;&quot;</span>
210<span class="sd">        Look into a module to find whether it contains a</span>
211<span class="sd">        Reader class. If so, APPEND it to readers and (potentially)</span>
212<span class="sd">        to the list of writers for the given extension</span>
213<span class="sd">        </span>
214<span class="sd">        :param ext: file extension [string]</span>
215<span class="sd">        :param module: module object</span>
216<span class="sd">        &quot;&quot;&quot;</span>
217        <span class="n">reader_found</span> <span class="o">=</span> <span class="bp">False</span>
218       
219        <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="s">&quot;Reader&quot;</span><span class="p">):</span>
220            <span class="k">try</span><span class="p">:</span>
221                <span class="c"># Find supported extensions</span>
222                <span class="n">loader</span> <span class="o">=</span> <span class="n">module</span><span class="o">.</span><span class="n">Reader</span><span class="p">()</span>
223                <span class="k">if</span> <span class="n">ext</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">loaders</span><span class="p">:</span>
224                    <span class="bp">self</span><span class="o">.</span><span class="n">loaders</span><span class="p">[</span><span class="n">ext</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
225                <span class="c"># Append the new reader to the list</span>
226                <span class="bp">self</span><span class="o">.</span><span class="n">loaders</span><span class="p">[</span><span class="n">ext</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">loader</span><span class="o">.</span><span class="n">read</span><span class="p">)</span>
227
228                <span class="n">reader_found</span> <span class="o">=</span> <span class="bp">True</span>
229               
230                <span class="c"># Keep track of wildcards</span>
231                <span class="n">type_name</span> <span class="o">=</span> <span class="n">module</span><span class="o">.</span><span class="n">__name__</span>
232                <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">loader</span><span class="p">,</span> <span class="s">&#39;type_name&#39;</span><span class="p">):</span>
233                    <span class="n">type_name</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">type_name</span>
234                   
235                <span class="n">wcard</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s"> files (*</span><span class="si">%s</span><span class="s">)|*</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">type_name</span><span class="p">,</span> <span class="n">ext</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span>
236                                                 <span class="n">ext</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
237                <span class="k">if</span> <span class="n">wcard</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">wildcards</span><span class="p">:</span>
238                    <span class="bp">self</span><span class="o">.</span><span class="n">wildcards</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">wcard</span><span class="p">)</span>
239                           
240                <span class="c"># Check whether writing is supported</span>
241                <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">loader</span><span class="p">,</span> <span class="s">&#39;write&#39;</span><span class="p">):</span>
242                    <span class="k">if</span> <span class="n">ext</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">writers</span><span class="p">:</span>
243                        <span class="bp">self</span><span class="o">.</span><span class="n">writers</span><span class="p">[</span><span class="n">ext</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
244                    <span class="c"># Append the new writer to the list</span>
245                    <span class="bp">self</span><span class="o">.</span><span class="n">writers</span><span class="p">[</span><span class="n">ext</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">loader</span><span class="o">.</span><span class="n">write</span><span class="p">)</span>
246                       
247            <span class="k">except</span><span class="p">:</span>
248                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Loader: Error accessing&quot;</span>
249                <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot; Reader in </span><span class="si">%s</span><span class="se">\n</span><span class="s">  </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">module</span><span class="o">.</span><span class="n">__name__</span><span class="p">,</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_value</span><span class="p">)</span>
250                <span class="n">logging</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
251        <span class="k">return</span> <span class="n">reader_found</span>
252</div>
253<div class="viewcode-block" id="Registry.associate_file_reader"><a class="viewcode-back" href="../../../dev/api/sas.dataloader.html#sas.dataloader.loader.Registry.associate_file_reader">[docs]</a>    <span class="k">def</span> <span class="nf">associate_file_reader</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ext</span><span class="p">,</span> <span class="n">loader</span><span class="p">):</span>
254        <span class="sd">&quot;&quot;&quot;</span>
255<span class="sd">        Append a reader object to readers</span>
256<span class="sd">        </span>
257<span class="sd">        :param ext: file extension [string]</span>
258<span class="sd">        :param module: reader object</span>
259<span class="sd">        &quot;&quot;&quot;</span>
260        <span class="n">reader_found</span> <span class="o">=</span> <span class="bp">False</span>
261       
262        <span class="k">try</span><span class="p">:</span>
263            <span class="c"># Find supported extensions</span>
264            <span class="k">if</span> <span class="n">ext</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">loaders</span><span class="p">:</span>
265                <span class="bp">self</span><span class="o">.</span><span class="n">loaders</span><span class="p">[</span><span class="n">ext</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
266            <span class="c"># Append the new reader to the list</span>
267            <span class="bp">self</span><span class="o">.</span><span class="n">loaders</span><span class="p">[</span><span class="n">ext</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">loader</span><span class="o">.</span><span class="n">read</span><span class="p">)</span>
268
269            <span class="n">reader_found</span> <span class="o">=</span> <span class="bp">True</span>
270           
271            <span class="c"># Keep track of wildcards</span>
272            <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">loader</span><span class="p">,</span> <span class="s">&#39;type_name&#39;</span><span class="p">):</span>
273                <span class="n">type_name</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">type_name</span>
274               
275                <span class="n">wcard</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s"> files (*</span><span class="si">%s</span><span class="s">)|*</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">type_name</span><span class="p">,</span> <span class="n">ext</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span>
276                                                <span class="n">ext</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
277                <span class="k">if</span> <span class="n">wcard</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">wildcards</span><span class="p">:</span>
278                    <span class="bp">self</span><span class="o">.</span><span class="n">wildcards</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">wcard</span><span class="p">)</span>
279                 
280        <span class="k">except</span><span class="p">:</span>
281            <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Loader: Error accessing Reader &quot;</span>
282            <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot;in </span><span class="si">%s</span><span class="se">\n</span><span class="s">  </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">loader</span><span class="o">.</span><span class="n">__name__</span><span class="p">,</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_value</span><span class="p">)</span>
283            <span class="n">logging</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
284        <span class="k">return</span> <span class="n">reader_found</span>
285</div>
286    <span class="k">def</span> <span class="nf">_identify_plugin</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">module</span><span class="p">):</span>
287        <span class="sd">&quot;&quot;&quot;</span>
288<span class="sd">        Look into a module to find whether it contains a </span>
289<span class="sd">        Reader class. If so, add it to readers and (potentially)</span>
290<span class="sd">        to the list of writers.</span>
291<span class="sd">        :param module: module object</span>
292<span class="sd">        </span>
293<span class="sd">        &quot;&quot;&quot;</span>
294        <span class="n">reader_found</span> <span class="o">=</span> <span class="bp">False</span>
295       
296        <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="s">&quot;Reader&quot;</span><span class="p">):</span>
297            <span class="k">try</span><span class="p">:</span>
298                <span class="c"># Find supported extensions</span>
299                <span class="n">loader</span> <span class="o">=</span> <span class="n">module</span><span class="o">.</span><span class="n">Reader</span><span class="p">()</span>
300                <span class="k">for</span> <span class="n">ext</span> <span class="ow">in</span> <span class="n">loader</span><span class="o">.</span><span class="n">ext</span><span class="p">:</span>
301                    <span class="k">if</span> <span class="n">ext</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">loaders</span><span class="p">:</span>
302                        <span class="bp">self</span><span class="o">.</span><span class="n">loaders</span><span class="p">[</span><span class="n">ext</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
303                    <span class="c"># When finding a reader at run time,</span>
304                    <span class="c"># treat this reader as the new default</span>
305                    <span class="bp">self</span><span class="o">.</span><span class="n">loaders</span><span class="p">[</span><span class="n">ext</span><span class="p">]</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">loader</span><span class="o">.</span><span class="n">read</span><span class="p">)</span>
306
307                    <span class="n">reader_found</span> <span class="o">=</span> <span class="bp">True</span>
308                   
309                    <span class="c"># Keep track of wildcards</span>
310                    <span class="n">type_name</span> <span class="o">=</span> <span class="n">module</span><span class="o">.</span><span class="n">__name__</span>
311                    <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">loader</span><span class="p">,</span> <span class="s">&#39;type_name&#39;</span><span class="p">):</span>
312                        <span class="n">type_name</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">type_name</span>
313                    <span class="n">wcard</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s"> files (*</span><span class="si">%s</span><span class="s">)|*</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">type_name</span><span class="p">,</span> <span class="n">ext</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span>
314                                                     <span class="n">ext</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
315                    <span class="k">if</span> <span class="n">wcard</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">wildcards</span><span class="p">:</span>
316                        <span class="bp">self</span><span class="o">.</span><span class="n">wildcards</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">wcard</span><span class="p">)</span>
317                           
318                <span class="c"># Check whether writing is supported</span>
319                <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">loader</span><span class="p">,</span> <span class="s">&#39;write&#39;</span><span class="p">):</span>
320                    <span class="k">for</span> <span class="n">ext</span> <span class="ow">in</span> <span class="n">loader</span><span class="o">.</span><span class="n">ext</span><span class="p">:</span>
321                        <span class="k">if</span> <span class="n">ext</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">writers</span><span class="p">:</span>
322                            <span class="bp">self</span><span class="o">.</span><span class="n">writers</span><span class="p">[</span><span class="n">ext</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
323                        <span class="bp">self</span><span class="o">.</span><span class="n">writers</span><span class="p">[</span><span class="n">ext</span><span class="p">]</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">loader</span><span class="o">.</span><span class="n">write</span><span class="p">)</span>
324                       
325            <span class="k">except</span><span class="p">:</span>
326                <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot;Loader: Error accessing Reader&quot;</span>
327                <span class="n">msg</span> <span class="o">+=</span> <span class="s">&quot; in </span><span class="si">%s</span><span class="se">\n</span><span class="s">  </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">module</span><span class="o">.</span><span class="n">__name__</span><span class="p">,</span> <span class="n">sys</span><span class="o">.</span><span class="n">exc_value</span><span class="p">)</span>
328                <span class="n">logging</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
329        <span class="k">return</span> <span class="n">reader_found</span>
330
331<div class="viewcode-block" id="Registry.lookup_writers"><a class="viewcode-back" href="../../../dev/api/sas.dataloader.html#sas.dataloader.loader.Registry.lookup_writers">[docs]</a>    <span class="k">def</span> <span class="nf">lookup_writers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span>
332        <span class="sd">&quot;&quot;&quot;</span>
333<span class="sd">        :return: the loader associated with the file type of path.</span>
334<span class="sd">        </span>
335<span class="sd">        :Raises ValueError: if file type is not known.</span>
336<span class="sd">        &quot;&quot;&quot;</span>
337        <span class="c"># Find matching extensions</span>
338        <span class="n">extlist</span> <span class="o">=</span> <span class="p">[</span><span class="n">ext</span> <span class="k">for</span> <span class="n">ext</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">extensions</span><span class="p">()</span> <span class="k">if</span> <span class="n">path</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="n">ext</span><span class="p">)]</span>
339        <span class="c"># Sort matching extensions by decreasing order of length</span>
340        <span class="n">extlist</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="k">lambda</span> <span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">b</span><span class="p">))</span>
341        <span class="c"># Combine loaders for matching extensions into one big list</span>
342        <span class="n">writers</span> <span class="o">=</span> <span class="p">[]</span>
343        <span class="k">for</span> <span class="n">L</span> <span class="ow">in</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">writers</span><span class="p">[</span><span class="n">ext</span><span class="p">]</span> <span class="k">for</span> <span class="n">ext</span> <span class="ow">in</span> <span class="n">extlist</span><span class="p">]:</span>
344            <span class="n">writers</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">L</span><span class="p">)</span>
345        <span class="c"># Remove duplicates if they exist</span>
346        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">writers</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">writers</span><span class="p">)):</span>
347            <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
348            <span class="k">for</span> <span class="n">L</span> <span class="ow">in</span> <span class="n">writers</span><span class="p">:</span>
349                <span class="k">if</span> <span class="n">L</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">result</span><span class="p">:</span>
350                    <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">L</span><span class="p">)</span>
351            <span class="n">writers</span> <span class="o">=</span> <span class="n">L</span>
352        <span class="c"># Raise an error if there are no matching extensions</span>
353        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">writers</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
354            <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">,</span> <span class="s">&quot;Unknown file type for &quot;</span> <span class="o">+</span> <span class="n">path</span>
355        <span class="c"># All done</span>
356        <span class="k">return</span> <span class="n">writers</span>
357</div>
358<div class="viewcode-block" id="Registry.save"><a class="viewcode-back" href="../../../dev/api/sas.dataloader.html#sas.dataloader.loader.Registry.save">[docs]</a>    <span class="k">def</span> <span class="nf">save</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">format</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
359        <span class="sd">&quot;&quot;&quot;</span>
360<span class="sd">        Call the writer for the file type of path.</span>
361
362<span class="sd">        Raises ValueError if no writer is available.</span>
363<span class="sd">        Raises KeyError if format is not available.</span>
364<span class="sd">        </span>
365<span class="sd">        May raise a writer-defined exception if writer fails.</span>
366<span class="sd">        &quot;&quot;&quot;</span>
367        <span class="k">if</span> <span class="n">format</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
368            <span class="n">writers</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lookup_writers</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
369        <span class="k">else</span><span class="p">:</span>
370            <span class="n">writers</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">writers</span><span class="p">[</span><span class="n">format</span><span class="p">]</span>
371        <span class="k">for</span> <span class="n">fn</span> <span class="ow">in</span> <span class="n">writers</span><span class="p">:</span>
372            <span class="k">try</span><span class="p">:</span>
373                <span class="k">return</span> <span class="n">fn</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
374            <span class="k">except</span><span class="p">:</span>
375                <span class="k">pass</span>  <span class="c"># give other loaders a chance to succeed</span>
376        <span class="c"># If we get here it is because all loaders failed</span>
377        <span class="k">raise</span>  <span class="c"># reraises last exception</span>
378
379        </div></div>
380<div class="viewcode-block" id="Loader"><a class="viewcode-back" href="../../../dev/api/sas.dataloader.html#sas.dataloader.loader.Loader">[docs]</a><span class="k">class</span> <span class="nc">Loader</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
381    <span class="sd">&quot;&quot;&quot;</span>
382<span class="sd">    Utility class to use the Registry as a singleton.</span>
383<span class="sd">    &quot;&quot;&quot;</span>
384    <span class="c">## Registry instance</span>
385    <span class="n">__registry</span> <span class="o">=</span> <span class="n">Registry</span><span class="p">()</span>
386   
387<div class="viewcode-block" id="Loader.associate_file_type"><a class="viewcode-back" href="../../../dev/api/sas.dataloader.html#sas.dataloader.loader.Loader.associate_file_type">[docs]</a>    <span class="k">def</span> <span class="nf">associate_file_type</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ext</span><span class="p">,</span> <span class="n">module</span><span class="p">):</span>
388        <span class="sd">&quot;&quot;&quot;</span>
389<span class="sd">        Look into a module to find whether it contains a</span>
390<span class="sd">        Reader class. If so, append it to readers and (potentially)</span>
391<span class="sd">        to the list of writers for the given extension</span>
392<span class="sd">        </span>
393<span class="sd">        :param ext: file extension [string]</span>
394<span class="sd">        :param module: module object</span>
395<span class="sd">        &quot;&quot;&quot;</span>
396        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__registry</span><span class="o">.</span><span class="n">associate_file_type</span><span class="p">(</span><span class="n">ext</span><span class="p">,</span> <span class="n">module</span><span class="p">)</span>
397</div>
398<div class="viewcode-block" id="Loader.associate_file_reader"><a class="viewcode-back" href="../../../dev/api/sas.dataloader.html#sas.dataloader.loader.Loader.associate_file_reader">[docs]</a>    <span class="k">def</span> <span class="nf">associate_file_reader</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ext</span><span class="p">,</span> <span class="n">loader</span><span class="p">):</span>
399        <span class="sd">&quot;&quot;&quot;</span>
400<span class="sd">        Append a reader object to readers</span>
401<span class="sd">        </span>
402<span class="sd">        :param ext: file extension [string]</span>
403<span class="sd">        :param module: reader object</span>
404<span class="sd">        &quot;&quot;&quot;</span>
405        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__registry</span><span class="o">.</span><span class="n">associate_file_reader</span><span class="p">(</span><span class="n">ext</span><span class="p">,</span> <span class="n">loader</span><span class="p">)</span>
406</div>
407<div class="viewcode-block" id="Loader.load"><a class="viewcode-back" href="../../../dev/api/sas.dataloader.html#sas.dataloader.loader.Loader.load">[docs]</a>    <span class="k">def</span> <span class="nf">load</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">file</span><span class="p">,</span> <span class="n">format</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
408        <span class="sd">&quot;&quot;&quot;</span>
409<span class="sd">        Load a file</span>
410<span class="sd">        </span>
411<span class="sd">        :param file: file name (path)</span>
412<span class="sd">        :param format: specified format to use (optional)</span>
413<span class="sd">        :return: DataInfo object</span>
414<span class="sd">        &quot;&quot;&quot;</span>
415        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__registry</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="nb">file</span><span class="p">,</span> <span class="n">format</span><span class="p">)</span>
416    </div>
417<div class="viewcode-block" id="Loader.save"><a class="viewcode-back" href="../../../dev/api/sas.dataloader.html#sas.dataloader.loader.Loader.save">[docs]</a>    <span class="k">def</span> <span class="nf">save</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">file</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">format</span><span class="p">):</span>
418        <span class="sd">&quot;&quot;&quot;</span>
419<span class="sd">        Save a DataInfo object to file</span>
420<span class="sd">        :param file: file name (path)</span>
421<span class="sd">        :param data: DataInfo object</span>
422<span class="sd">        :param format: format to write the data in </span>
423<span class="sd">        &quot;&quot;&quot;</span>
424        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__registry</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="nb">file</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">format</span><span class="p">)</span>
425        </div>
426    <span class="k">def</span> <span class="nf">_get_registry_creation_time</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
427        <span class="sd">&quot;&quot;&quot;</span>
428<span class="sd">        Internal method used to test the uniqueness</span>
429<span class="sd">        of the registry object</span>
430<span class="sd">        &quot;&quot;&quot;</span>
431        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__registry</span><span class="o">.</span><span class="n">_created</span>
432   
433<div class="viewcode-block" id="Loader.find_plugins"><a class="viewcode-back" href="../../../dev/api/sas.dataloader.html#sas.dataloader.loader.Loader.find_plugins">[docs]</a>    <span class="k">def</span> <span class="nf">find_plugins</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">dir</span><span class="p">):</span>
434        <span class="sd">&quot;&quot;&quot;</span>
435<span class="sd">        Find plugins in a given directory</span>
436<span class="sd">        </span>
437<span class="sd">        :param dir: directory to look into to find new readers/writers</span>
438<span class="sd">        &quot;&quot;&quot;</span>
439        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__registry</span><span class="o">.</span><span class="n">find_plugins</span><span class="p">(</span><span class="nb">dir</span><span class="p">)</span>
440    </div>
441<div class="viewcode-block" id="Loader.get_wildcards"><a class="viewcode-back" href="../../../dev/api/sas.dataloader.html#sas.dataloader.loader.Loader.get_wildcards">[docs]</a>    <span class="k">def</span> <span class="nf">get_wildcards</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
442        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__registry</span><span class="o">.</span><span class="n">wildcards</span></div></div>
443</pre></div>
444
445          </div>
446        </div>
447      </div>
448      <div class="sphinxsidebar">
449        <div class="sphinxsidebarwrapper">
450<div id="searchbox" style="display: none">
451  <h3>Quick search</h3>
452    <form class="search" action="../../../search.html" method="get">
453      <input type="text" name="q" />
454      <input type="submit" value="Go" />
455      <input type="hidden" name="check_keywords" value="yes" />
456      <input type="hidden" name="area" value="default" />
457    </form>
458    <p class="searchtip" style="font-size: 90%">
459    Enter search terms or a module, class or function name.
460    </p>
461</div>
462<script type="text/javascript">$('#searchbox').show(0);</script>
463        </div>
464      </div>
465      <div class="clearer"></div>
466    </div>
467    <div class="related">
468      <h3>Navigation</h3>
469      <ul>
470        <li class="right" style="margin-right: 10px">
471          <a href="../../../genindex.html" title="General Index"
472             >index</a></li>
473        <li class="right" >
474          <a href="../../../py-modindex.html" title="Python Module Index"
475             >modules</a> |</li>
476        <li><a href="../../../index.html">SasView 3.0.0 documentation</a> &raquo;</li>
477          <li><a href="../../index.html" >Module code</a> &raquo;</li> 
478      </ul>
479    </div>
480    <div class="footer">
481        &copy; Copyright 2013, The SasView Project.
482      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
483    </div>
484  </body>
485</html>
Note: See TracBrowser for help on using the repository browser.