add sphinx documentation
[nepi.git] / doc / sphinx / _build / html / _modules / nepi / resources / omf / omf_client.html
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>nepi.resources.omf.omf_client &mdash; NEPI 3.0 documentation</title>
10     
11     <link rel="stylesheet" href="../../../../_static/sphinxdoc.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',
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     <link rel="top" title="NEPI 3.0 documentation" href="../../../../index.html" />
27     <link rel="up" title="Module code" href="../../../index.html" /> 
28   </head>
29   <body>
30     <div class="related">
31       <h3>Navigation</h3>
32       <ul>
33         <li class="right" style="margin-right: 10px">
34           <a href="../../../../genindex.html" title="General Index"
35              accesskey="I">index</a></li>
36         <li class="right" >
37           <a href="../../../../py-modindex.html" title="Python Module Index"
38              >modules</a> |</li>
39         <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
40           <li><a href="../../../index.html" accesskey="U">Module code</a> &raquo;</li> 
41       </ul>
42     </div>
43       <div class="sphinxsidebar">
44         <div class="sphinxsidebarwrapper">
45 <div id="searchbox" style="display: none">
46   <h3>Quick search</h3>
47     <form class="search" action="../../../../search.html" method="get">
48       <input type="text" name="q" />
49       <input type="submit" value="Go" />
50       <input type="hidden" name="check_keywords" value="yes" />
51       <input type="hidden" name="area" value="default" />
52     </form>
53     <p class="searchtip" style="font-size: 90%">
54     Enter search terms or a module, class or function name.
55     </p>
56 </div>
57 <script type="text/javascript">$('#searchbox').show(0);</script>
58         </div>
59       </div>
60
61     <div class="document">
62       <div class="documentwrapper">
63         <div class="bodywrapper">
64           <div class="body">
65             
66   <h1>Source code for nepi.resources.omf.omf_client</h1><div class="highlight"><pre>
67 <span class="c">#</span>
68 <span class="c">#    NEPI, a framework to manage network experiments</span>
69 <span class="c">#    Copyright (C) 2013 INRIA</span>
70 <span class="c">#</span>
71 <span class="c">#    This program is free software: you can redistribute it and/or modify</span>
72 <span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
73 <span class="c">#    published by the Free Software Foundation;</span>
74 <span class="c">#</span>
75 <span class="c">#    This program is distributed in the hope that it will be useful,</span>
76 <span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
77 <span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
78 <span class="c">#    GNU General Public License for more details.</span>
79 <span class="c">#</span>
80 <span class="c">#    You should have received a copy of the GNU General Public License</span>
81 <span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
82 <span class="c">#</span>
83 <span class="c"># Author: Alina Quereilhac &lt;alina.quereilhac@inria.fr&gt;</span>
84 <span class="c">#         Julien Tribino &lt;julien.tribino@inria.fr&gt;</span>
85
86 <span class="kn">from</span> <span class="nn">nepi.util.logger</span> <span class="kn">import</span> <span class="n">Logger</span>
87 <span class="kn">from</span> <span class="nn">nepi.resources.omf.omf6_parser</span> <span class="kn">import</span> <span class="n">OMF6Parser</span>
88 <span class="k">try</span><span class="p">:</span>
89     <span class="kn">import</span> <span class="nn">sleekxmpp</span>
90     <span class="kn">from</span> <span class="nn">sleekxmpp.exceptions</span> <span class="kn">import</span> <span class="n">IqError</span><span class="p">,</span> <span class="n">IqTimeout</span>
91     <span class="k">class</span> <span class="nc">BaseOMFClient</span><span class="p">(</span><span class="n">sleekxmpp</span><span class="o">.</span><span class="n">ClientXMPP</span><span class="p">):</span>
92         <span class="k">pass</span>
93 <span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
94     <span class="n">msg</span> <span class="o">=</span> <span class="p">(</span><span class="s">&quot;SleekXMPP is not installed. Without this library &quot;</span>
95           <span class="s">&quot;you will be not able to use OMF Resources &quot;</span>
96           <span class="s">&quot;if you want to install SleekXmpp: </span><span class="se">\n</span><span class="s">&quot;</span>
97           <span class="s">&quot; git clone -b develop git://github.com/fritzy/SleekXMPP.git </span><span class="se">\n</span><span class="s">&quot;</span>
98           <span class="s">&quot; cd SleekXMPP </span><span class="se">\n</span><span class="s">&quot;</span>
99           <span class="s">&quot; sudo python setup.py install</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">)</span>
100
101     <span class="n">logger</span> <span class="o">=</span> <span class="n">Logger</span><span class="p">(</span><span class="s">&quot;BaseOMFClient&quot;</span><span class="p">)</span>
102     <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
103
104 <div class="viewcode-block" id="BaseOMFClient"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.BaseOMFClient">[docs]</a>    <span class="k">class</span> <span class="nc">BaseOMFClient</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
105         <span class="k">pass</span>
106 </div>
107 <span class="kn">import</span> <span class="nn">traceback</span>
108 <span class="kn">import</span> <span class="nn">xml.etree.ElementTree</span> <span class="kn">as</span> <span class="nn">ET</span>
109
110 <span class="c"># inherit from BaseXmpp and XMLstream classes</span>
111 <div class="viewcode-block" id="OMFClient"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient">[docs]</a><span class="k">class</span> <span class="nc">OMFClient</span><span class="p">(</span><span class="n">BaseOMFClient</span><span class="p">,</span> <span class="n">Logger</span><span class="p">):</span> 
112     <span class="sd">&quot;&quot;&quot;</span>
113 <span class="sd">    .. class:: Class Args :</span>
114 <span class="sd">      </span>
115 <span class="sd">        :param jid: Jabber Id (= Xmpp Slice + Date)</span>
116 <span class="sd">        :type jid: str</span>
117 <span class="sd">        :param password: Jabber Password (= Xmpp Password)</span>
118 <span class="sd">        :type password: str</span>
119
120 <span class="sd">    .. note::</span>
121
122 <span class="sd">       This class is an XMPP Client with customized method</span>
123
124 <span class="sd">    &quot;&quot;&quot;</span>
125
126     <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">jid</span><span class="p">,</span> <span class="n">password</span><span class="p">):</span>
127         <span class="sd">&quot;&quot;&quot;</span>
128
129 <span class="sd">        :param jid: Jabber Id (= Xmpp Slice + Date)</span>
130 <span class="sd">        :type jid: str</span>
131 <span class="sd">        :param password: Jabber Password (= Xmpp Password)</span>
132 <span class="sd">        :type password: str</span>
133
134
135 <span class="sd">        &quot;&quot;&quot;</span>
136         <span class="n">Logger</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s">&quot;OMFClient&quot;</span><span class="p">)</span>
137
138         <span class="n">sleekxmpp</span><span class="o">.</span><span class="n">ClientXMPP</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">jid</span><span class="p">,</span> <span class="n">password</span><span class="p">)</span>
139         <span class="bp">self</span><span class="o">.</span><span class="n">_ready</span> <span class="o">=</span> <span class="bp">False</span>
140         <span class="bp">self</span><span class="o">.</span><span class="n">_registered</span> <span class="o">=</span> <span class="bp">False</span>
141         <span class="bp">self</span><span class="o">.</span><span class="n">_server</span> <span class="o">=</span> <span class="bp">None</span>
142         <span class="bp">self</span><span class="o">.</span><span class="n">_parser</span> <span class="o">=</span> <span class="bp">None</span>
143
144         <span class="bp">self</span><span class="o">.</span><span class="n">register_plugin</span><span class="p">(</span><span class="s">&#39;xep_0077&#39;</span><span class="p">)</span> <span class="c"># In-band registration</span>
145         <span class="bp">self</span><span class="o">.</span><span class="n">register_plugin</span><span class="p">(</span><span class="s">&#39;xep_0030&#39;</span><span class="p">)</span>
146         <span class="bp">self</span><span class="o">.</span><span class="n">register_plugin</span><span class="p">(</span><span class="s">&#39;xep_0059&#39;</span><span class="p">)</span>
147         <span class="bp">self</span><span class="o">.</span><span class="n">register_plugin</span><span class="p">(</span><span class="s">&#39;xep_0060&#39;</span><span class="p">)</span> <span class="c"># PubSub </span>
148
149         <span class="bp">self</span><span class="o">.</span><span class="n">add_event_handler</span><span class="p">(</span><span class="s">&quot;session_start&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">)</span>
150         <span class="bp">self</span><span class="o">.</span><span class="n">add_event_handler</span><span class="p">(</span><span class="s">&quot;register&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">register</span><span class="p">)</span>
151         <span class="bp">self</span><span class="o">.</span><span class="n">add_event_handler</span><span class="p">(</span><span class="s">&quot;pubsub_publish&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">handle_omf_message</span><span class="p">)</span>
152
153         <span class="c">#Init the parser</span>
154         <span class="bp">self</span><span class="o">.</span><span class="n">_init_parser</span><span class="p">()</span>
155         
156     <span class="k">def</span> <span class="nf">_init_parser</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
157         <span class="sd">&quot;&quot;&quot; Init the parser depending on the OMF Version</span>
158
159 <span class="sd">        &quot;&quot;&quot;</span>
160         <span class="bp">self</span><span class="o">.</span><span class="n">_parser</span> <span class="o">=</span> <span class="n">OMF6Parser</span><span class="p">()</span>
161
162     <span class="nd">@property</span>
163 <div class="viewcode-block" id="OMFClient.ready"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.ready">[docs]</a>    <span class="k">def</span> <span class="nf">ready</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
164         <span class="sd">&quot;&quot;&quot; Check if the client is ready</span>
165
166 <span class="sd">        &quot;&quot;&quot;</span>
167         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ready</span>
168 </div>
169 <div class="viewcode-block" id="OMFClient.start"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.start">[docs]</a>    <span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">):</span>
170         <span class="sd">&quot;&quot;&quot; Send presence to the Xmppp Server. This function is called directly by the sleekXmpp library</span>
171
172 <span class="sd">        &quot;&quot;&quot;</span>
173         <span class="bp">self</span><span class="o">.</span><span class="n">send_presence</span><span class="p">()</span>
174         <span class="bp">self</span><span class="o">.</span><span class="n">_ready</span> <span class="o">=</span> <span class="bp">True</span>
175         <span class="bp">self</span><span class="o">.</span><span class="n">_server</span> <span class="o">=</span> <span class="s">&quot;pubsub.</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span><span class="o">.</span><span class="n">domain</span>
176 </div>
177 <div class="viewcode-block" id="OMFClient.register"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.register">[docs]</a>    <span class="k">def</span> <span class="nf">register</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iq</span><span class="p">):</span>
178         <span class="sd">&quot;&quot;&quot;  Register to the Xmppp Server. This function is called directly by the sleekXmpp library</span>
179
180 <span class="sd">        &quot;&quot;&quot;</span>
181         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_registered</span><span class="p">:</span>
182             <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; </span><span class="si">%s</span><span class="s"> already registered!&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span>
183             <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
184             <span class="k">return</span> 
185
186         <span class="n">resp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">Iq</span><span class="p">()</span>
187         <span class="n">resp</span><span class="p">[</span><span class="s">&#39;type&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;set&#39;</span>
188         <span class="n">resp</span><span class="p">[</span><span class="s">&#39;register&#39;</span><span class="p">][</span><span class="s">&#39;username&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span><span class="o">.</span><span class="n">user</span>
189         <span class="n">resp</span><span class="p">[</span><span class="s">&#39;register&#39;</span><span class="p">][</span><span class="s">&#39;password&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">password</span>
190
191         <span class="k">try</span><span class="p">:</span>
192             <span class="n">resp</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">now</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
193             <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Account created for </span><span class="si">%s</span><span class="s">!&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span>
194             <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
195             <span class="bp">self</span><span class="o">.</span><span class="n">_registered</span> <span class="o">=</span> <span class="bp">True</span>
196         <span class="k">except</span> <span class="n">IqError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
197             <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Could not register account: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">e</span><span class="o">.</span><span class="n">iq</span><span class="p">[</span><span class="s">&#39;error&#39;</span><span class="p">][</span><span class="s">&#39;text&#39;</span><span class="p">]</span>
198             <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
199         <span class="k">except</span> <span class="n">IqTimeout</span><span class="p">:</span>
200             <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; No response from server.&quot;</span>
201             <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
202 </div>
203 <div class="viewcode-block" id="OMFClient.unregister"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.unregister">[docs]</a>    <span class="k">def</span> <span class="nf">unregister</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
204         <span class="sd">&quot;&quot;&quot;  Unregister from the Xmppp Server.</span>
205
206 <span class="sd">        &quot;&quot;&quot;</span>
207         <span class="k">try</span><span class="p">:</span>
208             <span class="bp">self</span><span class="o">.</span><span class="n">plugin</span><span class="p">[</span><span class="s">&#39;xep_0077&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">cancel_registration</span><span class="p">(</span>
209                 <span class="n">ifrom</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span><span class="o">.</span><span class="n">full</span><span class="p">)</span>
210             <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Account unregistered for </span><span class="si">%s</span><span class="s">!&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span>
211             <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
212         <span class="k">except</span> <span class="n">IqError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
213             <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Could not unregister account: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">e</span><span class="o">.</span><span class="n">iq</span><span class="p">[</span><span class="s">&#39;error&#39;</span><span class="p">][</span><span class="s">&#39;text&#39;</span><span class="p">]</span>
214             <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
215         <span class="k">except</span> <span class="n">IqTimeout</span><span class="p">:</span>
216             <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; No response from server.&quot;</span>
217             <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
218 </div>
219 <div class="viewcode-block" id="OMFClient.nodes"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.nodes">[docs]</a>    <span class="k">def</span> <span class="nf">nodes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
220         <span class="sd">&quot;&quot;&quot;  Get all the nodes of the Xmppp Server.</span>
221
222 <span class="sd">        &quot;&quot;&quot;</span>
223         <span class="k">try</span><span class="p">:</span>
224             <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="p">[</span><span class="s">&#39;xep_0060&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">get_nodes</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="p">)</span>
225             <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s">&#39;disco_items&#39;</span><span class="p">][</span><span class="s">&#39;items&#39;</span><span class="p">]:</span>
226                 <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39; - </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">item</span><span class="p">)</span>
227                 <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
228             <span class="k">return</span> <span class="n">result</span>
229         <span class="k">except</span><span class="p">:</span>
230             <span class="n">error</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
231             <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39;Could not retrieve node list.</span><span class="se">\n</span><span class="s">traceback:</span><span class="se">\n</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">error</span>
232             <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
233 </div>
234 <div class="viewcode-block" id="OMFClient.subscriptions"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.subscriptions">[docs]</a>    <span class="k">def</span> <span class="nf">subscriptions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
235         <span class="sd">&quot;&quot;&quot;  Get all the subscriptions of the Xmppp Server.</span>
236
237 <span class="sd">        &quot;&quot;&quot;</span>
238         <span class="k">try</span><span class="p">:</span>
239             <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="p">[</span><span class="s">&#39;xep_0060&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">get_subscriptions</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="p">)</span>
240                 <span class="c">#self.boundjid.full)</span>
241             <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s">&#39;node&#39;</span><span class="p">]:</span>
242                 <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39; - </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
243                 <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
244             <span class="k">return</span> <span class="n">result</span>
245         <span class="k">except</span><span class="p">:</span>
246             <span class="n">error</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
247             <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39; Could not retrieve subscriptions.</span><span class="se">\n</span><span class="s">traceback:</span><span class="se">\n</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">error</span>
248             <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
249 </div>
250 <div class="viewcode-block" id="OMFClient.create"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.create">[docs]</a>    <span class="k">def</span> <span class="nf">create</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
251         <span class="sd">&quot;&quot;&quot;  Create the topic corresponding to the node</span>
252
253 <span class="sd">        :param node: Name of the topic, corresponding to the node (ex : omf.plexus.wlab17)</span>
254 <span class="sd">        :type node: str</span>
255
256 <span class="sd">        &quot;&quot;&quot;</span>
257         <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Create Topic : &quot;</span> <span class="o">+</span> <span class="n">node</span>
258         <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
259    
260         <span class="n">config</span> <span class="o">=</span> <span class="bp">self</span><span class="p">[</span><span class="s">&#39;xep_0004&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">makeForm</span><span class="p">(</span><span class="s">&#39;submit&#39;</span><span class="p">)</span>
261         <span class="n">config</span><span class="o">.</span><span class="n">add_field</span><span class="p">(</span><span class="n">var</span><span class="o">=</span><span class="s">&#39;pubsub#node_type&#39;</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="s">&#39;leaf&#39;</span><span class="p">)</span>
262         <span class="n">config</span><span class="o">.</span><span class="n">add_field</span><span class="p">(</span><span class="n">var</span><span class="o">=</span><span class="s">&#39;pubsub#notify_retract&#39;</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="s">&#39;0&#39;</span><span class="p">)</span>
263         <span class="n">config</span><span class="o">.</span><span class="n">add_field</span><span class="p">(</span><span class="n">var</span><span class="o">=</span><span class="s">&#39;pubsub#publish_model&#39;</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="s">&#39;open&#39;</span><span class="p">)</span>
264         <span class="n">config</span><span class="o">.</span><span class="n">add_field</span><span class="p">(</span><span class="n">var</span><span class="o">=</span><span class="s">&#39;pubsub#persist_items&#39;</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="s">&#39;1&#39;</span><span class="p">)</span>
265         <span class="n">config</span><span class="o">.</span><span class="n">add_field</span><span class="p">(</span><span class="n">var</span><span class="o">=</span><span class="s">&#39;pubsub#max_items&#39;</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="s">&#39;1&#39;</span><span class="p">)</span>
266         <span class="n">config</span><span class="o">.</span><span class="n">add_field</span><span class="p">(</span><span class="n">var</span><span class="o">=</span><span class="s">&#39;pubsub#title&#39;</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="n">node</span><span class="p">)</span>
267
268         <span class="k">try</span><span class="p">:</span>
269             <span class="bp">self</span><span class="p">[</span><span class="s">&#39;xep_0060&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">create_node</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="p">,</span> <span class="n">node</span><span class="p">,</span> <span class="n">config</span> <span class="o">=</span> <span class="n">config</span><span class="p">)</span>
270         <span class="k">except</span><span class="p">:</span>
271             <span class="c">#error = traceback.format_exc()</span>
272             <span class="c">#msg = &#39; Could not create topic: %s\ntraceback:\n%s&#39; % (node, error)</span>
273             <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39;Could not create the topic : &#39;</span><span class="o">+</span><span class="n">node</span><span class="o">+</span><span class="s">&#39; . Maybe the topic already exists&#39;</span>
274             <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
275 </div>
276 <div class="viewcode-block" id="OMFClient.delete"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.delete">[docs]</a>    <span class="k">def</span> <span class="nf">delete</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
277         <span class="sd">&quot;&quot;&quot;  Delete the topic corresponding to the node</span>
278
279 <span class="sd">        :param node: Name of the topic, corresponding to the node (ex : omf.plexus.wlab17)</span>
280 <span class="sd">        :type node: str</span>
281
282 <span class="sd">        &quot;&quot;&quot;</span>
283         <span class="c"># To check if the queue are well empty at the end</span>
284         <span class="c">#print &quot; length of the queue : &quot; + str(self.send_queue.qsize())</span>
285         <span class="c">#print &quot; length of the queue : &quot; + str(self.event_queue.qsize())</span>
286         <span class="k">try</span><span class="p">:</span>
287             <span class="bp">self</span><span class="p">[</span><span class="s">&#39;xep_0060&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">delete_node</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="p">,</span> <span class="n">node</span><span class="p">)</span>
288             <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39; Deleted node: </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">node</span>
289             <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
290         <span class="k">except</span><span class="p">:</span>
291             <span class="c">#error = traceback.format_exc()</span>
292             <span class="c">#msg = &#39; Could not delete topic: %s\ntraceback:\n%s&#39; % (node, error)</span>
293             <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39;Could not delete the topic : &#39;</span><span class="o">+</span><span class="n">node</span><span class="o">+</span><span class="s">&#39; . Maybe It is not the owner of the topic&#39;</span>
294             <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
295     </div>
296 <div class="viewcode-block" id="OMFClient.publish"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.publish">[docs]</a>    <span class="k">def</span> <span class="nf">publish</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
297         <span class="sd">&quot;&quot;&quot;  Publish the data to the corresponding topic</span>
298
299 <span class="sd">        :param data: Data that will be published</span>
300 <span class="sd">        :type data: str</span>
301 <span class="sd">        :param node: Name of the topic</span>
302 <span class="sd">        :type node: str</span>
303
304 <span class="sd">        &quot;&quot;&quot;</span> 
305
306         <span class="n">msg</span> <span class="o">=</span> <span class="s">&quot; Publish to Topic : &quot;</span> <span class="o">+</span> <span class="n">node</span>
307         <span class="bp">self</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
308         <span class="k">try</span><span class="p">:</span>
309             <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="p">[</span><span class="s">&#39;xep_0060&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">publish</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="p">,</span><span class="n">node</span><span class="p">,</span><span class="n">payload</span><span class="o">=</span><span class="n">data</span><span class="p">)</span>
310             <span class="c"># id = result[&#39;pubsub&#39;][&#39;publish&#39;][&#39;item&#39;][&#39;id&#39;]</span>
311             <span class="c"># print(&#39;Published at item id: %s&#39; % id)</span>
312         <span class="k">except</span><span class="p">:</span>
313             <span class="n">error</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
314             <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39; Could not publish to: </span><span class="si">%s</span><span class="se">\n</span><span class="s">traceback:</span><span class="se">\n</span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">node</span><span class="p">,</span> <span class="n">error</span><span class="p">)</span>
315             <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
316 </div>
317 <div class="viewcode-block" id="OMFClient.get"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.get">[docs]</a>    <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
318         <span class="sd">&quot;&quot;&quot;  Get the item</span>
319
320 <span class="sd">        :param data: data from which the items will be get back</span>
321 <span class="sd">        :type data: str</span>
322
323
324 <span class="sd">        &quot;&quot;&quot;</span>
325         <span class="k">try</span><span class="p">:</span>
326             <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="p">[</span><span class="s">&#39;xep_0060&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">get_item</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span><span class="p">,</span>
327                 <span class="n">data</span><span class="p">)</span>
328             <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s">&#39;pubsub&#39;</span><span class="p">][</span><span class="s">&#39;items&#39;</span><span class="p">][</span><span class="s">&#39;substanzas&#39;</span><span class="p">]:</span>
329                 <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39;Retrieved item </span><span class="si">%s</span><span class="s">: </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="s">&#39;id&#39;</span><span class="p">],</span> <span class="n">tostring</span><span class="p">(</span><span class="n">item</span><span class="p">[</span><span class="s">&#39;payload&#39;</span><span class="p">]))</span>
330                 <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
331         <span class="k">except</span><span class="p">:</span>
332             <span class="n">error</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
333             <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39; Could not retrieve item </span><span class="si">%s</span><span class="s"> from topic </span><span class="si">%s</span><span class="se">\n</span><span class="s">traceback:</span><span class="se">\n</span><span class="si">%s</span><span class="s">&#39;</span> \
334                     <span class="o">%</span> <span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span><span class="p">,</span> <span class="n">error</span><span class="p">)</span>
335             <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
336 </div>
337 <div class="viewcode-block" id="OMFClient.retract"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.retract">[docs]</a>    <span class="k">def</span> <span class="nf">retract</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
338         <span class="sd">&quot;&quot;&quot;  Retract the item</span>
339
340 <span class="sd">        :param data: data from which the item will be retracted</span>
341 <span class="sd">        :type data: str</span>
342
343 <span class="sd">        &quot;&quot;&quot;</span>
344         <span class="k">try</span><span class="p">:</span>
345             <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="p">[</span><span class="s">&#39;xep_0060&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">retract</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
346             <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39; Retracted item </span><span class="si">%s</span><span class="s"> from topic </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span><span class="p">)</span>
347             <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
348         <span class="k">except</span><span class="p">:</span>
349             <span class="n">error</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
350             <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39;Could not retract item </span><span class="si">%s</span><span class="s"> from topic </span><span class="si">%s</span><span class="se">\n</span><span class="s">traceback:</span><span class="se">\n</span><span class="si">%s</span><span class="s">&#39;</span> \
351                     <span class="o">%</span> <span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span><span class="p">,</span> <span class="n">error</span><span class="p">)</span>
352             <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
353 </div>
354 <div class="viewcode-block" id="OMFClient.purge"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.purge">[docs]</a>    <span class="k">def</span> <span class="nf">purge</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
355         <span class="sd">&quot;&quot;&quot;  Purge the information in the server</span>
356
357 <span class="sd">        &quot;&quot;&quot;</span>
358         <span class="k">try</span><span class="p">:</span>
359             <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="p">[</span><span class="s">&#39;xep_0060&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">purge</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span><span class="p">)</span>
360             <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39; Purged all items from topic </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span>
361             <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
362         <span class="k">except</span><span class="p">:</span>
363             <span class="n">error</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
364             <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39; Could not purge items from topic </span><span class="si">%s</span><span class="se">\n</span><span class="s">traceback:</span><span class="se">\n</span><span class="si">%s</span><span class="s">&#39;</span> \
365                     <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span><span class="p">,</span> <span class="n">error</span><span class="p">)</span>
366             <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
367 </div>
368 <div class="viewcode-block" id="OMFClient.subscribe"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.subscribe">[docs]</a>    <span class="k">def</span> <span class="nf">subscribe</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
369         <span class="sd">&quot;&quot;&quot; Subscribe to a topic</span>
370
371 <span class="sd">        :param node: Name of the topic</span>
372 <span class="sd">        :type node: str</span>
373
374 <span class="sd">        &quot;&quot;&quot;</span>
375         <span class="k">try</span><span class="p">:</span>
376             <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="p">[</span><span class="s">&#39;xep_0060&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">subscribe</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="p">,</span> <span class="n">node</span><span class="p">)</span>
377             <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39; Subscribed </span><span class="si">%s</span><span class="s"> to topic </span><span class="si">%s</span><span class="s">&#39;</span> \
378                     <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span><span class="o">.</span><span class="n">user</span><span class="p">,</span> <span class="n">node</span><span class="p">)</span>
379             <span class="c">#self.info(msg)</span>
380             <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
381         <span class="k">except</span><span class="p">:</span>
382             <span class="n">error</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
383             <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39; Could not subscribe </span><span class="si">%s</span><span class="s"> to topic </span><span class="si">%s</span><span class="se">\n</span><span class="s">traceback:</span><span class="se">\n</span><span class="si">%s</span><span class="s">&#39;</span> \
384                     <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span><span class="o">.</span><span class="n">bare</span><span class="p">,</span> <span class="n">node</span><span class="p">,</span> <span class="n">error</span><span class="p">)</span>
385             <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
386 </div>
387 <div class="viewcode-block" id="OMFClient.unsubscribe"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.unsubscribe">[docs]</a>    <span class="k">def</span> <span class="nf">unsubscribe</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">node</span><span class="p">):</span>
388         <span class="sd">&quot;&quot;&quot; Unsubscribe to a topic</span>
389
390 <span class="sd">        :param node: Name of the topic</span>
391 <span class="sd">        :type node: str</span>
392
393 <span class="sd">        &quot;&quot;&quot;</span>
394         <span class="k">try</span><span class="p">:</span>
395             <span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="p">[</span><span class="s">&#39;xep_0060&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">unsubscribe</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_server</span><span class="p">,</span> <span class="n">node</span><span class="p">)</span>
396             <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39; Unsubscribed </span><span class="si">%s</span><span class="s"> from topic </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span><span class="o">.</span><span class="n">bare</span><span class="p">,</span> <span class="n">node</span><span class="p">)</span>
397             <span class="bp">self</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
398         <span class="k">except</span><span class="p">:</span>
399             <span class="n">error</span> <span class="o">=</span> <span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">()</span>
400             <span class="n">msg</span> <span class="o">=</span> <span class="s">&#39; Could not unsubscribe </span><span class="si">%s</span><span class="s"> from topic </span><span class="si">%s</span><span class="se">\n</span><span class="s">traceback:</span><span class="se">\n</span><span class="si">%s</span><span class="s">&#39;</span> \
401                     <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">boundjid</span><span class="o">.</span><span class="n">bare</span><span class="p">,</span> <span class="n">node</span><span class="p">,</span> <span class="n">error</span><span class="p">)</span>
402             <span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
403 </div>
404 <div class="viewcode-block" id="OMFClient.check_mailbox"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.check_mailbox">[docs]</a>    <span class="k">def</span> <span class="nf">check_mailbox</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">itype</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span>
405         <span class="sd">&quot;&quot;&quot; Check the mail box</span>
406
407 <span class="sd">        :param itype: type of mail</span>
408 <span class="sd">        :type itype: str</span>
409 <span class="sd">        :param attr: value wanted</span>
410 <span class="sd">        :type attr: str</span>
411
412 <span class="sd">        &quot;&quot;&quot;</span>
413         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parser</span><span class="o">.</span><span class="n">check_mailbox</span><span class="p">(</span><span class="n">itype</span><span class="p">,</span> <span class="n">attr</span><span class="p">)</span>
414
415 </div>
416 <div class="viewcode-block" id="OMFClient.handle_omf_message"><a class="viewcode-back" href="../../../../_layout/nepi.resources.omf.html#nepi.resources.omf.omf_client.OMFClient.handle_omf_message">[docs]</a>    <span class="k">def</span> <span class="nf">handle_omf_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">iq</span><span class="p">):</span>
417         <span class="sd">&quot;&quot;&quot; Handle published/received message </span>
418
419 <span class="sd">        :param iq: Stanzas that is currently published/received</span>
420 <span class="sd">        :type iq: Iq Stanza</span>
421
422 <span class="sd">        &quot;&quot;&quot;</span>
423         <span class="bp">self</span><span class="o">.</span><span class="n">_parser</span><span class="o">.</span><span class="n">handle</span><span class="p">(</span><span class="n">iq</span><span class="p">)</span>
424 </pre></div></div></div>
425
426           </div>
427         </div>
428       </div>
429       <div class="clearer"></div>
430     </div>
431     <div class="related">
432       <h3>Navigation</h3>
433       <ul>
434         <li class="right" style="margin-right: 10px">
435           <a href="../../../../genindex.html" title="General Index"
436              >index</a></li>
437         <li class="right" >
438           <a href="../../../../py-modindex.html" title="Python Module Index"
439              >modules</a> |</li>
440         <li><a href="../../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
441           <li><a href="../../../index.html" >Module code</a> &raquo;</li> 
442       </ul>
443     </div>
444     <div class="footer">
445         &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
446       Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
447     </div>
448   </body>
449 </html>