add sphinx documentation
[nepi.git] / doc / sphinx / _build / html / _modules / nepi / util / sfarspec_proc.html
diff --git a/doc/sphinx/_build/html/_modules/nepi/util/sfarspec_proc.html b/doc/sphinx/_build/html/_modules/nepi/util/sfarspec_proc.html
new file mode 100644 (file)
index 0000000..9561359
--- /dev/null
@@ -0,0 +1,312 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    
+    <title>nepi.util.sfarspec_proc &mdash; NEPI 3.0 documentation</title>
+    
+    <link rel="stylesheet" href="../../../_static/sphinxdoc.css" type="text/css" />
+    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
+    
+    <script type="text/javascript">
+      var DOCUMENTATION_OPTIONS = {
+        URL_ROOT:    '../../../',
+        VERSION:     '3.0',
+        COLLAPSE_INDEX: false,
+        FILE_SUFFIX: '.html',
+        HAS_SOURCE:  true
+      };
+    </script>
+    <script type="text/javascript" src="../../../_static/jquery.js"></script>
+    <script type="text/javascript" src="../../../_static/underscore.js"></script>
+    <script type="text/javascript" src="../../../_static/doctools.js"></script>
+    <link rel="top" title="NEPI 3.0 documentation" href="../../../index.html" />
+    <link rel="up" title="Module code" href="../../index.html" /> 
+  </head>
+  <body>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             accesskey="I">index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+<div id="searchbox" style="display: none">
+  <h3>Quick search</h3>
+    <form class="search" action="../../../search.html" method="get">
+      <input type="text" name="q" />
+      <input type="submit" value="Go" />
+      <input type="hidden" name="check_keywords" value="yes" />
+      <input type="hidden" name="area" value="default" />
+    </form>
+    <p class="searchtip" style="font-size: 90%">
+    Enter search terms or a module, class or function name.
+    </p>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+        </div>
+      </div>
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          <div class="body">
+            
+  <h1>Source code for nepi.util.sfarspec_proc</h1><div class="highlight"><pre>
+<span class="c">#</span>
+<span class="c">#    NEPI, a framework to manage network experiments</span>
+<span class="c">#    Copyright (C) 2013 INRIA</span>
+<span class="c">#</span>
+<span class="c">#    This program is free software: you can redistribute it and/or modify</span>
+<span class="c">#    it under the terms of the GNU General Public License version 2 as</span>
+<span class="c">#    published by the Free Software Foundation;</span>
+<span class="c">#</span>
+<span class="c">#    This program is distributed in the hope that it will be useful,</span>
+<span class="c">#    but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
+<span class="c">#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
+<span class="c">#    GNU General Public License for more details.</span>
+<span class="c">#</span>
+<span class="c">#    You should have received a copy of the GNU General Public License</span>
+<span class="c">#    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
+<span class="c">#</span>
+
+<span class="kn">from</span> <span class="nn">nepi.util.logger</span> <span class="kn">import</span> <span class="n">Logger</span>
+<span class="k">try</span><span class="p">:</span>
+    <span class="kn">from</span> <span class="nn">sfa.rspecs.rspec</span> <span class="kn">import</span> <span class="n">RSpec</span>
+    <span class="kn">from</span> <span class="nn">sfa.util.xrn</span> <span class="kn">import</span> <span class="n">Xrn</span><span class="p">,</span> <span class="n">get_leaf</span><span class="p">,</span> <span class="n">get_authority</span><span class="p">,</span> <span class="n">hrn_to_urn</span><span class="p">,</span> <span class="n">urn_to_hrn</span>
+<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
+    <span class="n">log</span> <span class="o">=</span> <span class="n">Logger</span><span class="p">(</span><span class="s">&quot;SFA RSpec Processing&quot;</span><span class="p">)</span>
+    <span class="n">log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;Package sfa-common not installed.</span><span class="se">\</span>
+<span class="s">         Could not import sfa.rspecs.rspec and sfa.util.xrn&quot;</span><span class="p">)</span>
+
+<span class="kn">from</span> <span class="nn">types</span> <span class="kn">import</span> <span class="n">StringTypes</span><span class="p">,</span> <span class="n">ListType</span>
+
+
+<div class="viewcode-block" id="SfaRSpecProcessing"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sfarspec_proc.SfaRSpecProcessing">[docs]</a><span class="k">class</span> <span class="nc">SfaRSpecProcessing</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Class to process SFA RSpecs, parse the RSpec replies such as Advertisement RSpecs,</span>
+<span class="sd">    and build in the case of Request RSpecs.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <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">config</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_log</span> <span class="o">=</span> <span class="n">Logger</span><span class="p">(</span><span class="s">&quot;SFA RSpec Processing&quot;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">config</span> <span class="o">=</span> <span class="n">config</span> 
+
+<div class="viewcode-block" id="SfaRSpecProcessing.make_dict_rec"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sfarspec_proc.SfaRSpecProcessing.make_dict_rec">[docs]</a>    <span class="k">def</span> <span class="nf">make_dict_rec</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="p">(</span><span class="n">StringTypes</span><span class="p">,</span> <span class="nb">bool</span><span class="p">)):</span>
+            <span class="k">return</span> <span class="n">obj</span>
+        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
+            <span class="n">objcopy</span> <span class="o">=</span> <span class="p">[]</span>
+            <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">obj</span><span class="p">:</span>
+                <span class="n">objcopy</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">make_dict_rec</span><span class="p">(</span><span class="n">x</span><span class="p">))</span>
+            <span class="k">return</span> <span class="n">objcopy</span>
+        <span class="c"># We thus suppose we have a child of dict</span>
+        <span class="n">objcopy</span> <span class="o">=</span> <span class="p">{}</span>
+        <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
+            <span class="n">objcopy</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">make_dict_rec</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">objcopy</span>
+</div>
+<div class="viewcode-block" id="SfaRSpecProcessing.parse_sfa_rspec"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sfarspec_proc.SfaRSpecProcessing.parse_sfa_rspec">[docs]</a>    <span class="k">def</span> <span class="nf">parse_sfa_rspec</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rspec_string</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Parse the RSpec XML as a string.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="c"># rspec_type and rspec_version should be set in the config of the platform,</span>
+        <span class="c"># we use GENIv3 as default one if not</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">:</span>
+            <span class="k">if</span> <span class="s">&#39;rspec_type&#39;</span> <span class="ow">and</span> <span class="s">&#39;rspec_version&#39;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">:</span>
+                <span class="n">rspec_version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s">&#39;rspec_type&#39;</span><span class="p">]</span> <span class="o">+</span> <span class="s">&#39; &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s">&#39;rspec_version&#39;</span><span class="p">]</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">rspec_version</span> <span class="o">=</span> <span class="s">&#39;GENI 3&#39;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">rspec_version</span><span class="p">)</span>
+        <span class="n">rspec</span> <span class="o">=</span> <span class="n">RSpec</span><span class="p">(</span><span class="n">rspec_string</span><span class="p">,</span> <span class="n">version</span><span class="o">=</span><span class="n">rspec_version</span><span class="p">)</span>
+        
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">nodes</span> <span class="o">=</span> <span class="n">rspec</span><span class="o">.</span><span class="n">version</span><span class="o">.</span><span class="n">get_nodes</span><span class="p">()</span>
+        <span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s">&quot;Could not retrieve nodes in RSpec: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">e</span><span class="p">)</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">leases</span> <span class="o">=</span> <span class="n">rspec</span><span class="o">.</span><span class="n">version</span><span class="o">.</span><span class="n">get_leases</span><span class="p">()</span>
+        <span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s">&quot;Could not retrieve leases in RSpec: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">e</span><span class="p">)</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">links</span> <span class="o">=</span> <span class="n">rspec</span><span class="o">.</span><span class="n">version</span><span class="o">.</span><span class="n">get_links</span><span class="p">()</span>
+        <span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s">&quot;Could not retrieve links in RSpec: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">e</span><span class="p">)</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">channels</span> <span class="o">=</span> <span class="n">rspec</span><span class="o">.</span><span class="n">version</span><span class="o">.</span><span class="n">get_channels</span><span class="p">()</span>
+        <span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span><span class="s">&quot;Could not retrieve channels in RSpec: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">e</span><span class="p">)</span>
+  
+        <span class="n">resources</span> <span class="o">=</span> <span class="p">[]</span> 
+        <span class="c"># Extend object and Format object field&#39;s name</span>
+        <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">nodes</span><span class="p">:</span>
+            <span class="n">node</span><span class="p">[</span><span class="s">&#39;type&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;node&#39;</span>
+            <span class="n">node</span><span class="p">[</span><span class="s">&#39;network_hrn&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">Xrn</span><span class="p">(</span><span class="n">node</span><span class="p">[</span><span class="s">&#39;component_id&#39;</span><span class="p">])</span><span class="o">.</span><span class="n">authority</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="c"># network ? XXX</span>
+            <span class="n">node</span><span class="p">[</span><span class="s">&#39;hrn&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">urn_to_hrn</span><span class="p">(</span><span class="n">node</span><span class="p">[</span><span class="s">&#39;component_id&#39;</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span>
+            <span class="n">node</span><span class="p">[</span><span class="s">&#39;urn&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;component_id&#39;</span><span class="p">]</span>
+            <span class="n">node</span><span class="p">[</span><span class="s">&#39;hostname&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;component_name&#39;</span><span class="p">]</span>
+            <span class="n">node</span><span class="p">[</span><span class="s">&#39;initscripts&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">node</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;pl_initscripts&#39;</span><span class="p">)</span>
+            <span class="k">if</span> <span class="s">&#39;exclusive&#39;</span> <span class="ow">in</span> <span class="n">node</span> <span class="ow">and</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;exclusive&#39;</span><span class="p">]:</span>
+                <span class="n">node</span><span class="p">[</span><span class="s">&#39;exclusive&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;exclusive&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">&#39;true&#39;</span>
+            <span class="c"># XXX This should use a MAP as before</span>
+            <span class="k">if</span> <span class="s">&#39;position&#39;</span> <span class="ow">in</span> <span class="n">node</span><span class="p">:</span> <span class="c"># iotlab</span>
+                <span class="n">node</span><span class="p">[</span><span class="s">&#39;x&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;position&#39;</span><span class="p">][</span><span class="s">&#39;posx&#39;</span><span class="p">]</span>
+                <span class="n">node</span><span class="p">[</span><span class="s">&#39;y&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;position&#39;</span><span class="p">][</span><span class="s">&#39;posy&#39;</span><span class="p">]</span>
+                <span class="n">node</span><span class="p">[</span><span class="s">&#39;z&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;position&#39;</span><span class="p">][</span><span class="s">&#39;posz&#39;</span><span class="p">]</span>
+                <span class="k">del</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;position&#39;</span><span class="p">]</span>
+            <span class="k">if</span> <span class="s">&#39;location&#39;</span> <span class="ow">in</span> <span class="n">node</span><span class="p">:</span>
+                <span class="k">if</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;location&#39;</span><span class="p">]:</span>
+                    <span class="n">node</span><span class="p">[</span><span class="s">&#39;latitude&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;location&#39;</span><span class="p">][</span><span class="s">&#39;latitude&#39;</span><span class="p">]</span>
+                    <span class="n">node</span><span class="p">[</span><span class="s">&#39;longitude&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;location&#39;</span><span class="p">][</span><span class="s">&#39;longitude&#39;</span><span class="p">]</span>
+                <span class="k">del</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;location&#39;</span><span class="p">]</span>
+            <span class="c"># Flatten tags</span>
+            <span class="k">if</span> <span class="s">&#39;tags&#39;</span> <span class="ow">in</span> <span class="n">node</span><span class="p">:</span>
+                <span class="k">if</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;tags&#39;</span><span class="p">]:</span>
+                    <span class="k">for</span> <span class="n">tag</span> <span class="ow">in</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;tags&#39;</span><span class="p">]:</span>
+                        <span class="n">node</span><span class="p">[</span><span class="n">tag</span><span class="p">[</span><span class="s">&#39;tagname&#39;</span><span class="p">]]</span> <span class="o">=</span> <span class="n">tag</span><span class="p">[</span><span class="s">&#39;value&#39;</span><span class="p">]</span>
+                <span class="k">del</span> <span class="n">node</span><span class="p">[</span><span class="s">&#39;tags&#39;</span><span class="p">]</span>
+            
+            <span class="c"># We suppose we have children of dict that cannot be serialized</span>
+            <span class="c"># with xmlrpc, let&#39;s make dict</span>
+            <span class="n">resources</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">make_dict_rec</span><span class="p">(</span><span class="n">node</span><span class="p">))</span>
+        <span class="c"># NOTE a channel is a resource and should not be treated independently</span>
+        <span class="c">#     resource</span>
+        <span class="c">#        |</span>
+        <span class="c">#   +----+------+-------+</span>
+        <span class="c">#   |    |      |       |</span>
+        <span class="c"># node  link  channel  etc.</span>
+        <span class="c">#resources.extend(nodes)</span>
+        <span class="c">#resources.extend(channels)</span>
+        <span class="k">return</span> <span class="p">{</span><span class="s">&#39;resource&#39;</span><span class="p">:</span> <span class="n">resources</span><span class="p">,</span> <span class="s">&#39;lease&#39;</span><span class="p">:</span> <span class="n">leases</span> <span class="p">}</span> 
+<span class="c">#               &#39;channel&#39;: channels \</span>
+<span class="c">#               }</span>
+
+ </div>
+<div class="viewcode-block" id="SfaRSpecProcessing.build_sfa_rspec"><a class="viewcode-back" href="../../../_layout/nepi.util.html#nepi.util.sfarspec_proc.SfaRSpecProcessing.build_sfa_rspec">[docs]</a>    <span class="k">def</span> <span class="nf">build_sfa_rspec</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">slice_id</span><span class="p">,</span> <span class="n">resources</span><span class="p">,</span> <span class="n">properties</span><span class="p">,</span> <span class="n">leases</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Build the XML RSpec from list of resources&#39; urns.</span>
+<span class="sd">        eg. resources = [&quot;urn:publicid:IDN+ple:modenaple+node+planetlab-1.ing.unimo.it&quot;]</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="c">#if isinstance(resources, str):</span>
+        <span class="c">#    resources = eval(resources)</span>
+        <span class="c"># rspec_type and rspec_version should be set in the config of the platform,</span>
+        <span class="c"># we use GENIv3 as default one if not</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">:</span>
+            <span class="k">if</span> <span class="s">&#39;rspec_type&#39;</span> <span class="ow">and</span> <span class="s">&#39;rspec_version&#39;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">:</span>
+                <span class="n">rspec_version</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s">&#39;rspec_type&#39;</span><span class="p">]</span> <span class="o">+</span> <span class="s">&#39; &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s">&#39;rspec_version&#39;</span><span class="p">]</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">rspec_version</span> <span class="o">=</span> <span class="s">&#39;GENI 3&#39;</span>
+
+        <span class="c"># extend rspec version with &quot;content_type&quot;</span>
+        <span class="n">rspec_version</span> <span class="o">+=</span> <span class="s">&#39; request&#39;</span>
+        
+        <span class="n">rspec</span> <span class="o">=</span> <span class="n">RSpec</span><span class="p">(</span><span class="n">version</span><span class="o">=</span><span class="n">rspec_version</span><span class="p">)</span>
+
+        <span class="n">nodes</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="n">channels</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="n">links</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;Building RSpec for resources </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">resources</span><span class="p">)</span>
+        <span class="n">cardinal</span> <span class="o">=</span> <span class="mi">0</span>
+        <span class="n">wilab</span> <span class="o">=</span> <span class="bp">False</span>
+        <span class="k">for</span> <span class="n">urn</span> <span class="ow">in</span> <span class="n">resources</span><span class="p">:</span>
+            <span class="c"># XXX TO BE CORRECTED, this handles None values</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">urn</span><span class="p">:</span>
+                <span class="k">continue</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">urn</span><span class="p">)</span>
+            <span class="n">resource</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
+            <span class="c"># TODO: take into account the case where we send a dict of URNs without keys</span>
+            <span class="c">#resource[&#39;component_id&#39;] = resource.pop(&#39;urn&#39;)</span>
+            <span class="n">resource</span><span class="p">[</span><span class="s">&#39;component_id&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">urn</span>
+            <span class="n">resource_hrn</span><span class="p">,</span> <span class="n">resource_type</span> <span class="o">=</span> <span class="n">urn_to_hrn</span><span class="p">(</span><span class="n">resource</span><span class="p">[</span><span class="s">&#39;component_id&#39;</span><span class="p">])</span>
+            <span class="c"># build component_manager_id</span>
+            <span class="n">top_auth</span> <span class="o">=</span> <span class="n">resource_hrn</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+            <span class="n">cm</span> <span class="o">=</span> <span class="n">urn</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="n">resource</span><span class="p">[</span><span class="s">&#39;component_manager_id&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">+</span><span class="si">%s</span><span class="s">+authority+cm&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">cm</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">top_auth</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="n">resource_type</span> <span class="o">==</span> <span class="s">&#39;node&#39;</span><span class="p">:</span>
+                <span class="c"># XXX dirty hack WiLab !!!</span>
+<span class="c">#                Commented Lucia, doesn&#39;t work for wilabt  </span>
+<span class="c">#                if self.config:</span>
+<span class="c">#                    if &#39;wilab2&#39; in self.config[&#39;sm&#39;]:</span>
+<span class="c">#                        resource[&#39;client_id&#39;] = &quot;PC&quot;</span>
+<span class="c">#                        resource[&#39;sliver_type&#39;] = &quot;raw-pc&quot;</span>
+                <span class="k">if</span> <span class="s">&#39;wilab2&#39;</span> <span class="ow">in</span> <span class="n">urn</span><span class="p">:</span>
+                    <span class="n">wilab</span> <span class="o">=</span> <span class="bp">True</span>
+                    <span class="n">resource</span><span class="p">[</span><span class="s">&#39;client_id&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&quot;node</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">cardinal</span>
+                    <span class="n">resource</span><span class="p">[</span><span class="s">&#39;sliver_type&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&quot;raw-pc&quot;</span>
+                    <span class="n">resource</span><span class="p">[</span><span class="s">&#39;disk_image&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&quot;hola&quot;</span>
+                    <span class="n">top_auth</span> <span class="o">=</span> <span class="n">resource_hrn</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&quot;</span><span class="se">\\</span><span class="s">&quot;</span><span class="p">,</span> <span class="s">&quot;&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;.&#39;</span><span class="p">)</span>
+                    <span class="n">top_auth</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
+                    <span class="n">top_auth</span> <span class="o">=</span> <span class="s">&#39;.&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">top_auth</span><span class="p">)</span>
+                    <span class="n">cm</span> <span class="o">=</span> <span class="n">urn</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="n">resource</span><span class="p">[</span><span class="s">&#39;component_manager_id&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">+</span><span class="si">%s</span><span class="s">+authority+cm&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">cm</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">top_auth</span><span class="p">)</span>
+                    <span class="n">cardinal</span> <span class="o">+=</span> <span class="mi">1</span>
+                <span class="n">nodes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">resource</span><span class="p">)</span>
+            <span class="k">elif</span> <span class="n">resource_type</span> <span class="o">==</span> <span class="s">&#39;link&#39;</span><span class="p">:</span>
+                <span class="n">links</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">resource</span><span class="p">)</span>
+            <span class="k">elif</span> <span class="n">resource_type</span> <span class="o">==</span> <span class="s">&#39;channel&#39;</span><span class="p">:</span>
+                <span class="n">channels</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">resource</span><span class="p">)</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="k">raise</span> <span class="ne">Exception</span><span class="p">,</span> <span class="s">&quot;Not supported type of resource&quot;</span> 
+        
+        <span class="n">rspec</span><span class="o">.</span><span class="n">version</span><span class="o">.</span><span class="n">add_nodes</span><span class="p">(</span><span class="n">nodes</span><span class="p">,</span> <span class="n">rspec_content_type</span><span class="o">=</span><span class="s">&quot;request&quot;</span><span class="p">)</span>
+        <span class="c">#rspec.version.add_leases(leases)</span>
+        <span class="c">#rspec.version.add_links(links)</span>
+        <span class="c">#rspec.version.add_channels(channels)</span>
+
+        <span class="c">#self._log.debug(&quot;request rspec: %s&quot;%rspec.toxml())</span>
+        <span class="n">string</span> <span class="o">=</span> <span class="n">rspec</span><span class="o">.</span><span class="n">toxml</span><span class="p">()</span>
+        <span class="k">if</span> <span class="n">wilab</span> <span class="ow">and</span> <span class="n">properties</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
+            <span class="c">## dirty hack for the f4f demo</span>
+            <span class="n">b</span> <span class="o">=</span> <span class="n">string</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">&#39;</span><span class="se">\n</span><span class="s">&#39;</span><span class="p">)</span>
+            <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">b</span><span class="p">):</span>
+                <span class="k">if</span> <span class="s">&#39;sliver_type name=&quot;raw-pc&quot;&#39;</span> <span class="ow">in</span> <span class="n">n</span><span class="p">:</span>
+                    <span class="n">b</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;&lt;sliver_type name=&quot;raw-pc&quot;&gt;&#39;</span>
+                    <span class="n">b</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">,</span> <span class="s">&#39;&lt;disk_image name=&quot;urn:publicid:IDN+wall2.ilabt.iminds.be+image+emulab-ops//</span><span class="si">%s</span><span class="s">&quot;/&gt;&#39;</span> <span class="o">%</span> <span class="n">properties</span><span class="p">[</span><span class="s">&#39;disk_image&#39;</span><span class="p">])</span>
+                    <span class="c">#b.insert(i+1, &#39;&lt;disk_image name=&quot;urn:publicid:IDN+wilab2.ilabt.iminds.be+image+nepi:%s&quot;/&gt;&#39; % properties[&#39;disk_image&#39;])</span>
+                    <span class="n">b</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">2</span><span class="p">,</span> <span class="s">&#39;&lt;/sliver_type&gt;&#39;</span><span class="p">)</span>
+            <span class="n">string</span> <span class="o">=</span> <span class="s">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">b</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;request rspec : </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">string</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">string</span>
+</pre></div></div></div>
+
+          </div>
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="related">
+      <h3>Navigation</h3>
+      <ul>
+        <li class="right" style="margin-right: 10px">
+          <a href="../../../genindex.html" title="General Index"
+             >index</a></li>
+        <li class="right" >
+          <a href="../../../py-modindex.html" title="Python Module Index"
+             >modules</a> |</li>
+        <li><a href="../../../index.html">NEPI 3.0 documentation</a> &raquo;</li>
+          <li><a href="../../index.html" >Module code</a> &raquo;</li> 
+      </ul>
+    </div>
+    <div class="footer">
+        &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    </div>
+  </body>
+</html>
\ No newline at end of file