update NEPI version on sphinx docs
[nepi.git] / doc / sphinx / _build / html / _modules / nepi / execution / attribute.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.execution.attribute &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.execution.attribute</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
85 <span class="c">### Attribute Types</span>
86 <div class="viewcode-block" id="Types"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Types">[docs]</a><span class="k">class</span> <span class="nc">Types</span><span class="p">:</span>
87     <span class="sd">&quot;&quot;&quot; Allowed types for the Attribute value</span>
88 <span class="sd">    &quot;&quot;&quot;</span>
89     <span class="n">String</span>  <span class="o">=</span> <span class="s">&quot;STRING&quot;</span>
90     <span class="n">Bool</span>    <span class="o">=</span> <span class="s">&quot;BOOL&quot;</span>
91     <span class="n">Enumerate</span>    <span class="o">=</span> <span class="s">&quot;ENUM&quot;</span>
92     <span class="n">Double</span>  <span class="o">=</span> <span class="s">&quot;DOUBLE&quot;</span>
93     <span class="n">Integer</span> <span class="o">=</span> <span class="s">&quot;INTEGER&quot;</span>
94
95 <span class="c">### Attribute Flags</span></div>
96 <div class="viewcode-block" id="Flags"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Flags">[docs]</a><span class="k">class</span> <span class="nc">Flags</span><span class="p">:</span>
97     <span class="sd">&quot;&quot;&quot; Flags to characterize the scope of an Attribute</span>
98 <span class="sd">    &quot;&quot;&quot;</span>
99     <span class="c"># Attribute value can not be read (it is hidden to the user) </span>
100     <span class="n">NoRead</span>    <span class="o">=</span> <span class="mi">1</span> <span class="c"># 1</span>
101     
102     <span class="c"># Attribute value can not be modified (it is not editable by the user)</span>
103     <span class="n">NoWrite</span>   <span class="o">=</span> <span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="mi">1</span> <span class="c"># 2</span>
104     
105     <span class="c"># Attribute value can be modified only before deployment</span>
106     <span class="n">Design</span>  <span class="o">=</span> <span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="mi">2</span> <span class="c"># 4</span>
107
108     <span class="c"># Attribute value will be used at deployment time for initial configuration</span>
109     <span class="n">Construct</span>    <span class="o">=</span> <span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="mi">3</span> <span class="c">#  8</span>
110
111     <span class="c"># Attribute provides credentials to access resources</span>
112     <span class="n">Credential</span>  <span class="o">=</span> <span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="mi">4</span>  <span class="o">|</span> <span class="n">Design</span> <span class="c"># 16 + 4</span>
113
114     <span class="c"># Attribute is a filter used to discover resources</span>
115     <span class="n">Filter</span>  <span class="o">=</span> <span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="mi">5</span> <span class="o">|</span> <span class="n">Design</span> <span class="c"># 32 + 4</span>
116
117     <span class="c"># Attribute Flag is reserved for internal RM usage (i.e. should be </span>
118     <span class="c"># transparent to the user)</span>
119     <span class="n">Reserved</span>  <span class="o">=</span> <span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="mi">6</span> <span class="c"># 64</span>
120
121     <span class="c"># Attribute global is set to all resources of rtype</span>
122     <span class="n">Global</span>  <span class="o">=</span> <span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="mi">7</span> <span class="c"># 128</span>
123
124 </div>
125 <div class="viewcode-block" id="Attribute"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Attribute">[docs]</a><span class="k">class</span> <span class="nc">Attribute</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
126     <span class="sd">&quot;&quot;&quot; An Attribute exposes a configuration parameter of a resource</span>
127 <span class="sd">    &quot;&quot;&quot;</span>
128
129     <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">name</span><span class="p">,</span> <span class="n">help</span><span class="p">,</span> <span class="nb">type</span> <span class="o">=</span> <span class="n">Types</span><span class="o">.</span><span class="n">String</span><span class="p">,</span>
130             <span class="n">flags</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">default</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">allowed</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span>
131             <span class="nb">range</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">set_hook</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
132         <span class="sd">&quot;&quot;&quot;</span>
133 <span class="sd">        :param name: Name of the Attribute</span>
134 <span class="sd">        :type name: str</span>
135
136 <span class="sd">        :param help: Description of the Attribute</span>
137 <span class="sd">        :type help: str</span>
138 <span class="sd">        </span>
139 <span class="sd">        :param type: The type expected for the Attribute value.</span>
140 <span class="sd">                     Should be one of Attribute.Types</span>
141 <span class="sd">        :type type: str</span>
142
143 <span class="sd">        :param flags: Defines Attribute behavior (i.e. whether it is read-only,</span>
144 <span class="sd">                read and write, etc). This parameter must take its values from</span>
145 <span class="sd">                Attribute.Flags. Flags values can be bitwised</span>
146 <span class="sd">        :type flags: hex</span>
147
148 <span class="sd">        :param default: Default value for the Attribute</span>
149 <span class="sd">        :type default: Depends on the type of Attribute</span>
150 <span class="sd">        </span>
151 <span class="sd">        :param allowed: List of values that the Attribute can take. </span>
152 <span class="sd">                This parameter is only meaningful for Enumerate type Attributes</span>
153 <span class="sd">        :type allowed: list</span>
154 <span class="sd">        </span>
155 <span class="sd">        :param range: (max, min) tuple with range of possible values for</span>
156 <span class="sd">                Attributes.</span>
157 <span class="sd">                This parameter is only meaningful for Integer or Double type</span>
158 <span class="sd">                Attributes</span>
159 <span class="sd">        :type range: (int, int) or (float, float)</span>
160 <span class="sd">        </span>
161 <span class="sd">        :param set_hook: Function that will be executed whenever a new </span>
162 <span class="sd">                value is set for the Attribute.</span>
163 <span class="sd">        :type set_hook: function</span>
164
165 <span class="sd">    &quot;&quot;&quot;</span>
166         <span class="bp">self</span><span class="o">.</span><span class="n">_name</span> <span class="o">=</span> <span class="n">name</span>
167         <span class="bp">self</span><span class="o">.</span><span class="n">_help</span> <span class="o">=</span> <span class="n">help</span>
168         <span class="bp">self</span><span class="o">.</span><span class="n">_type</span> <span class="o">=</span> <span class="nb">type</span>
169         <span class="bp">self</span><span class="o">.</span><span class="n">_flags</span> <span class="o">=</span> <span class="n">flags</span> <span class="ow">or</span> <span class="mi">0</span>
170         <span class="bp">self</span><span class="o">.</span><span class="n">_allowed</span> <span class="o">=</span> <span class="n">allowed</span>
171         <span class="bp">self</span><span class="o">.</span><span class="n">_range</span> <span class="o">=</span> <span class="nb">range</span>
172         <span class="bp">self</span><span class="o">.</span><span class="n">_default</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_value</span> <span class="o">=</span> <span class="n">default</span>
173         <span class="c"># callback to be invoked upon changing the </span>
174         <span class="c"># attribute value</span>
175         <span class="bp">self</span><span class="o">.</span><span class="n">set_hook</span> <span class="o">=</span> <span class="n">set_hook</span>
176
177     <span class="nd">@property</span>
178 <div class="viewcode-block" id="Attribute.name"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Attribute.name">[docs]</a>    <span class="k">def</span> <span class="nf">name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
179         <span class="sd">&quot;&quot;&quot; Returns the name of the Attribute &quot;&quot;&quot;</span>
180         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_name</span>
181 </div>
182     <span class="nd">@property</span>
183 <div class="viewcode-block" id="Attribute.default"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Attribute.default">[docs]</a>    <span class="k">def</span> <span class="nf">default</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
184         <span class="sd">&quot;&quot;&quot; Returns the default value of the Attribute &quot;&quot;&quot;</span>
185         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_default</span>
186 </div>
187     <span class="nd">@property</span>
188 <div class="viewcode-block" id="Attribute.type"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Attribute.type">[docs]</a>    <span class="k">def</span> <span class="nf">type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
189         <span class="sd">&quot;&quot;&quot; Returns the type of the Attribute &quot;&quot;&quot;</span>
190         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_type</span>
191 </div>
192     <span class="nd">@property</span>
193 <div class="viewcode-block" id="Attribute.help"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Attribute.help">[docs]</a>    <span class="k">def</span> <span class="nf">help</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
194         <span class="sd">&quot;&quot;&quot; Returns the description of the Attribute &quot;&quot;&quot;</span>
195         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_help</span>
196 </div>
197     <span class="nd">@property</span>
198 <div class="viewcode-block" id="Attribute.flags"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Attribute.flags">[docs]</a>    <span class="k">def</span> <span class="nf">flags</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
199         <span class="sd">&quot;&quot;&quot; Returns the flags of the Attribute &quot;&quot;&quot;</span>
200         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_flags</span>
201 </div>
202     <span class="nd">@property</span>
203 <div class="viewcode-block" id="Attribute.allowed"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Attribute.allowed">[docs]</a>    <span class="k">def</span> <span class="nf">allowed</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
204         <span class="sd">&quot;&quot;&quot; Returns the set of allowed values for the Attribute &quot;&quot;&quot;</span>
205         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_allowed</span>
206 </div>
207     <span class="nd">@property</span>
208 <div class="viewcode-block" id="Attribute.range"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Attribute.range">[docs]</a>    <span class="k">def</span> <span class="nf">range</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
209         <span class="sd">&quot;&quot;&quot; Returns the range of allowed numerical values for the Attribute &quot;&quot;&quot;</span>
210         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_range</span>
211 </div>
212 <div class="viewcode-block" id="Attribute.has_flag"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Attribute.has_flag">[docs]</a>    <span class="k">def</span> <span class="nf">has_flag</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">flag</span><span class="p">):</span>
213         <span class="sd">&quot;&quot;&quot; Returns True if the Attribute has the flag &#39;flag&#39;</span>
214
215 <span class="sd">        :param flag: Flag to be checked</span>
216 <span class="sd">        :type flag: Flags</span>
217 <span class="sd">        &quot;&quot;&quot;</span>
218         <span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_flags</span> <span class="o">&amp;</span> <span class="n">flag</span><span class="p">)</span> <span class="o">==</span> <span class="n">flag</span>
219 </div>
220 <div class="viewcode-block" id="Attribute.get_value"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Attribute.get_value">[docs]</a>    <span class="k">def</span> <span class="nf">get_value</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
221         <span class="sd">&quot;&quot;&quot; Returns the value of the Attribute &quot;&quot;&quot;</span>
222         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_value</span>
223 </div>
224 <div class="viewcode-block" id="Attribute.set_value"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Attribute.set_value">[docs]</a>    <span class="k">def</span> <span class="nf">set_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
225         <span class="sd">&quot;&quot;&quot; Configure a new value for the Attribute &quot;&quot;&quot;</span>
226         <span class="n">valid</span> <span class="o">=</span> <span class="bp">True</span>
227
228         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">Types</span><span class="o">.</span><span class="n">Enumerate</span><span class="p">:</span>
229             <span class="n">valid</span> <span class="o">=</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_allowed</span>
230
231         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="ow">in</span> <span class="p">[</span><span class="n">Types</span><span class="o">.</span><span class="n">Double</span><span class="p">,</span> <span class="n">Types</span><span class="o">.</span><span class="n">Integer</span><span class="p">]</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">range</span><span class="p">:</span>
232             <span class="p">(</span><span class="nb">min</span><span class="p">,</span> <span class="nb">max</span><span class="p">)</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">range</span>
233
234             <span class="n">value</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
235
236             <span class="n">valid</span> <span class="o">=</span> <span class="p">(</span><span class="n">value</span> <span class="o">&gt;=</span> <span class="nb">min</span> <span class="ow">and</span> <span class="n">value</span> <span class="o">&lt;=</span> <span class="nb">max</span><span class="p">)</span> 
237         
238         <span class="n">valid</span> <span class="o">=</span> <span class="n">valid</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_valid_value</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
239
240         <span class="k">if</span> <span class="n">valid</span><span class="p">:</span> 
241             <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">set_hook</span><span class="p">:</span>
242                 <span class="c"># Hook receives old value, new value</span>
243                 <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">set_hook</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_value</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
244
245             <span class="bp">self</span><span class="o">.</span><span class="n">_value</span> <span class="o">=</span> <span class="n">value</span>
246         <span class="k">else</span><span class="p">:</span>
247             <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">&quot;Invalid value </span><span class="si">%s</span><span class="s"> for attribute </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span>
248                     <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
249 </div>
250     <span class="n">value</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">get_value</span><span class="p">,</span> <span class="n">set_value</span><span class="p">)</span>
251
252 <div class="viewcode-block" id="Attribute.is_valid_value"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Attribute.is_valid_value">[docs]</a>    <span class="k">def</span> <span class="nf">is_valid_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
253         <span class="sd">&quot;&quot;&quot; Attribute subclasses will override this method to add </span>
254 <span class="sd">        adequate validation&quot;&quot;&quot;</span>
255         <span class="k">return</span> <span class="bp">True</span>
256 </div>
257     <span class="nd">@property</span>
258 <div class="viewcode-block" id="Attribute.has_changed"><a class="viewcode-back" href="../../../_layout/nepi.execution.html#nepi.execution.attribute.Attribute.has_changed">[docs]</a>    <span class="k">def</span> <span class="nf">has_changed</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
259         <span class="sd">&quot;&quot;&quot; Returns True if the value has changed from the default &quot;&quot;&quot;</span>
260         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">value</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">default</span>
261 </pre></div></div></div>
262
263           </div>
264         </div>
265       </div>
266       <div class="clearer"></div>
267     </div>
268     <div class="related">
269       <h3>Navigation</h3>
270       <ul>
271         <li class="right" style="margin-right: 10px">
272           <a href="../../../genindex.html" title="General Index"
273              >index</a></li>
274         <li class="right" >
275           <a href="../../../py-modindex.html" title="Python Module Index"
276              >modules</a> |</li>
277         <li><a href="../../../index.html">NEPI 3.2 documentation</a> &raquo;</li>
278           <li><a href="../../index.html" >Module code</a> &raquo;</li> 
279       </ul>
280     </div>
281     <div class="footer">
282         &copy; Copyright 2014, Alina Quereilhac, Lucia Guevgeozian Odizzio, Julien Tribino.
283       Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
284     </div>
285   </body>
286 </html>