update NEPI version on sphinx docs
[nepi.git] / doc / sphinx / _build / html / _modules / nepi / util / sfarspec_proc.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.util.sfarspec_proc &mdash; NEPI 3.2 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.2',
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.2 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.2 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.util.sfarspec_proc</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
84 <span class="kn">from</span> <span class="nn">nepi.util.logger</span> <span class="kn">import</span> <span class="n">Logger</span>
85 <span class="k">try</span><span class="p">:</span>
86     <span class="kn">from</span> <span class="nn">sfa.rspecs.rspec</span> <span class="kn">import</span> <span class="n">RSpec</span>
87     <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>
88 <span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
89     <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>
90     <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>
91 <span class="s">         Could not import sfa.rspecs.rspec and sfa.util.xrn&quot;</span><span class="p">)</span>
92
93 <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>
94
95
96 <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>
97     <span class="sd">&quot;&quot;&quot;</span>
98 <span class="sd">    Class to process SFA RSpecs, parse the RSpec replies such as Advertisement RSpecs,</span>
99 <span class="sd">    and build in the case of Request RSpecs.</span>
100 <span class="sd">    &quot;&quot;&quot;</span>
101     <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>
102         <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>
103         <span class="bp">self</span><span class="o">.</span><span class="n">config</span> <span class="o">=</span> <span class="n">config</span> 
104
105 <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>
106         <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>
107             <span class="k">return</span> <span class="n">obj</span>
108         <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>
109             <span class="n">objcopy</span> <span class="o">=</span> <span class="p">[]</span>
110             <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">obj</span><span class="p">:</span>
111                 <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>
112             <span class="k">return</span> <span class="n">objcopy</span>
113         <span class="c"># We thus suppose we have a child of dict</span>
114         <span class="n">objcopy</span> <span class="o">=</span> <span class="p">{}</span>
115         <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>
116             <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>
117         <span class="k">return</span> <span class="n">objcopy</span>
118 </div>
119 <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>
120         <span class="sd">&quot;&quot;&quot;</span>
121 <span class="sd">        Parse the RSpec XML as a string.</span>
122 <span class="sd">        &quot;&quot;&quot;</span>
123         <span class="c"># rspec_type and rspec_version should be set in the config of the platform,</span>
124         <span class="c"># we use GENIv3 as default one if not</span>
125         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">:</span>
126             <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>
127                 <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>
128         <span class="k">else</span><span class="p">:</span>
129             <span class="n">rspec_version</span> <span class="o">=</span> <span class="s">&#39;GENI 3&#39;</span>
130         <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>
131         <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>
132         
133         <span class="k">try</span><span class="p">:</span>
134             <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>
135         <span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
136             <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>
137         <span class="k">try</span><span class="p">:</span>
138             <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>
139         <span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
140             <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>
141         <span class="k">try</span><span class="p">:</span>
142             <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>
143         <span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
144             <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>
145         <span class="k">try</span><span class="p">:</span>
146             <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>
147         <span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
148             <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>
149   
150         <span class="n">resources</span> <span class="o">=</span> <span class="p">[]</span> 
151         <span class="c"># Extend object and Format object field&#39;s name</span>
152         <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="n">nodes</span><span class="p">:</span>
153             <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>
154             <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>
155             <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>
156             <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>
157             <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>
158             <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>
159             <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>
160                 <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>
161  
162             <span class="c"># XXX This should use a MAP as before</span>
163             <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>
164                 <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>
165                 <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>
166                 <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>
167                 <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>
168  
169             <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>
170                 <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>
171                     <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>
172                     <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>
173                 <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>
174  
175             <span class="c"># Flatten tags</span>
176             <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>
177                 <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>
178                     <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>
179                         <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>
180                 <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>
181  
182             
183             <span class="c"># We suppose we have children of dict that cannot be serialized</span>
184             <span class="c"># with xmlrpc, let&#39;s make dict</span>
185             <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>
186  
187         <span class="c"># NOTE a channel is a resource and should not be treated independently</span>
188         <span class="c">#     resource</span>
189         <span class="c">#        |</span>
190         <span class="c">#   +----+------+-------+</span>
191         <span class="c">#   |    |      |       |</span>
192         <span class="c"># node  link  channel  etc.</span>
193         <span class="c">#resources.extend(nodes)</span>
194         <span class="c">#resources.extend(channels)</span>
195  
196         <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> 
197 <span class="c">#               &#39;channel&#39;: channels \</span>
198 <span class="c">#               }</span>
199
200  </div>
201 <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>
202         <span class="sd">&quot;&quot;&quot;</span>
203 <span class="sd">        Build the XML RSpec from list of resources&#39; urns.</span>
204 <span class="sd">        eg. resources = [&quot;urn:publicid:IDN+ple:modenaple+node+planetlab-1.ing.unimo.it&quot;]</span>
205 <span class="sd">        &quot;&quot;&quot;</span>
206         <span class="c">#if isinstance(resources, str):</span>
207         <span class="c">#    resources = eval(resources)</span>
208         <span class="c"># rspec_type and rspec_version should be set in the config of the platform,</span>
209         <span class="c"># we use GENIv3 as default one if not</span>
210         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">config</span><span class="p">:</span>
211             <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>
212                 <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>
213         <span class="k">else</span><span class="p">:</span>
214             <span class="n">rspec_version</span> <span class="o">=</span> <span class="s">&#39;GENI 3&#39;</span>
215
216         <span class="c"># extend rspec version with &quot;content_type&quot;</span>
217         <span class="n">rspec_version</span> <span class="o">+=</span> <span class="s">&#39; request&#39;</span>
218         
219         <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>
220
221         <span class="n">nodes</span> <span class="o">=</span> <span class="p">[]</span>
222         <span class="n">channels</span> <span class="o">=</span> <span class="p">[]</span>
223         <span class="n">links</span> <span class="o">=</span> <span class="p">[]</span>
224         <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>
225         <span class="n">cardinal</span> <span class="o">=</span> <span class="mi">0</span>
226         <span class="n">wilab</span> <span class="o">=</span> <span class="bp">False</span>
227         <span class="k">for</span> <span class="n">urn</span> <span class="ow">in</span> <span class="n">resources</span><span class="p">:</span>
228             <span class="c"># XXX TO BE CORRECTED, this handles None values</span>
229             <span class="k">if</span> <span class="ow">not</span> <span class="n">urn</span><span class="p">:</span>
230                 <span class="k">continue</span>
231             <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>
232             <span class="n">resource</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
233             <span class="c"># TODO: take into account the case where we send a dict of URNs without keys</span>
234             <span class="c">#resource[&#39;component_id&#39;] = resource.pop(&#39;urn&#39;)</span>
235             <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>
236             <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>
237             <span class="c"># build component_manager_id</span>
238             <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>
239             <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>
240             <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>
241
242             <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>
243                 <span class="c"># XXX dirty hack WiLab !!!</span>
244 <span class="c">#                Commented Lucia, doesn&#39;t work for wilabt  </span>
245 <span class="c">#                if self.config:</span>
246 <span class="c">#                    if &#39;wilab2&#39; in self.config[&#39;sm&#39;]:</span>
247 <span class="c">#                        resource[&#39;client_id&#39;] = &quot;PC&quot;</span>
248 <span class="c">#                        resource[&#39;sliver_type&#39;] = &quot;raw-pc&quot;</span>
249                 <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>
250                     <span class="n">wilab</span> <span class="o">=</span> <span class="bp">True</span>
251                     <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>
252                     <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>
253                     <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>
254                     <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>
255                     <span class="n">top_auth</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span>
256                     <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>
257                     <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>
258                     <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>
259                     <span class="n">cardinal</span> <span class="o">+=</span> <span class="mi">1</span>
260                 <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>
261             <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>
262                 <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>
263             <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>
264                 <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>
265             <span class="k">else</span><span class="p">:</span>
266                 <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> 
267         
268         <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>
269         <span class="c">#rspec.version.add_leases(leases)</span>
270         <span class="c">#rspec.version.add_links(links)</span>
271         <span class="c">#rspec.version.add_channels(channels)</span>
272
273         <span class="c">#self._log.debug(&quot;request rspec: %s&quot;%rspec.toxml())</span>
274         <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>
275         <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>
276             <span class="c">## dirty hack for the f4f demo</span>
277             <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>
278             <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>
279                 <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>
280                     <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>
281                     <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>
282                     <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>
283                     <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>
284             <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>
285         <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>
286         <span class="k">return</span> <span class="n">string</span>
287 </pre></div></div></div>
288
289           </div>
290         </div>
291       </div>
292       <div class="clearer"></div>
293     </div>
294     <div class="related">
295       <h3>Navigation</h3>
296       <ul>
297         <li class="right" style="margin-right: 10px">
298           <a href="../../../genindex.html" title="General Index"
299              >index</a></li>
300         <li class="right" >
301           <a href="../../../py-modindex.html" title="Python Module Index"
302              >modules</a> |</li>
303         <li><a href="../../../index.html">NEPI 3.2 documentation</a> &raquo;</li>
304           <li><a href="../../index.html" >Module code</a> &raquo;</li> 
305       </ul>
306     </div>
307     <div class="footer">
308         &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
309       Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
310     </div>
311   </body>
312 </html>