source: sasview/_modules/sas/dataloader/readers/xml_reader.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: 42.4 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.readers.xml_reader &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="sas.dataloader.readers" href="../readers.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" >Module code</a> &raquo;</li>
42          <li><a href="../readers.html" accesskey="U">sas.dataloader.readers</a> &raquo;</li> 
43      </ul>
44    </div> 
45
46    <div class="document">
47      <div class="documentwrapper">
48        <div class="bodywrapper">
49          <div class="body">
50           
51  <h1>Source code for sas.dataloader.readers.xml_reader</h1><div class="highlight"><pre>
52<span class="sd">&quot;&quot;&quot;</span>
53<span class="sd">    Generic XML read and write utility</span>
54<span class="sd">    </span>
55<span class="sd">    Usage: Either extend xml_reader or add as a class variable.</span>
56<span class="sd">&quot;&quot;&quot;</span>
57<span class="c">############################################################################</span>
58<span class="c">#This software was developed by the University of Tennessee as part of the</span>
59<span class="c">#Distributed Data Analysis of Neutron Scattering Experiments (DANSE)</span>
60<span class="c">#project funded by the US National Science Foundation. </span>
61<span class="c">#If you use DANSE applications to do scientific research that leads to </span>
62<span class="c">#publication, we ask that you acknowledge the use of the software with the </span>
63<span class="c">#following sentence:</span>
64<span class="c">#This work benefited from DANSE software developed under NSF award DMR-0520547. </span>
65<span class="c">#copyright 2008,2009 University of Tennessee</span>
66<span class="c">#############################################################################</span>
67
68<span class="kn">import</span> <span class="nn">logging</span>
69<span class="kn">from</span> <span class="nn">lxml</span> <span class="kn">import</span> <span class="n">etree</span>
70<span class="kn">from</span> <span class="nn">lxml.builder</span> <span class="kn">import</span> <span class="n">E</span>
71
72<span class="n">PARSER</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">ETCompatXMLParser</span><span class="p">(</span><span class="n">remove_comments</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">remove_pis</span><span class="o">=</span><span class="bp">False</span><span class="p">)</span>
73
74<div class="viewcode-block" id="XMLreader"><a class="viewcode-back" href="../../../../dev/api/sas.dataloader.readers.html#sas.dataloader.readers.xml_reader.XMLreader">[docs]</a><span class="k">class</span> <span class="nc">XMLreader</span><span class="p">():</span>
75    <span class="sd">&quot;&quot;&quot;</span>
76<span class="sd">    Generic XML read and write class. Mostly helper functions.</span>
77<span class="sd">    Makes reading/writing XML a bit easier than calling lxml libraries directly.</span>
78<span class="sd">    </span>
79<span class="sd">    :Dependencies:</span>
80<span class="sd">        This class requires lxml 2.3 or higher.</span>
81<span class="sd">    &quot;&quot;&quot;</span>
82   
83    <span class="n">xml</span> <span class="o">=</span> <span class="bp">None</span>
84    <span class="n">xmldoc</span> <span class="o">=</span> <span class="bp">None</span>
85    <span class="n">xmlroot</span> <span class="o">=</span> <span class="bp">None</span>
86    <span class="n">schema</span> <span class="o">=</span> <span class="bp">None</span>
87    <span class="n">schemadoc</span> <span class="o">=</span> <span class="bp">None</span>
88    <span class="n">encoding</span> <span class="o">=</span> <span class="bp">None</span>
89    <span class="n">processing_instructions</span> <span class="o">=</span> <span class="bp">None</span>
90   
91    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">xml</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">schema</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
92        <span class="bp">self</span><span class="o">.</span><span class="n">xml</span> <span class="o">=</span> <span class="n">xml</span>
93        <span class="bp">self</span><span class="o">.</span><span class="n">schema</span> <span class="o">=</span> <span class="n">schema</span>
94        <span class="bp">self</span><span class="o">.</span><span class="n">processing_instructions</span> <span class="o">=</span> <span class="p">{}</span>
95        <span class="k">if</span> <span class="n">xml</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
96            <span class="bp">self</span><span class="o">.</span><span class="n">set_xml_file</span><span class="p">(</span><span class="n">xml</span><span class="p">)</span>
97        <span class="k">else</span><span class="p">:</span>
98            <span class="bp">self</span><span class="o">.</span><span class="n">xmldoc</span> <span class="o">=</span> <span class="bp">None</span>
99            <span class="bp">self</span><span class="o">.</span><span class="n">xmlroot</span> <span class="o">=</span> <span class="bp">None</span>
100        <span class="k">if</span> <span class="n">schema</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
101            <span class="bp">self</span><span class="o">.</span><span class="n">set_schema</span><span class="p">(</span><span class="n">schema</span><span class="p">)</span>
102        <span class="k">else</span><span class="p">:</span>
103            <span class="bp">self</span><span class="o">.</span><span class="n">schemadoc</span> <span class="o">=</span> <span class="bp">None</span>
104   
105<div class="viewcode-block" id="XMLreader.reader"><a class="viewcode-back" href="../../../../dev/api/sas.dataloader.readers.html#sas.dataloader.readers.xml_reader.XMLreader.reader">[docs]</a>    <span class="k">def</span> <span class="nf">reader</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
106        <span class="sd">&quot;&quot;&quot;</span>
107<span class="sd">        Read in an XML file into memory and return an lxml dictionary</span>
108<span class="sd">        &quot;&quot;&quot;</span>
109        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">validate_xml</span><span class="p">():</span>
110            <span class="bp">self</span><span class="o">.</span><span class="n">xmldoc</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">xml</span><span class="p">,</span> <span class="n">parser</span> <span class="o">=</span> <span class="n">PARSER</span><span class="p">)</span>
111        <span class="k">else</span><span class="p">:</span>
112            <span class="k">raise</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLSchemaValidateError</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">find_invalid_xml</span><span class="p">())</span>
113        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">xmldoc</span>
114    </div>
115<div class="viewcode-block" id="XMLreader.set_xml_file"><a class="viewcode-back" href="../../../../dev/api/sas.dataloader.readers.html#sas.dataloader.readers.xml_reader.XMLreader.set_xml_file">[docs]</a>    <span class="k">def</span> <span class="nf">set_xml_file</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">xml</span><span class="p">):</span>
116        <span class="sd">&quot;&quot;&quot;</span>
117<span class="sd">        Set the XML file and parse</span>
118<span class="sd">        &quot;&quot;&quot;</span>
119        <span class="k">try</span><span class="p">:</span>
120            <span class="bp">self</span><span class="o">.</span><span class="n">xml</span> <span class="o">=</span> <span class="n">xml</span>
121            <span class="bp">self</span><span class="o">.</span><span class="n">xmldoc</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">xml</span><span class="p">,</span> <span class="n">parser</span> <span class="o">=</span> <span class="n">PARSER</span><span class="p">)</span>
122            <span class="bp">self</span><span class="o">.</span><span class="n">xmlroot</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">xmldoc</span><span class="o">.</span><span class="n">getroot</span><span class="p">()</span>
123        <span class="k">except</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLSyntaxError</span> <span class="k">as</span> <span class="n">xml_error</span><span class="p">:</span>
124            <span class="n">logging</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">xml_error</span><span class="p">)</span>
125        <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
126            <span class="bp">self</span><span class="o">.</span><span class="n">xml</span> <span class="o">=</span> <span class="bp">None</span>
127            <span class="bp">self</span><span class="o">.</span><span class="n">xmldoc</span> <span class="o">=</span> <span class="bp">None</span>
128            <span class="bp">self</span><span class="o">.</span><span class="n">xmlroot</span> <span class="o">=</span> <span class="bp">None</span>
129    </div>
130<div class="viewcode-block" id="XMLreader.set_schema"><a class="viewcode-back" href="../../../../dev/api/sas.dataloader.readers.html#sas.dataloader.readers.xml_reader.XMLreader.set_schema">[docs]</a>    <span class="k">def</span> <span class="nf">set_schema</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">schema</span><span class="p">):</span>
131        <span class="sd">&quot;&quot;&quot;</span>
132<span class="sd">        Set the schema file and parse</span>
133<span class="sd">        &quot;&quot;&quot;</span>
134        <span class="k">try</span><span class="p">:</span>
135            <span class="bp">self</span><span class="o">.</span><span class="n">schema</span> <span class="o">=</span> <span class="n">schema</span>
136            <span class="bp">self</span><span class="o">.</span><span class="n">schemadoc</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">schema</span><span class="p">,</span> <span class="n">parser</span> <span class="o">=</span> <span class="n">PARSER</span><span class="p">)</span>
137        <span class="k">except</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLSyntaxError</span> <span class="k">as</span> <span class="n">xml_error</span><span class="p">:</span>
138            <span class="n">logging</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">xml_error</span><span class="p">)</span>
139        <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
140            <span class="bp">self</span><span class="o">.</span><span class="n">schema</span> <span class="o">=</span> <span class="bp">None</span>
141            <span class="bp">self</span><span class="o">.</span><span class="n">schemadoc</span> <span class="o">=</span> <span class="bp">None</span>
142    </div>
143<div class="viewcode-block" id="XMLreader.validate_xml"><a class="viewcode-back" href="../../../../dev/api/sas.dataloader.readers.html#sas.dataloader.readers.xml_reader.XMLreader.validate_xml">[docs]</a>    <span class="k">def</span> <span class="nf">validate_xml</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
144        <span class="sd">&quot;&quot;&quot;</span>
145<span class="sd">        Checks to see if the XML file meets the schema</span>
146<span class="sd">        &quot;&quot;&quot;</span>
147        <span class="n">valid</span> <span class="o">=</span> <span class="bp">True</span>
148        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">schema</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
149            <span class="bp">self</span><span class="o">.</span><span class="n">parse_schema_and_doc</span><span class="p">()</span>
150            <span class="n">schema_check</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLSchema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">schemadoc</span><span class="p">)</span>
151            <span class="n">valid</span> <span class="o">=</span> <span class="n">schema_check</span><span class="o">.</span><span class="n">validate</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">xmldoc</span><span class="p">)</span>
152        <span class="k">return</span> <span class="n">valid</span>
153    </div>
154<div class="viewcode-block" id="XMLreader.find_invalid_xml"><a class="viewcode-back" href="../../../../dev/api/sas.dataloader.readers.html#sas.dataloader.readers.xml_reader.XMLreader.find_invalid_xml">[docs]</a>    <span class="k">def</span> <span class="nf">find_invalid_xml</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
155        <span class="sd">&quot;&quot;&quot;</span>
156<span class="sd">        Finds the first offending element that should not be present in XML file</span>
157<span class="sd">        &quot;&quot;&quot;</span>
158        <span class="n">first_error</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
159        <span class="bp">self</span><span class="o">.</span><span class="n">parse_schema_and_doc</span><span class="p">()</span>
160        <span class="n">schema</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLSchema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">schemadoc</span><span class="p">)</span>
161        <span class="k">try</span><span class="p">:</span>
162            <span class="n">first_error</span> <span class="o">=</span> <span class="n">schema</span><span class="o">.</span><span class="n">assertValid</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">xmldoc</span><span class="p">)</span>
163        <span class="k">except</span> <span class="n">etree</span><span class="o">.</span><span class="n">DocumentInvalid</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
164            <span class="n">first_error</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
165        <span class="k">return</span> <span class="n">first_error</span>
166    </div>
167<div class="viewcode-block" id="XMLreader.parse_schema_and_doc"><a class="viewcode-back" href="../../../../dev/api/sas.dataloader.readers.html#sas.dataloader.readers.xml_reader.XMLreader.parse_schema_and_doc">[docs]</a>    <span class="k">def</span> <span class="nf">parse_schema_and_doc</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
168        <span class="sd">&quot;&quot;&quot;</span>
169<span class="sd">        Creates a dictionary of the parsed schema and xml files.</span>
170<span class="sd">        &quot;&quot;&quot;</span>
171        <span class="bp">self</span><span class="o">.</span><span class="n">set_xml_file</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">xml</span><span class="p">)</span>
172        <span class="bp">self</span><span class="o">.</span><span class="n">set_schema</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">schema</span><span class="p">)</span>
173        </div>
174<div class="viewcode-block" id="XMLreader.to_string"><a class="viewcode-back" href="../../../../dev/api/sas.dataloader.readers.html#sas.dataloader.readers.xml_reader.XMLreader.to_string">[docs]</a>    <span class="k">def</span> <span class="nf">to_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">elem</span><span class="p">,</span> <span class="n">pretty_print</span><span class="o">=</span><span class="bp">False</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
175        <span class="sd">&quot;&quot;&quot;</span>
176<span class="sd">        Converts an etree element into a string</span>
177<span class="sd">        &quot;&quot;&quot;</span>
178        <span class="k">return</span> <span class="n">etree</span><span class="o">.</span><span class="n">tostring</span><span class="p">(</span><span class="n">elem</span><span class="p">,</span> <span class="n">pretty_print</span> <span class="o">=</span> <span class="n">pretty_print</span><span class="p">,</span> \
179                              <span class="n">encoding</span> <span class="o">=</span> <span class="n">encoding</span><span class="p">)</span>
180    </div>
181<div class="viewcode-block" id="XMLreader.break_processing_instructions"><a class="viewcode-back" href="../../../../dev/api/sas.dataloader.readers.html#sas.dataloader.readers.xml_reader.XMLreader.break_processing_instructions">[docs]</a>    <span class="k">def</span> <span class="nf">break_processing_instructions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">string</span><span class="p">,</span> <span class="n">dic</span><span class="p">):</span>
182        <span class="sd">&quot;&quot;&quot;</span>
183<span class="sd">        Method to break a processing instruction string apart and add to a dict</span>
184<span class="sd">        </span>
185<span class="sd">        :param string: A processing instruction as a string</span>
186<span class="sd">        :param dic: The dictionary to save the PIs to</span>
187<span class="sd">        &quot;&quot;&quot;</span>
188        <span class="n">pi_string</span> <span class="o">=</span> <span class="n">string</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;&lt;?&quot;</span><span class="p">,</span> <span class="s">&quot;&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;?&gt;&quot;</span><span class="p">,</span> <span class="s">&quot;&quot;</span><span class="p">)</span>
189        <span class="n">split</span> <span class="o">=</span> <span class="n">pi_string</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot; &quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
190        <span class="n">pi_name</span> <span class="o">=</span> <span class="n">split</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
191        <span class="n">attr</span> <span class="o">=</span> <span class="n">split</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
192        <span class="n">new_pi_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_unique_key</span><span class="p">(</span><span class="n">dic</span><span class="p">,</span> <span class="n">pi_name</span><span class="p">)</span>
193        <span class="n">dic</span><span class="p">[</span><span class="n">new_pi_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">attr</span>
194        <span class="k">return</span> <span class="n">dic</span>
195    </div>
196<div class="viewcode-block" id="XMLreader.set_processing_instructions"><a class="viewcode-back" href="../../../../dev/api/sas.dataloader.readers.html#sas.dataloader.readers.xml_reader.XMLreader.set_processing_instructions">[docs]</a>    <span class="k">def</span> <span class="nf">set_processing_instructions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
197        <span class="sd">&quot;&quot;&quot;</span>
198<span class="sd">        Take out all processing instructions and create a dictionary from them</span>
199<span class="sd">        If there is a default encoding, the value is also saved</span>
200<span class="sd">        &quot;&quot;&quot;</span>
201        <span class="n">dic</span> <span class="o">=</span> <span class="p">{}</span>
202        <span class="n">proc_instr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">xmlroot</span><span class="o">.</span><span class="n">getprevious</span><span class="p">()</span>
203        <span class="k">while</span> <span class="n">proc_instr</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
204            <span class="n">pi_string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">to_string</span><span class="p">(</span><span class="n">proc_instr</span><span class="p">)</span>
205            <span class="k">if</span> <span class="s">&quot;?&gt;</span><span class="se">\n</span><span class="s">&lt;?&quot;</span> <span class="ow">in</span> <span class="n">pi_string</span><span class="p">:</span>
206                <span class="n">pi_string</span> <span class="o">=</span> <span class="n">pi_string</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;?&gt;</span><span class="se">\n</span><span class="s">&lt;?&quot;</span><span class="p">)</span>
207            <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">pi_string</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
208                <span class="n">dic</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">break_processing_instructions</span><span class="p">(</span><span class="n">pi_string</span><span class="p">,</span> <span class="n">dic</span><span class="p">)</span>
209            <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">pi_string</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
210                <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">pi_string</span><span class="p">:</span>
211                    <span class="n">dic</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">break_processing_instructions</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">dic</span><span class="p">)</span>
212            <span class="n">proc_instr</span> <span class="o">=</span> <span class="n">proc_instr</span><span class="o">.</span><span class="n">getprevious</span><span class="p">()</span>
213        <span class="k">if</span> <span class="s">&#39;xml&#39;</span> <span class="ow">in</span> <span class="n">dic</span><span class="p">:</span>
214            <span class="bp">self</span><span class="o">.</span><span class="n">set_encoding</span><span class="p">(</span><span class="n">dic</span><span class="p">[</span><span class="s">&#39;xml&#39;</span><span class="p">])</span>
215            <span class="k">del</span> <span class="n">dic</span><span class="p">[</span><span class="s">&#39;xml&#39;</span><span class="p">]</span>
216        <span class="bp">self</span><span class="o">.</span><span class="n">processing_instructions</span> <span class="o">=</span> <span class="n">dic</span>
217        </div>
218<div class="viewcode-block" id="XMLreader.set_encoding"><a class="viewcode-back" href="../../../../dev/api/sas.dataloader.readers.html#sas.dataloader.readers.xml_reader.XMLreader.set_encoding">[docs]</a>    <span class="k">def</span> <span class="nf">set_encoding</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attr_str</span><span class="p">):</span>
219        <span class="sd">&quot;&quot;&quot;</span>
220<span class="sd">        Find the encoding in the xml declaration and save it as a string</span>
221<span class="sd">        </span>
222<span class="sd">        :param attr_str: All attributes as a string</span>
223<span class="sd">            e.g. &quot;foo1=&quot;bar1&quot; foo2=&quot;bar2&quot; foo3=&quot;bar3&quot; ... foo_n=&quot;bar_n&quot;&quot;</span>
224<span class="sd">        &quot;&quot;&quot;</span>
225        <span class="n">attr_str</span> <span class="o">=</span> <span class="n">attr_str</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot; = &quot;</span><span class="p">,</span> <span class="s">&quot;=&quot;</span><span class="p">)</span>
226        <span class="n">attr_list</span> <span class="o">=</span> <span class="n">attr_str</span><span class="o">.</span><span class="n">split</span><span class="p">(</span> <span class="p">)</span>
227        <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">attr_list</span><span class="p">:</span>
228            <span class="n">name_value</span> <span class="o">=</span> <span class="n">item</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\&quot;</span><span class="s">=&quot;</span><span class="p">)</span>
229            <span class="n">name</span> <span class="o">=</span> <span class="n">name_value</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
230            <span class="n">value</span> <span class="o">=</span> <span class="n">name_value</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
231            <span class="k">if</span> <span class="n">name</span> <span class="o">==</span> <span class="s">&quot;encoding&quot;</span><span class="p">:</span>
232                <span class="bp">self</span><span class="o">.</span><span class="n">encoding</span> <span class="o">=</span> <span class="n">value</span>
233                <span class="k">return</span>
234        <span class="bp">self</span><span class="o">.</span><span class="n">encoding</span> <span class="o">=</span> <span class="bp">None</span>
235        </div>
236    <span class="k">def</span> <span class="nf">_create_unique_key</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dictionary</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">numb</span> <span class="o">=</span> <span class="mi">0</span><span class="p">):</span>
237        <span class="sd">&quot;&quot;&quot;</span>
238<span class="sd">        Create a unique key value for any dictionary to prevent overwriting</span>
239<span class="sd">        Recurses until a unique key value is found.</span>
240<span class="sd">        </span>
241<span class="sd">        :param dictionary: A dictionary with any number of entries</span>
242<span class="sd">        :param name: The index of the item to be added to dictionary</span>
243<span class="sd">        :param numb: The number to be appended to the name, starts at 0</span>
244<span class="sd">        &quot;&quot;&quot;</span>
245        <span class="k">if</span> <span class="n">dictionary</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
246            <span class="n">numb</span> <span class="o">+=</span> <span class="mi">1</span>
247            <span class="n">name</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&quot;_&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
248            <span class="n">name</span> <span class="o">+=</span> <span class="s">&quot;_{0}&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">numb</span><span class="p">)</span>
249            <span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_create_unique_key</span><span class="p">(</span><span class="n">dictionary</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">numb</span><span class="p">)</span>
250        <span class="k">return</span> <span class="n">name</span>
251   
252<div class="viewcode-block" id="XMLreader.create_tree"><a class="viewcode-back" href="../../../../dev/api/sas.dataloader.readers.html#sas.dataloader.readers.xml_reader.XMLreader.create_tree">[docs]</a>    <span class="k">def</span> <span class="nf">create_tree</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">):</span>
253        <span class="sd">&quot;&quot;&quot;</span>
254<span class="sd">        Create an element tree for processing from an etree element</span>
255<span class="sd">        </span>
256<span class="sd">        :param root: etree Element(s) </span>
257<span class="sd">        &quot;&quot;&quot;</span>
258        <span class="k">return</span> <span class="n">etree</span><span class="o">.</span><span class="n">ElementTree</span><span class="p">(</span><span class="n">root</span><span class="p">)</span>
259    </div>
260<div class="viewcode-block" id="XMLreader.create_element_from_string"><a class="viewcode-back" href="../../../../dev/api/sas.dataloader.readers.html#sas.dataloader.readers.xml_reader.XMLreader.create_element_from_string">[docs]</a>    <span class="k">def</span> <span class="nf">create_element_from_string</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">xml_string</span><span class="p">):</span>
261        <span class="sd">&quot;&quot;&quot;</span>
262<span class="sd">        Create an element from an XML string</span>
263<span class="sd">        </span>
264<span class="sd">        :param xml_string: A string of xml</span>
265<span class="sd">        &quot;&quot;&quot;</span>
266        <span class="k">return</span> <span class="n">etree</span><span class="o">.</span><span class="n">fromstring</span><span class="p">(</span><span class="n">xml_string</span><span class="p">)</span>
267    </div>
268<div class="viewcode-block" id="XMLreader.create_element"><a class="viewcode-back" href="../../../../dev/api/sas.dataloader.readers.html#sas.dataloader.readers.xml_reader.XMLreader.create_element">[docs]</a>    <span class="k">def</span> <span class="nf">create_element</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">attrib</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">nsmap</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
269        <span class="sd">&quot;&quot;&quot;</span>
270<span class="sd">        Create an XML element for writing to file</span>
271<span class="sd">        </span>
272<span class="sd">        :param name: The name of the element to be created</span>
273<span class="sd">        &quot;&quot;&quot;</span>
274        <span class="k">if</span> <span class="n">attrib</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
275            <span class="n">attrib</span> <span class="o">=</span> <span class="p">{}</span>
276        <span class="k">return</span> <span class="n">etree</span><span class="o">.</span><span class="n">Element</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">attrib</span><span class="p">,</span> <span class="n">nsmap</span><span class="p">)</span>
277    </div>
278<div class="viewcode-block" id="XMLreader.write_text"><a class="viewcode-back" href="../../../../dev/api/sas.dataloader.readers.html#sas.dataloader.readers.xml_reader.XMLreader.write_text">[docs]</a>    <span class="k">def</span> <span class="nf">write_text</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">elem</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
279        <span class="sd">&quot;&quot;&quot;</span>
280<span class="sd">        Write text to an etree Element</span>
281<span class="sd">        </span>
282<span class="sd">        :param elem: etree.Element object</span>
283<span class="sd">        :param text: text to write to the element</span>
284<span class="sd">        &quot;&quot;&quot;</span>
285        <span class="n">elem</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="n">text</span>
286        <span class="k">return</span> <span class="n">elem</span>
287    </div>
288<div class="viewcode-block" id="XMLreader.write_attribute"><a class="viewcode-back" href="../../../../dev/api/sas.dataloader.readers.html#sas.dataloader.readers.xml_reader.XMLreader.write_attribute">[docs]</a>    <span class="k">def</span> <span class="nf">write_attribute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">elem</span><span class="p">,</span> <span class="n">attr_name</span><span class="p">,</span> <span class="n">attr_value</span><span class="p">):</span>
289        <span class="sd">&quot;&quot;&quot;</span>
290<span class="sd">        Write attributes to an Element</span>
291<span class="sd">        </span>
292<span class="sd">        :param elem: etree.Element object</span>
293<span class="sd">        :param attr_name: attribute name to write</span>
294<span class="sd">        :param attr_value: attribute value to set</span>
295<span class="sd">        &quot;&quot;&quot;</span>
296        <span class="n">attr</span> <span class="o">=</span> <span class="n">elem</span><span class="o">.</span><span class="n">attrib</span>
297        <span class="n">attr</span><span class="p">[</span><span class="n">attr_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">attr_value</span>
298        </div>
299<div class="viewcode-block" id="XMLreader.return_processing_instructions"><a class="viewcode-back" href="../../../../dev/api/sas.dataloader.readers.html#sas.dataloader.readers.xml_reader.XMLreader.return_processing_instructions">[docs]</a>    <span class="k">def</span> <span class="nf">return_processing_instructions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
300        <span class="sd">&quot;&quot;&quot;</span>
301<span class="sd">        Get all processing instructions saved when loading the document</span>
302<span class="sd">        </span>
303<span class="sd">        :param tree: etree.ElementTree object to write PIs to</span>
304<span class="sd">        &quot;&quot;&quot;</span>
305        <span class="n">pi_list</span> <span class="o">=</span> <span class="p">[]</span>
306        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">processing_instructions</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
307            <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">processing_instructions</span><span class="p">:</span>
308                <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">processing_instructions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
309                <span class="n">pi_item</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">ProcessingInstruction</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
310                <span class="n">pi_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pi_item</span><span class="p">)</span>
311        <span class="k">return</span> <span class="n">pi_list</span>
312    </div>
313<div class="viewcode-block" id="XMLreader.append"><a class="viewcode-back" href="../../../../dev/api/sas.dataloader.readers.html#sas.dataloader.readers.xml_reader.XMLreader.append">[docs]</a>    <span class="k">def</span> <span class="nf">append</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">element</span><span class="p">,</span> <span class="n">tree</span><span class="p">):</span>
314        <span class="sd">&quot;&quot;&quot;</span>
315<span class="sd">        Append an etree Element to an ElementTree.</span>
316<span class="sd">        </span>
317<span class="sd">        :param element: etree Element to append</span>
318<span class="sd">        :param tree: ElementTree object to append to</span>
319<span class="sd">        &quot;&quot;&quot;</span>
320        <span class="n">tree</span> <span class="o">=</span> <span class="n">tree</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">element</span><span class="p">)</span>
321        <span class="k">return</span> <span class="n">tree</span>
322    </div>
323<div class="viewcode-block" id="XMLreader.ebuilder"><a class="viewcode-back" href="../../../../dev/api/sas.dataloader.readers.html#sas.dataloader.readers.xml_reader.XMLreader.ebuilder">[docs]</a>    <span class="k">def</span> <span class="nf">ebuilder</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parent</span><span class="p">,</span> <span class="n">elementname</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">attrib</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
324        <span class="sd">&quot;&quot;&quot;</span>
325<span class="sd">        Use lxml E builder class with arbitrary inputs.</span>
326<span class="sd">        </span>
327<span class="sd">        :param parnet: The parent element to append a child to</span>
328<span class="sd">        :param elementname: The name of the child in string form</span>
329<span class="sd">        :param text: The element text</span>
330<span class="sd">        :param attrib: A dictionary of attribute names to attribute values</span>
331<span class="sd">        &quot;&quot;&quot;</span>
332        <span class="n">text</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">text</span><span class="p">)</span>
333        <span class="k">if</span> <span class="n">attrib</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
334            <span class="n">attrib</span> <span class="o">=</span> <span class="p">{}</span>
335        <span class="n">elem</span> <span class="o">=</span> <span class="n">E</span><span class="p">(</span><span class="n">elementname</span><span class="p">,</span> <span class="n">attrib</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
336        <span class="n">parent</span> <span class="o">=</span> <span class="n">parent</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">elem</span><span class="p">)</span>
337        <span class="k">return</span> <span class="n">parent</span>
338        </div></div>
339</pre></div>
340
341          </div>
342        </div>
343      </div>
344      <div class="sphinxsidebar">
345        <div class="sphinxsidebarwrapper">
346<div id="searchbox" style="display: none">
347  <h3>Quick search</h3>
348    <form class="search" action="../../../../search.html" method="get">
349      <input type="text" name="q" />
350      <input type="submit" value="Go" />
351      <input type="hidden" name="check_keywords" value="yes" />
352      <input type="hidden" name="area" value="default" />
353    </form>
354    <p class="searchtip" style="font-size: 90%">
355    Enter search terms or a module, class or function name.
356    </p>
357</div>
358<script type="text/javascript">$('#searchbox').show(0);</script>
359        </div>
360      </div>
361      <div class="clearer"></div>
362    </div>
363    <div class="related">
364      <h3>Navigation</h3>
365      <ul>
366        <li class="right" style="margin-right: 10px">
367          <a href="../../../../genindex.html" title="General Index"
368             >index</a></li>
369        <li class="right" >
370          <a href="../../../../py-modindex.html" title="Python Module Index"
371             >modules</a> |</li>
372        <li><a href="../../../../index.html">SasView 3.0.0 documentation</a> &raquo;</li>
373          <li><a href="../../../index.html" >Module code</a> &raquo;</li>
374          <li><a href="../readers.html" >sas.dataloader.readers</a> &raquo;</li> 
375      </ul>
376    </div>
377    <div class="footer">
378        &copy; Copyright 2013, The SasView Project.
379      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
380    </div>
381  </body>
382</html>
Note: See TracBrowser for help on using the repository browser.