Salome HOME
add doc/build for EZ direct html or pdf
[tools/sat.git] / doc / build / html / _modules / src / product.html
1
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
3   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4
5
6 <html xmlns="http://www.w3.org/1999/xhtml">
7   <head>
8     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
9     
10     <title>src.product &mdash; salomeTools 5.0.0dev documentation</title>
11     
12     <link rel="stylesheet" href="../../_static/alabaster.css" type="text/css" />
13     <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
14     <link rel="stylesheet" href="/volatile/wambeke/SAT5/SAT5_S840_MATIX24/SAT/doc/src/custom.css" type="text/css" />
15     
16     <script type="text/javascript">
17       var DOCUMENTATION_OPTIONS = {
18         URL_ROOT:    '../../',
19         VERSION:     '5.0.0dev',
20         COLLAPSE_INDEX: false,
21         FILE_SUFFIX: '.html',
22         HAS_SOURCE:  true
23       };
24     </script>
25     <script type="text/javascript" src="../../_static/jquery.js"></script>
26     <script type="text/javascript" src="../../_static/underscore.js"></script>
27     <script type="text/javascript" src="../../_static/doctools.js"></script>
28     <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
29     <link rel="top" title="salomeTools 5.0.0dev documentation" href="../../index.html" />
30     <link rel="up" title="Module code" href="../index.html" />
31    
32   <link rel="stylesheet" href="../../_static/custom.css" type="text/css" />
33   
34   
35   <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
36
37   </head>
38   <body>
39   
40
41     <div class="document">
42       <div class="documentwrapper">
43         <div class="bodywrapper">
44           <div class="body" role="main">
45             
46   <h1>Source code for src.product</h1><div class="highlight"><pre>
47 <span class="c">#!/usr/bin/env python</span>
48 <span class="c">#-*- coding:utf-8 -*-</span>
49 <span class="c">#  Copyright (C) 2010-2012  CEA/DEN</span>
50 <span class="c">#</span>
51 <span class="c">#  This library is free software; you can redistribute it and/or</span>
52 <span class="c">#  modify it under the terms of the GNU Lesser General Public</span>
53 <span class="c">#  License as published by the Free Software Foundation; either</span>
54 <span class="c">#  version 2.1 of the License.</span>
55 <span class="c">#</span>
56 <span class="c">#  This library is distributed in the hope that it will be useful,</span>
57 <span class="c">#  but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
58 <span class="c">#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
59 <span class="c">#  Lesser General Public License for more details.</span>
60 <span class="c">#</span>
61 <span class="c">#  You should have received a copy of the GNU Lesser General Public</span>
62 <span class="c">#  License along with this library; if not, write to the Free Software</span>
63 <span class="c">#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA</span>
64
65 <span class="sd">&quot;&quot;&quot;\</span>
66 <span class="sd">In this file are implemented the methods </span>
67 <span class="sd">relative to the product notion of salomeTools</span>
68 <span class="sd">&quot;&quot;&quot;</span>
69
70 <span class="kn">import</span> <span class="nn">os</span>
71 <span class="kn">import</span> <span class="nn">re</span>
72
73 <span class="kn">import</span> <span class="nn">src</span>
74 <span class="kn">import</span> <span class="nn">src.debug</span> <span class="kn">as</span> <span class="nn">DBG</span>
75
76 <span class="n">AVAILABLE_VCS</span> <span class="o">=</span> <span class="p">[</span><span class="s">&#39;git&#39;</span><span class="p">,</span> <span class="s">&#39;svn&#39;</span><span class="p">,</span> <span class="s">&#39;cvs&#39;</span><span class="p">]</span>
77 <span class="n">config_expression</span> <span class="o">=</span> <span class="s">&quot;^config-\d+$&quot;</span>
78 <span class="n">VERSION_DELIMITER</span> <span class="o">=</span> <span class="s">&quot;_to_&quot;</span>
79
80 <div class="viewcode-block" id="get_product_config"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.get_product_config">[docs]</a><span class="k">def</span> <span class="nf">get_product_config</span><span class="p">(</span><span class="n">config</span><span class="p">,</span> <span class="n">product_name</span><span class="p">,</span> <span class="n">with_install_dir</span><span class="o">=</span><span class="bp">True</span><span class="p">):</span>
81     <span class="sd">&quot;&quot;&quot;Get the specific configuration of a product from the global configuration</span>
82 <span class="sd">    </span>
83 <span class="sd">    :param config Config: The global configuration</span>
84 <span class="sd">    :param product_name str: The name of the product</span>
85 <span class="sd">    :param with_install_dir boolean: If false, do not provide an install </span>
86 <span class="sd">                                     directory (at false only for internal use </span>
87 <span class="sd">                                     of the function check_config_exists)</span>
88 <span class="sd">    :return: the specific configuration of the product</span>
89 <span class="sd">    :rtype: Config</span>
90 <span class="sd">    &quot;&quot;&quot;</span>
91     
92     <span class="c"># Get the version of the product from the application definition</span>
93     <span class="n">version</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">APPLICATION</span><span class="o">.</span><span class="n">products</span><span class="p">[</span><span class="n">product_name</span><span class="p">]</span>
94     <span class="c"># if no version, then take the default one defined in the application</span>
95     <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">version</span><span class="p">,</span> <span class="nb">bool</span><span class="p">):</span> 
96         <span class="n">version</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">APPLICATION</span><span class="o">.</span><span class="n">tag</span>      
97     
98     <span class="c"># Define debug and dev modes</span>
99     <span class="c"># Get the tag if a dictionary is given in APPLICATION.products for the</span>
100     <span class="c"># current product </span>
101     <span class="n">debug</span> <span class="o">=</span> <span class="s">&#39;no&#39;</span>
102     <span class="n">dev</span> <span class="o">=</span> <span class="s">&#39;no&#39;</span>
103     <span class="n">base</span> <span class="o">=</span> <span class="s">&#39;maybe&#39;</span>
104     <span class="n">section</span> <span class="o">=</span> <span class="bp">None</span>
105     <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">version</span><span class="p">,</span> <span class="n">src</span><span class="o">.</span><span class="n">pyconf</span><span class="o">.</span><span class="n">Mapping</span><span class="p">):</span>
106         <span class="n">dic_version</span> <span class="o">=</span> <span class="n">version</span>
107         <span class="c"># Get the version/tag</span>
108         <span class="k">if</span> <span class="ow">not</span> <span class="s">&#39;tag&#39;</span> <span class="ow">in</span> <span class="n">dic_version</span><span class="p">:</span>
109             <span class="n">version</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">APPLICATION</span><span class="o">.</span><span class="n">tag</span>
110         <span class="k">else</span><span class="p">:</span>
111             <span class="n">version</span> <span class="o">=</span> <span class="n">dic_version</span><span class="o">.</span><span class="n">tag</span>
112         
113         <span class="c"># Get the debug if any</span>
114         <span class="k">if</span> <span class="s">&#39;debug&#39;</span> <span class="ow">in</span> <span class="n">dic_version</span><span class="p">:</span>
115             <span class="n">debug</span> <span class="o">=</span> <span class="n">dic_version</span><span class="o">.</span><span class="n">debug</span>
116         
117         <span class="c"># Get the dev if any</span>
118         <span class="k">if</span> <span class="s">&#39;dev&#39;</span> <span class="ow">in</span> <span class="n">dic_version</span><span class="p">:</span>
119             <span class="n">dev</span> <span class="o">=</span> <span class="n">dic_version</span><span class="o">.</span><span class="n">dev</span>
120         
121         <span class="c"># Get the base if any</span>
122         <span class="k">if</span> <span class="s">&#39;base&#39;</span> <span class="ow">in</span> <span class="n">dic_version</span><span class="p">:</span>
123             <span class="n">base</span> <span class="o">=</span> <span class="n">dic_version</span><span class="o">.</span><span class="n">base</span>
124
125         <span class="c"># Get the section if any</span>
126         <span class="k">if</span> <span class="s">&#39;section&#39;</span> <span class="ow">in</span> <span class="n">dic_version</span><span class="p">:</span>
127             <span class="n">section</span> <span class="o">=</span> <span class="n">dic_version</span><span class="o">.</span><span class="n">section</span>
128     
129     <span class="n">vv</span> <span class="o">=</span> <span class="n">version</span>
130     <span class="c"># substitute some character with _ in order to get the correct definition</span>
131     <span class="c"># in config.PRODUCTS. This is done because the pyconf tool does not handle</span>
132     <span class="c"># the . and - characters </span>
133     <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="s">&quot;.-&quot;</span><span class="p">:</span> <span class="n">vv</span> <span class="o">=</span> <span class="n">vv</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="s">&quot;_&quot;</span><span class="p">)</span>
134     
135     <span class="n">prod_info</span> <span class="o">=</span> <span class="bp">None</span>
136     <span class="k">if</span> <span class="n">product_name</span> <span class="ow">in</span> <span class="n">config</span><span class="o">.</span><span class="n">PRODUCTS</span><span class="p">:</span>
137         <span class="c"># Search for the product description in the configuration</span>
138         <span class="n">prod_info</span> <span class="o">=</span> <span class="n">get_product_section</span><span class="p">(</span><span class="n">config</span><span class="p">,</span> <span class="n">product_name</span><span class="p">,</span> <span class="n">vv</span><span class="p">,</span> <span class="n">section</span><span class="p">)</span>
139         
140         <span class="c"># merge opt_depend in depend</span>
141         <span class="k">if</span> <span class="n">prod_info</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="s">&#39;opt_depend&#39;</span> <span class="ow">in</span> <span class="n">prod_info</span><span class="p">:</span>
142             <span class="k">for</span> <span class="n">depend</span> <span class="ow">in</span> <span class="n">prod_info</span><span class="o">.</span><span class="n">opt_depend</span><span class="p">:</span>
143                 <span class="k">if</span> <span class="n">depend</span> <span class="ow">in</span> <span class="n">config</span><span class="o">.</span><span class="n">APPLICATION</span><span class="o">.</span><span class="n">products</span><span class="p">:</span>
144                     <span class="n">prod_info</span><span class="o">.</span><span class="n">depend</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">depend</span><span class="p">,</span><span class="s">&#39;&#39;</span><span class="p">)</span>
145         
146         <span class="c"># In case of a product get with a vcs, </span>
147         <span class="c"># put the tag (equal to the version)</span>
148         <span class="k">if</span> <span class="n">prod_info</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">prod_info</span><span class="o">.</span><span class="n">get_source</span> <span class="ow">in</span> <span class="n">AVAILABLE_VCS</span><span class="p">:</span>
149             
150             <span class="k">if</span> <span class="n">prod_info</span><span class="o">.</span><span class="n">get_source</span> <span class="o">==</span> <span class="s">&#39;git&#39;</span><span class="p">:</span>
151                 <span class="n">prod_info</span><span class="o">.</span><span class="n">git_info</span><span class="o">.</span><span class="n">tag</span> <span class="o">=</span> <span class="n">version</span>
152             
153             <span class="k">if</span> <span class="n">prod_info</span><span class="o">.</span><span class="n">get_source</span> <span class="o">==</span> <span class="s">&#39;svn&#39;</span><span class="p">:</span>
154                 <span class="n">prod_info</span><span class="o">.</span><span class="n">svn_info</span><span class="o">.</span><span class="n">tag</span> <span class="o">=</span> <span class="n">version</span>
155             
156             <span class="k">if</span> <span class="n">prod_info</span><span class="o">.</span><span class="n">get_source</span> <span class="o">==</span> <span class="s">&#39;cvs&#39;</span><span class="p">:</span>
157                 <span class="n">prod_info</span><span class="o">.</span><span class="n">cvs_info</span><span class="o">.</span><span class="n">tag</span> <span class="o">=</span> <span class="n">version</span>
158         
159         <span class="c"># In case of a fixed product, </span>
160         <span class="c"># define the install_dir (equal to the version)</span>
161         <span class="k">if</span> <span class="n">prod_info</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">version</span><span class="p">):</span>
162             <span class="n">prod_info</span><span class="o">.</span><span class="n">install_dir</span> <span class="o">=</span> <span class="n">version</span>
163             <span class="n">prod_info</span><span class="o">.</span><span class="n">get_source</span> <span class="o">=</span> <span class="s">&quot;fixed&quot;</span>
164         
165         <span class="c"># Check if the product is defined as native in the application</span>
166         <span class="k">if</span> <span class="n">prod_info</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
167             <span class="k">if</span> <span class="n">version</span> <span class="o">==</span> <span class="s">&quot;native&quot;</span><span class="p">:</span>
168                 <span class="n">prod_info</span><span class="o">.</span><span class="n">get_source</span> <span class="o">=</span> <span class="s">&quot;native&quot;</span>
169             <span class="k">elif</span> <span class="n">prod_info</span><span class="o">.</span><span class="n">get_source</span> <span class="o">==</span> <span class="s">&quot;native&quot;</span><span class="p">:</span>
170                 <span class="n">msg</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s">&quot;The product </span><span class="si">%(prod)s</span><span class="s"> has version </span><span class="si">%(ver)s</span><span class="s"> but is &quot;</span>
171                         <span class="s">&quot;declared as native in its definition&quot;</span> <span class="o">%</span>
172                         <span class="p">{</span> <span class="s">&#39;prod&#39;</span><span class="p">:</span> <span class="n">prod_info</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="s">&#39;ver&#39;</span><span class="p">:</span> <span class="n">version</span><span class="p">})</span>
173                 <span class="k">raise</span> <span class="n">src</span><span class="o">.</span><span class="n">SatException</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
174
175     <span class="c"># If there is no definition but the product is declared as native,</span>
176     <span class="c"># construct a new definition containing only the get_source key</span>
177     <span class="k">if</span> <span class="n">prod_info</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">version</span> <span class="o">==</span> <span class="s">&quot;native&quot;</span><span class="p">:</span>
178         <span class="n">prod_info</span> <span class="o">=</span> <span class="n">src</span><span class="o">.</span><span class="n">pyconf</span><span class="o">.</span><span class="n">Config</span><span class="p">()</span>
179         <span class="n">prod_info</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">product_name</span>
180         <span class="n">prod_info</span><span class="o">.</span><span class="n">get_source</span> <span class="o">=</span> <span class="s">&quot;native&quot;</span>
181
182     <span class="c"># If there is no definition but the product is fixed,</span>
183     <span class="c"># construct a new definition containing only the product name</span>
184     <span class="k">if</span> <span class="n">prod_info</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">version</span><span class="p">):</span>
185         <span class="n">prod_info</span> <span class="o">=</span> <span class="n">src</span><span class="o">.</span><span class="n">pyconf</span><span class="o">.</span><span class="n">Config</span><span class="p">()</span>
186         <span class="n">prod_info</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">product_name</span>
187         <span class="n">prod_info</span><span class="o">.</span><span class="n">get_source</span> <span class="o">=</span> <span class="s">&quot;fixed&quot;</span>
188         <span class="n">prod_info</span><span class="o">.</span><span class="n">addMapping</span><span class="p">(</span><span class="s">&quot;environ&quot;</span><span class="p">,</span> <span class="n">src</span><span class="o">.</span><span class="n">pyconf</span><span class="o">.</span><span class="n">Mapping</span><span class="p">(</span><span class="n">prod_info</span><span class="p">),</span> <span class="s">&quot;&quot;</span><span class="p">)</span>
189
190
191     <span class="c"># If prod_info is still None, it means that there is no product definition</span>
192     <span class="c"># in the config. The user has to provide it.</span>
193     <span class="k">if</span> <span class="n">prod_info</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
194         <span class="n">prod_pyconf_path</span> <span class="o">=</span> <span class="n">src</span><span class="o">.</span><span class="n">find_file_in_lpath</span><span class="p">(</span><span class="n">product_name</span> <span class="o">+</span> <span class="s">&quot;.pyconf&quot;</span><span class="p">,</span>
195                                                   <span class="n">config</span><span class="o">.</span><span class="n">PATHS</span><span class="o">.</span><span class="n">PRODUCTPATH</span><span class="p">)</span>
196         <span class="k">if</span> <span class="ow">not</span> <span class="n">prod_pyconf_path</span><span class="p">:</span>
197             <span class="n">msg</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s">&quot;&quot;&quot;</span><span class="se">\</span>
198 <span class="s">No definition found for the product </span><span class="si">%(1)s</span><span class="s">.</span>
199 <span class="s">Please create a </span><span class="si">%(2)s</span><span class="s">.pyconf file somewhere in:</span>
200 <span class="si">%(3)s</span><span class="s">&quot;&quot;&quot;</span><span class="p">)</span> <span class="o">%</span> <span class="p">{</span>
201   <span class="s">&quot;1&quot;</span><span class="p">:</span> <span class="n">product_name</span><span class="p">,</span> 
202   <span class="s">&quot;2&quot;</span><span class="p">:</span> <span class="n">product_name</span><span class="p">,</span>
203   <span class="s">&quot;3&quot;</span><span class="p">:</span> <span class="n">config</span><span class="o">.</span><span class="n">PATHS</span><span class="o">.</span><span class="n">PRODUCTPATH</span> <span class="p">}</span>
204         <span class="k">else</span><span class="p">:</span>
205             <span class="n">msg</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s">&quot;&quot;&quot;</span><span class="se">\</span>
206 <span class="s">No definition corresponding to the version </span><span class="si">%(1)s</span><span class="s"> was found in the file:</span>
207 <span class="s">  </span><span class="si">%(2)s</span><span class="s">.</span>
208 <span class="s">Please add a section in it.&quot;&quot;&quot;</span><span class="p">)</span> <span class="o">%</span> <span class="p">{</span><span class="s">&quot;1&quot;</span> <span class="p">:</span> <span class="n">vv</span><span class="p">,</span> <span class="s">&quot;2&quot;</span> <span class="p">:</span> <span class="n">prod_pyconf_path</span><span class="p">}</span>
209         <span class="k">raise</span> <span class="n">src</span><span class="o">.</span><span class="n">SatException</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
210     
211     <span class="c"># Set the debug, dev and version keys</span>
212     <span class="n">prod_info</span><span class="o">.</span><span class="n">debug</span> <span class="o">=</span> <span class="n">debug</span>
213     <span class="n">prod_info</span><span class="o">.</span><span class="n">dev</span> <span class="o">=</span> <span class="n">dev</span>
214     <span class="n">prod_info</span><span class="o">.</span><span class="n">version</span> <span class="o">=</span> <span class="n">version</span>
215     
216     <span class="c"># Set the archive_info if the product is get in archive mode</span>
217     <span class="k">if</span> <span class="n">prod_info</span><span class="o">.</span><span class="n">get_source</span> <span class="o">==</span> <span class="s">&quot;archive&quot;</span><span class="p">:</span>
218         <span class="k">if</span> <span class="ow">not</span> <span class="s">&quot;archive_info&quot;</span> <span class="ow">in</span> <span class="n">prod_info</span><span class="p">:</span>
219             <span class="n">prod_info</span><span class="o">.</span><span class="n">addMapping</span><span class="p">(</span><span class="s">&quot;archive_info&quot;</span><span class="p">,</span>
220                                  <span class="n">src</span><span class="o">.</span><span class="n">pyconf</span><span class="o">.</span><span class="n">Mapping</span><span class="p">(</span><span class="n">prod_info</span><span class="p">),</span>
221                                  <span class="s">&quot;&quot;</span><span class="p">)</span>
222         <span class="k">if</span> <span class="s">&quot;archive_name&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">prod_info</span><span class="o">.</span><span class="n">archive_info</span><span class="p">:</span> 
223             <span class="n">arch_name</span> <span class="o">=</span> <span class="n">product_name</span> <span class="o">+</span> <span class="s">&quot;-&quot;</span> <span class="o">+</span> <span class="n">version</span> <span class="o">+</span> <span class="s">&quot;.tar.gz&quot;</span>
224             <span class="n">arch_path</span> <span class="o">=</span> <span class="n">src</span><span class="o">.</span><span class="n">find_file_in_lpath</span><span class="p">(</span><span class="n">arch_name</span><span class="p">,</span>
225                                                <span class="n">config</span><span class="o">.</span><span class="n">PATHS</span><span class="o">.</span><span class="n">ARCHIVEPATH</span><span class="p">)</span>
226             <span class="k">if</span> <span class="ow">not</span> <span class="n">arch_path</span><span class="p">:</span>
227                 <span class="n">msg</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s">&quot;Archive </span><span class="si">%(1)s</span><span class="s"> for </span><span class="si">%(2)s</span><span class="s"> not found in config.PATHS.ARCHIVEPATH&quot;</span><span class="p">)</span> <span class="o">%</span> \
228                        <span class="p">{</span><span class="s">&quot;1&quot;</span> <span class="p">:</span> <span class="n">arch_name</span><span class="p">,</span> <span class="s">&quot;2&quot;</span> <span class="p">:</span> <span class="n">prod_info</span><span class="o">.</span><span class="n">name</span><span class="p">}</span>
229                 <span class="n">DBG</span><span class="o">.</span><span class="n">tofix</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">config</span><span class="o">.</span><span class="n">PATHS</span><span class="o">.</span><span class="n">ARCHIVEPATH</span><span class="p">)</span>
230                 <span class="n">prod_info</span><span class="o">.</span><span class="n">archive_info</span><span class="o">.</span><span class="n">archive_name</span> <span class="o">=</span> <span class="n">arch_name</span> <span class="c">#without path</span>
231                 <span class="c"># raise src.SatException(msg) #may be a warning, continue #8646</span>
232             <span class="k">else</span><span class="p">:</span>
233                 <span class="n">prod_info</span><span class="o">.</span><span class="n">archive_info</span><span class="o">.</span><span class="n">archive_name</span> <span class="o">=</span> <span class="n">arch_path</span>
234         <span class="k">else</span><span class="p">:</span>
235             <span class="k">if</span> <span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">prod_info</span><span class="o">.</span><span class="n">archive_info</span><span class="o">.</span><span class="n">archive_name</span><span class="p">)</span> <span class="o">==</span> 
236                                         <span class="n">prod_info</span><span class="o">.</span><span class="n">archive_info</span><span class="o">.</span><span class="n">archive_name</span><span class="p">):</span>
237                 <span class="n">arch_name</span> <span class="o">=</span> <span class="n">prod_info</span><span class="o">.</span><span class="n">archive_info</span><span class="o">.</span><span class="n">archive_name</span>
238                 <span class="n">arch_path</span> <span class="o">=</span> <span class="n">src</span><span class="o">.</span><span class="n">find_file_in_lpath</span><span class="p">(</span>
239                                             <span class="n">arch_name</span><span class="p">,</span>
240                                             <span class="n">config</span><span class="o">.</span><span class="n">PATHS</span><span class="o">.</span><span class="n">ARCHIVEPATH</span><span class="p">)</span>
241                 <span class="k">if</span> <span class="ow">not</span> <span class="n">arch_path</span><span class="p">:</span>
242                     <span class="n">msg</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s">&quot;Archive </span><span class="si">%(1)s</span><span class="s"> for </span><span class="si">%(2)s</span><span class="s"> not found in config.PATHS.ARCHIVEPATH&quot;</span><span class="p">)</span> <span class="o">%</span> \
243                            <span class="p">{</span><span class="s">&quot;1&quot;</span> <span class="p">:</span> <span class="n">arch_name</span><span class="p">,</span> <span class="s">&quot;2&quot;</span> <span class="p">:</span> <span class="n">prod_info</span><span class="o">.</span><span class="n">name</span><span class="p">}</span>
244                     <span class="n">DBG</span><span class="o">.</span><span class="n">tofix</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">config</span><span class="o">.</span><span class="n">PATHS</span><span class="o">.</span><span class="n">ARCHIVEPATH</span><span class="p">)</span> <span class="c">#avoid 2 messages in compile</span>
245                     <span class="n">prod_info</span><span class="o">.</span><span class="n">archive_info</span><span class="o">.</span><span class="n">archive_name</span> <span class="o">=</span> <span class="n">arch_name</span> <span class="c">#without path</span>
246                     <span class="c"># raise src.SatException(msg) #may be a warning, continue #8646</span>
247                 <span class="n">prod_info</span><span class="o">.</span><span class="n">archive_info</span><span class="o">.</span><span class="n">archive_name</span> <span class="o">=</span> <span class="n">arch_path</span>
248         
249     <span class="c"># If the product compiles with a script, check the script existence</span>
250     <span class="c"># and if it is executable</span>
251     <span class="k">if</span> <span class="n">product_has_script</span><span class="p">(</span><span class="n">prod_info</span><span class="p">):</span>
252         <span class="c"># Check the compil_script key existence</span>
253         <span class="k">if</span> <span class="s">&quot;compil_script&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">prod_info</span><span class="p">:</span>
254             <span class="n">msg</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s">&quot;&quot;&quot;</span><span class="se">\</span>
255 <span class="s">No compilation script found for the product </span><span class="si">%s</span><span class="s">.</span>
256 <span class="s">Please provide a &#39;compil_script&#39; key in its definition.&quot;&quot;&quot;</span><span class="p">)</span> <span class="o">%</span> <span class="n">product_name</span>
257             <span class="k">raise</span> <span class="n">src</span><span class="o">.</span><span class="n">SatException</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
258         
259         <span class="c"># Get the path of the script</span>
260         <span class="n">script</span> <span class="o">=</span> <span class="n">prod_info</span><span class="o">.</span><span class="n">compil_script</span>
261         <span class="n">script_name</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">script</span><span class="p">)</span>
262         <span class="k">if</span> <span class="n">script</span> <span class="o">==</span> <span class="n">script_name</span><span class="p">:</span>
263             <span class="c"># Only a name is given. Search in the default directory</span>
264             <span class="n">script_path</span> <span class="o">=</span> <span class="n">src</span><span class="o">.</span><span class="n">find_file_in_lpath</span><span class="p">(</span><span class="n">script_name</span><span class="p">,</span>
265                                                  <span class="n">config</span><span class="o">.</span><span class="n">PATHS</span><span class="o">.</span><span class="n">PRODUCTPATH</span><span class="p">,</span>
266                                                  <span class="s">&quot;compil_scripts&quot;</span><span class="p">)</span>
267             <span class="k">if</span> <span class="ow">not</span> <span class="n">script_path</span><span class="p">:</span>
268                 <span class="k">raise</span> <span class="n">src</span><span class="o">.</span><span class="n">SatException</span><span class="p">(</span>
269                     <span class="n">_</span><span class="p">(</span><span class="s">&quot;Compilation script not found: </span><span class="si">%s</span><span class="s">&quot;</span><span class="p">)</span> <span class="o">%</span> <span class="n">script_name</span><span class="p">)</span>
270             <span class="n">prod_info</span><span class="o">.</span><span class="n">compil_script</span> <span class="o">=</span> <span class="n">script_path</span>
271             <span class="k">if</span> <span class="n">src</span><span class="o">.</span><span class="n">architecture</span><span class="o">.</span><span class="n">is_windows</span><span class="p">():</span>
272                 <span class="n">prod_info</span><span class="o">.</span><span class="n">compil_script</span> <span class="o">=</span> <span class="n">prod_info</span><span class="o">.</span><span class="n">compil_script</span><span class="p">[:</span><span class="o">-</span><span class="nb">len</span><span class="p">(</span><span class="s">&quot;.sh&quot;</span><span class="p">)]</span> <span class="o">+</span> <span class="s">&quot;.bat&quot;</span>
273        
274         <span class="c"># Check that the script is executable</span>
275         <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">prod_info</span><span class="o">.</span><span class="n">compil_script</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">X_OK</span><span class="p">):</span>
276             <span class="c">#raise src.SatException(</span>
277             <span class="c">#        _(&quot;Compilation script cannot be executed: %s&quot;) % </span>
278             <span class="c">#        prod_info.compil_script)</span>
279             <span class="n">DBG</span><span class="o">.</span><span class="n">tofix</span><span class="p">(</span><span class="s">&quot;Compilation script cannot be executed:&quot;</span><span class="p">,</span> <span class="n">prod_info</span><span class="o">.</span><span class="n">compil_script</span><span class="p">)</span>
280     
281     <span class="c"># Get the full paths of all the patches</span>
282     <span class="k">if</span> <span class="n">product_has_patches</span><span class="p">(</span><span class="n">prod_info</span><span class="p">):</span>
283         <span class="n">patches</span> <span class="o">=</span> <span class="p">[]</span>
284         <span class="k">try</span><span class="p">:</span>
285           <span class="k">for</span> <span class="n">patch</span> <span class="ow">in</span> <span class="n">prod_info</span><span class="o">.</span><span class="n">patches</span><span class="p">:</span>
286               <span class="n">patch_path</span> <span class="o">=</span> <span class="n">patch</span>
287               <span class="c"># If only a filename, then search for the patch in the PRODUCTPATH</span>
288               <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">patch_path</span><span class="p">)</span> <span class="o">==</span> <span class="n">patch_path</span><span class="p">:</span>
289                   <span class="c"># Search in the PRODUCTPATH/patches</span>
290                   <span class="n">patch_path</span> <span class="o">=</span> <span class="n">src</span><span class="o">.</span><span class="n">find_file_in_lpath</span><span class="p">(</span><span class="n">patch</span><span class="p">,</span>
291                                                       <span class="n">config</span><span class="o">.</span><span class="n">PATHS</span><span class="o">.</span><span class="n">PRODUCTPATH</span><span class="p">,</span>
292                                                       <span class="s">&quot;patches&quot;</span><span class="p">)</span>
293                   <span class="k">if</span> <span class="ow">not</span> <span class="n">patch_path</span><span class="p">:</span>
294                       <span class="n">msg</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s">&quot;Patch </span><span class="si">%(patch_name)s</span><span class="s"> for </span><span class="si">%(prod_name)s</span><span class="s"> not found:&quot;</span>
295                               <span class="s">&quot;</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">{</span><span class="s">&quot;patch_name&quot;</span> <span class="p">:</span> <span class="n">patch</span><span class="p">,</span>
296                                        <span class="s">&quot;prod_name&quot;</span> <span class="p">:</span> <span class="n">prod_info</span><span class="o">.</span><span class="n">name</span><span class="p">})</span> 
297                       <span class="k">raise</span> <span class="n">src</span><span class="o">.</span><span class="n">SatException</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
298               <span class="n">patches</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">patch_path</span><span class="p">)</span>
299         <span class="k">except</span><span class="p">:</span>
300           <span class="n">DBG</span><span class="o">.</span><span class="n">tofix</span><span class="p">(</span><span class="s">&quot;problem in prod_info.patches&quot;</span><span class="p">,</span> <span class="n">prod_info</span><span class="p">)</span>
301         <span class="n">prod_info</span><span class="o">.</span><span class="n">patches</span> <span class="o">=</span> <span class="n">patches</span>
302
303     <span class="c"># Get the full paths of the environment scripts</span>
304     <span class="k">if</span> <span class="n">product_has_env_script</span><span class="p">(</span><span class="n">prod_info</span><span class="p">):</span>
305         <span class="n">env_script_path</span> <span class="o">=</span> <span class="n">prod_info</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">env_script</span>
306         <span class="c"># If only a filename, then search for the environment script </span>
307         <span class="c"># in the PRODUCTPATH/env_scripts</span>
308         <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">env_script_path</span><span class="p">)</span> <span class="o">==</span> <span class="n">env_script_path</span><span class="p">:</span>
309             <span class="c"># Search in the PRODUCTPATH/env_scripts</span>
310             <span class="n">env_script_path</span> <span class="o">=</span> <span class="n">src</span><span class="o">.</span><span class="n">find_file_in_lpath</span><span class="p">(</span>
311                                             <span class="n">prod_info</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">env_script</span><span class="p">,</span>
312                                             <span class="n">config</span><span class="o">.</span><span class="n">PATHS</span><span class="o">.</span><span class="n">PRODUCTPATH</span><span class="p">,</span>
313                                             <span class="s">&quot;env_scripts&quot;</span><span class="p">)</span>
314             <span class="k">if</span> <span class="ow">not</span> <span class="n">env_script_path</span><span class="p">:</span>
315                 <span class="n">msg</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s">&quot;Environment script </span><span class="si">%(env_name)s</span><span class="s"> for </span><span class="si">%(prod_name)s</span><span class="s"> not &quot;</span>
316                         <span class="s">&quot;found.</span><span class="se">\n</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">{</span><span class="s">&quot;env_name&quot;</span> <span class="p">:</span> <span class="n">env_script_path</span><span class="p">,</span>
317                                        <span class="s">&quot;prod_name&quot;</span> <span class="p">:</span> <span class="n">prod_info</span><span class="o">.</span><span class="n">name</span><span class="p">})</span> 
318                 <span class="k">raise</span> <span class="n">src</span><span class="o">.</span><span class="n">SatException</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
319
320         <span class="n">prod_info</span><span class="o">.</span><span class="n">environ</span><span class="o">.</span><span class="n">env_script</span> <span class="o">=</span> <span class="n">env_script_path</span>
321     
322     <span class="k">if</span> <span class="n">with_install_dir</span><span class="p">:</span> 
323         <span class="c"># The variable with_install_dir is at false only for internal use </span>
324         <span class="c"># of the function get_install_dir</span>
325         
326         <span class="c"># Save the install_dir key if there is any</span>
327         <span class="k">if</span> <span class="s">&quot;install_dir&quot;</span> <span class="ow">in</span> <span class="n">prod_info</span> <span class="ow">and</span> <span class="ow">not</span> <span class="s">&quot;install_dir_save&quot;</span> <span class="ow">in</span> <span class="n">prod_info</span><span class="p">:</span>
328             <span class="n">prod_info</span><span class="o">.</span><span class="n">install_dir_save</span> <span class="o">=</span> <span class="n">prod_info</span><span class="o">.</span><span class="n">install_dir</span>
329         
330         <span class="c"># if it is not the first time the install_dir is computed, it means</span>
331         <span class="c"># that install_dir_save exists and it has to be taken into account.</span>
332         <span class="k">if</span> <span class="s">&quot;install_dir_save&quot;</span> <span class="ow">in</span> <span class="n">prod_info</span><span class="p">:</span>
333             <span class="n">prod_info</span><span class="o">.</span><span class="n">install_dir</span> <span class="o">=</span> <span class="n">prod_info</span><span class="o">.</span><span class="n">install_dir_save</span>
334         
335         <span class="c"># Set the install_dir key</span>
336         <span class="n">prod_info</span><span class="o">.</span><span class="n">install_dir</span> <span class="o">=</span> <span class="n">get_install_dir</span><span class="p">(</span><span class="n">config</span><span class="p">,</span> <span class="n">base</span><span class="p">,</span> <span class="n">version</span><span class="p">,</span> <span class="n">prod_info</span><span class="p">)</span>
337                 
338     <span class="k">return</span> <span class="n">prod_info</span>
339 </div>
340 <div class="viewcode-block" id="get_product_section"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.get_product_section">[docs]</a><span class="k">def</span> <span class="nf">get_product_section</span><span class="p">(</span><span class="n">config</span><span class="p">,</span> <span class="n">product_name</span><span class="p">,</span> <span class="n">version</span><span class="p">,</span> <span class="n">section</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
341     <span class="sd">&quot;&quot;&quot;Get the product description from the configuration</span>
342 <span class="sd">    </span>
343 <span class="sd">    :param config Config: The global configuration</span>
344 <span class="sd">    :param product_name str: The product name</span>
345 <span class="sd">    :param version str: The version of the product</span>
346 <span class="sd">    :param section str: The searched section (if not None, the section is </span>
347 <span class="sd">                        explicitly given</span>
348 <span class="sd">    :return: The product description</span>
349 <span class="sd">    :rtype: Config</span>
350 <span class="sd">    &quot;&quot;&quot;</span>
351
352     <span class="c"># if section is not None, try to get the corresponding section</span>
353     <span class="k">if</span> <span class="n">section</span><span class="p">:</span>
354         <span class="k">if</span> <span class="n">section</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">config</span><span class="o">.</span><span class="n">PRODUCTS</span><span class="p">[</span><span class="n">product_name</span><span class="p">]:</span>
355             <span class="k">return</span> <span class="bp">None</span>
356         <span class="c"># returns specific information for the given version</span>
357         <span class="n">prod_info</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">PRODUCTS</span><span class="p">[</span><span class="n">product_name</span><span class="p">][</span><span class="n">section</span><span class="p">]</span>
358         <span class="n">prod_info</span><span class="o">.</span><span class="n">section</span> <span class="o">=</span> <span class="n">section</span>
359         <span class="n">prod_info</span><span class="o">.</span><span class="n">from_file</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">PRODUCTS</span><span class="p">[</span><span class="n">product_name</span><span class="p">]</span><span class="o">.</span><span class="n">from_file</span>
360         <span class="k">return</span> <span class="n">prod_info</span>
361
362     <span class="c"># If it exists, get the information of the product_version</span>
363     <span class="k">if</span> <span class="s">&quot;version_&quot;</span> <span class="o">+</span> <span class="n">version</span> <span class="ow">in</span> <span class="n">config</span><span class="o">.</span><span class="n">PRODUCTS</span><span class="p">[</span><span class="n">product_name</span><span class="p">]:</span>
364         <span class="c"># returns specific information for the given version</span>
365         <span class="n">prod_info</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">PRODUCTS</span><span class="p">[</span><span class="n">product_name</span><span class="p">][</span><span class="s">&quot;version_&quot;</span> <span class="o">+</span> <span class="n">version</span><span class="p">]</span>
366         <span class="n">prod_info</span><span class="o">.</span><span class="n">section</span> <span class="o">=</span> <span class="s">&quot;version_&quot;</span> <span class="o">+</span> <span class="n">version</span>
367         <span class="n">prod_info</span><span class="o">.</span><span class="n">from_file</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">PRODUCTS</span><span class="p">[</span><span class="n">product_name</span><span class="p">]</span><span class="o">.</span><span class="n">from_file</span>
368         <span class="k">return</span> <span class="n">prod_info</span>
369     
370     <span class="c"># Else, check if there is a description for multiple versions</span>
371     <span class="n">l_section_name</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">PRODUCTS</span><span class="p">[</span><span class="n">product_name</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span>
372     <span class="n">l_section_ranges</span> <span class="o">=</span> <span class="p">[</span><span class="n">section_name</span> <span class="k">for</span> <span class="n">section_name</span> <span class="ow">in</span> <span class="n">l_section_name</span> 
373                         <span class="k">if</span> <span class="n">VERSION_DELIMITER</span> <span class="ow">in</span> <span class="n">section_name</span><span class="p">]</span>
374     <span class="k">for</span> <span class="n">section_range</span> <span class="ow">in</span> <span class="n">l_section_ranges</span><span class="p">:</span>
375         <span class="n">minimum</span><span class="p">,</span> <span class="n">maximum</span> <span class="o">=</span> <span class="n">section_range</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">VERSION_DELIMITER</span><span class="p">)</span>
376         <span class="k">if</span> <span class="p">(</span><span class="n">src</span><span class="o">.</span><span class="n">only_numbers</span><span class="p">(</span><span class="n">version</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="n">src</span><span class="o">.</span><span class="n">only_numbers</span><span class="p">(</span><span class="n">minimum</span><span class="p">)</span>
377                     <span class="ow">and</span> <span class="n">src</span><span class="o">.</span><span class="n">only_numbers</span><span class="p">(</span><span class="n">version</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="n">src</span><span class="o">.</span><span class="n">only_numbers</span><span class="p">(</span><span class="n">maximum</span><span class="p">)):</span>
378             <span class="c"># returns specific information for the versions</span>
379             <span class="n">prod_info</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">PRODUCTS</span><span class="p">[</span><span class="n">product_name</span><span class="p">][</span><span class="n">section_range</span><span class="p">]</span>
380             <span class="n">prod_info</span><span class="o">.</span><span class="n">section</span> <span class="o">=</span> <span class="n">section_range</span>
381             <span class="n">prod_info</span><span class="o">.</span><span class="n">from_file</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">PRODUCTS</span><span class="p">[</span><span class="n">product_name</span><span class="p">]</span><span class="o">.</span><span class="n">from_file</span>
382             <span class="k">return</span> <span class="n">prod_info</span>
383     
384     <span class="c"># Else, get the standard informations</span>
385     <span class="k">if</span> <span class="s">&quot;default&quot;</span> <span class="ow">in</span> <span class="n">config</span><span class="o">.</span><span class="n">PRODUCTS</span><span class="p">[</span><span class="n">product_name</span><span class="p">]:</span>
386         <span class="c"># returns the generic information (given version not found)</span>
387         <span class="n">prod_info</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">PRODUCTS</span><span class="p">[</span><span class="n">product_name</span><span class="p">]</span><span class="o">.</span><span class="n">default</span>
388         <span class="n">prod_info</span><span class="o">.</span><span class="n">section</span> <span class="o">=</span> <span class="s">&quot;default&quot;</span>
389         <span class="n">prod_info</span><span class="o">.</span><span class="n">from_file</span> <span class="o">=</span> <span class="n">config</span><span class="o">.</span><span class="n">PRODUCTS</span><span class="p">[</span><span class="n">product_name</span><span class="p">]</span><span class="o">.</span><span class="n">from_file</span>
390         <span class="k">return</span> <span class="n">prod_info</span>
391     
392     <span class="c"># if noting was found, return None</span>
393     <span class="k">return</span> <span class="bp">None</span>
394     </div>
395 <div class="viewcode-block" id="get_install_dir"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.get_install_dir">[docs]</a><span class="k">def</span> <span class="nf">get_install_dir</span><span class="p">(</span><span class="n">config</span><span class="p">,</span> <span class="n">base</span><span class="p">,</span> <span class="n">version</span><span class="p">,</span> <span class="n">prod_info</span><span class="p">):</span>
396     <span class="sd">&quot;&quot;&quot;Compute the installation directory of a given product </span>
397 <span class="sd">    </span>
398 <span class="sd">    :param config Config: The global configuration</span>
399 <span class="sd">    :param base str: This corresponds to the value given by user in its </span>
400 <span class="sd">                     application.pyconf for the specific product. If &quot;yes&quot;, the</span>
401 <span class="sd">                     user wants the product to be in base. If &quot;no&quot;, he wants the</span>
402 <span class="sd">                     product to be in the application workdir</span>
403 <span class="sd">    :param version str: The version of the product</span>
404 <span class="sd">    :param product_info Config: The configuration specific to </span>
405 <span class="sd">                               the product</span>
406 <span class="sd">    </span>
407 <span class="sd">    :return: The path of the product installation</span>
408 <span class="sd">    :rtype: str</span>
409 <span class="sd">    &quot;&quot;&quot;</span>
410     <span class="n">install_dir</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
411     <span class="n">in_base</span> <span class="o">=</span> <span class="bp">False</span>
412     <span class="k">if</span> <span class="p">((</span><span class="s">&quot;install_dir&quot;</span> <span class="ow">in</span> <span class="n">prod_info</span> <span class="ow">and</span> <span class="n">prod_info</span><span class="o">.</span><span class="n">install_dir</span> <span class="o">==</span> <span class="s">&quot;base&quot;</span><span class="p">)</span> 
413                                                             <span class="ow">or</span> <span class="n">base</span> <span class="o">==</span> <span class="s">&quot;yes&quot;</span><span class="p">):</span>
414         <span class="n">in_base</span> <span class="o">=</span> <span class="bp">True</span>
415     <span class="k">if</span> <span class="p">(</span><span class="n">base</span> <span class="o">==</span> <span class="s">&quot;no&quot;</span> <span class="ow">or</span> <span class="p">(</span><span class="s">&quot;no_base&quot;</span> <span class="ow">in</span> <span class="n">config</span><span class="o">.</span><span class="n">APPLICATION</span> 
416                          <span class="ow">and</span> <span class="n">config</span><span class="o">.</span><span class="n">APPLICATION</span><span class="o">.</span><span class="n">no_base</span> <span class="o">==</span> <span class="s">&quot;yes&quot;</span><span class="p">)):</span>
417         <span class="n">in_base</span> <span class="o">=</span> <span class="bp">False</span>
418     
419     <span class="k">if</span> <span class="n">in_base</span><span class="p">:</span>
420         <span class="n">install_dir</span> <span class="o">=</span> <span class="n">get_base_install_dir</span><span class="p">(</span><span class="n">config</span><span class="p">,</span> <span class="n">prod_info</span><span class="p">,</span> <span class="n">version</span><span class="p">)</span>
421     <span class="k">else</span><span class="p">:</span>
422         <span class="k">if</span> <span class="s">&quot;install_dir&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">prod_info</span> <span class="ow">or</span> <span class="n">prod_info</span><span class="o">.</span><span class="n">install_dir</span> <span class="o">==</span> <span class="s">&quot;base&quot;</span><span class="p">:</span>
423             <span class="c"># Set it to the default value (in application directory)</span>
424             <span class="n">install_dir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">config</span><span class="o">.</span><span class="n">APPLICATION</span><span class="o">.</span><span class="n">workdir</span><span class="p">,</span>
425                                                 <span class="s">&quot;INSTALL&quot;</span><span class="p">,</span>
426                                                 <span class="n">prod_info</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
427         <span class="k">else</span><span class="p">:</span>
428             <span class="n">install_dir</span> <span class="o">=</span> <span class="n">prod_info</span><span class="o">.</span><span class="n">install_dir</span>
429
430     <span class="k">return</span> <span class="n">install_dir</span>
431 </div>
432 <div class="viewcode-block" id="get_base_install_dir"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.get_base_install_dir">[docs]</a><span class="k">def</span> <span class="nf">get_base_install_dir</span><span class="p">(</span><span class="n">config</span><span class="p">,</span> <span class="n">prod_info</span><span class="p">,</span> <span class="n">version</span><span class="p">):</span>
433     <span class="sd">&quot;&quot;&quot;Compute the installation directory of a product in base </span>
434 <span class="sd">    </span>
435 <span class="sd">    :param config Config: The global configuration</span>
436 <span class="sd">    :param product_info Config: The configuration specific to </span>
437 <span class="sd">                               the product</span>
438 <span class="sd">    :param version str: The version of the product    </span>
439 <span class="sd">    :return: The path of the product installation</span>
440 <span class="sd">    :rtype: str</span>
441 <span class="sd">    &quot;&quot;&quot;</span>    
442     <span class="n">base_path</span> <span class="o">=</span> <span class="n">src</span><span class="o">.</span><span class="n">get_base_path</span><span class="p">(</span><span class="n">config</span><span class="p">)</span> 
443     <span class="n">prod_dir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">base_path</span><span class="p">,</span> <span class="n">prod_info</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s">&quot;-&quot;</span> <span class="o">+</span> <span class="n">version</span><span class="p">)</span>
444     <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">prod_dir</span><span class="p">):</span>
445         <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">prod_dir</span><span class="p">,</span> <span class="s">&quot;config-1&quot;</span><span class="p">)</span>
446     
447     <span class="n">exists</span><span class="p">,</span> <span class="n">install_dir</span> <span class="o">=</span> <span class="n">check_config_exists</span><span class="p">(</span><span class="n">config</span><span class="p">,</span> <span class="n">prod_dir</span><span class="p">,</span> <span class="n">prod_info</span><span class="p">)</span>
448     <span class="k">if</span> <span class="n">exists</span><span class="p">:</span>
449         <span class="k">return</span> <span class="n">install_dir</span>
450     
451     <span class="c"># Find the first config-&lt;i&gt; directory that is available in the product</span>
452     <span class="c"># directory</span>
453     <span class="n">found</span> <span class="o">=</span> <span class="bp">False</span> 
454     <span class="n">label</span> <span class="o">=</span> <span class="mi">1</span>
455     <span class="k">while</span> <span class="ow">not</span> <span class="n">found</span><span class="p">:</span>
456         <span class="n">install_dir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">prod_dir</span><span class="p">,</span> <span class="s">&quot;config-</span><span class="si">%i</span><span class="s">&quot;</span> <span class="o">%</span> <span class="n">label</span><span class="p">)</span>
457         <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">install_dir</span><span class="p">):</span>
458             <span class="n">label</span><span class="o">+=</span><span class="mi">1</span>
459         <span class="k">else</span><span class="p">:</span>
460             <span class="n">found</span> <span class="o">=</span> <span class="bp">True</span>
461             
462     <span class="k">return</span> <span class="n">install_dir</span>
463 </div>
464 <div class="viewcode-block" id="check_config_exists"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.check_config_exists">[docs]</a><span class="k">def</span> <span class="nf">check_config_exists</span><span class="p">(</span><span class="n">config</span><span class="p">,</span> <span class="n">prod_dir</span><span class="p">,</span> <span class="n">prod_info</span><span class="p">):</span>
465     <span class="sd">&quot;&quot;&quot;\</span>
466 <span class="sd">    Verify that the installation directory of a product in a base exists</span>
467 <span class="sd">    Check all the config-&lt;i&gt; directory and verify the sat-config.pyconf file</span>
468 <span class="sd">    that is in it </span>
469 <span class="sd">    </span>
470 <span class="sd">    :param config Config: The global configuration</span>
471 <span class="sd">    :param prod_dir str: The product installation directory path </span>
472 <span class="sd">                         (without config-&lt;i&gt;)</span>
473 <span class="sd">    :param product_info Config: The configuration specific to </span>
474 <span class="sd">                               the product</span>
475 <span class="sd">    :return: True or false is the installation is found or not </span>
476 <span class="sd">             and if it is found, the path of the found installation</span>
477 <span class="sd">    :rtype: (boolean, str)</span>
478 <span class="sd">    &quot;&quot;&quot;</span>   
479     <span class="c"># check if the directories or files of the directory corresponds to the </span>
480     <span class="c"># directory installation of the product</span>
481     <span class="n">l_dir_and_files</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="n">prod_dir</span><span class="p">)</span>
482     <span class="k">for</span> <span class="n">dir_or_file</span> <span class="ow">in</span> <span class="n">l_dir_and_files</span><span class="p">:</span>
483         <span class="n">oExpr</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">config_expression</span><span class="p">)</span>
484         <span class="k">if</span> <span class="ow">not</span><span class="p">(</span><span class="n">oExpr</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">dir_or_file</span><span class="p">)):</span>
485             <span class="c"># not config-&lt;i&gt;, not interesting</span>
486             <span class="k">continue</span>
487         <span class="c"># check if there is the file sat-config.pyconf file in the installation</span>
488         <span class="c"># directory    </span>
489         <span class="n">config_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">prod_dir</span><span class="p">,</span> <span class="n">dir_or_file</span><span class="p">,</span> <span class="n">src</span><span class="o">.</span><span class="n">CONFIG_FILENAME</span><span class="p">)</span>
490         <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">config_file</span><span class="p">):</span>
491             <span class="k">continue</span>
492         
493         <span class="c"># If there is no dependency, it is the right path</span>
494         <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">prod_info</span><span class="o">.</span><span class="n">depend</span><span class="p">)</span><span class="o">==</span><span class="mi">0</span><span class="p">:</span>
495             <span class="n">compile_cfg</span> <span class="o">=</span> <span class="n">src</span><span class="o">.</span><span class="n">pyconf</span><span class="o">.</span><span class="n">Config</span><span class="p">(</span><span class="n">config_file</span><span class="p">)</span>
496             <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">compile_cfg</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
497                 <span class="k">return</span> <span class="bp">True</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">prod_dir</span><span class="p">,</span> <span class="n">dir_or_file</span><span class="p">)</span>
498             <span class="k">continue</span>
499         
500         <span class="c"># check if there is the config described in the file corresponds the </span>
501         <span class="c"># dependencies of the product</span>
502         <span class="n">config_corresponds</span> <span class="o">=</span> <span class="bp">True</span>    
503         <span class="n">compile_cfg</span> <span class="o">=</span> <span class="n">src</span><span class="o">.</span><span class="n">pyconf</span><span class="o">.</span><span class="n">Config</span><span class="p">(</span><span class="n">config_file</span><span class="p">)</span>
504         <span class="k">for</span> <span class="n">prod_dep</span> <span class="ow">in</span> <span class="n">prod_info</span><span class="o">.</span><span class="n">depend</span><span class="p">:</span>
505             <span class="c"># if the dependency is not in the config, </span>
506             <span class="c"># the config does not correspond</span>
507             <span class="k">if</span> <span class="n">prod_dep</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">compile_cfg</span><span class="p">:</span>
508                 <span class="n">config_corresponds</span> <span class="o">=</span> <span class="bp">False</span>
509                 <span class="k">break</span>
510             <span class="k">else</span><span class="p">:</span>
511                 <span class="n">prod_dep_info</span> <span class="o">=</span> <span class="n">get_product_config</span><span class="p">(</span><span class="n">config</span><span class="p">,</span> <span class="n">prod_dep</span><span class="p">,</span> <span class="bp">False</span><span class="p">)</span>
512                 <span class="c"># If the version of the dependency does not correspond, </span>
513                 <span class="c"># the config does not correspond</span>
514                 <span class="k">if</span> <span class="n">prod_dep_info</span><span class="o">.</span><span class="n">version</span> <span class="o">!=</span> <span class="n">compile_cfg</span><span class="p">[</span><span class="n">prod_dep</span><span class="p">]:</span>
515                     <span class="n">config_corresponds</span> <span class="o">=</span> <span class="bp">False</span>
516                     <span class="k">break</span>
517         
518         <span class="k">for</span> <span class="n">prod_name</span> <span class="ow">in</span> <span class="n">compile_cfg</span><span class="p">:</span>
519             <span class="k">if</span> <span class="n">prod_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">prod_info</span><span class="o">.</span><span class="n">depend</span><span class="p">:</span>
520                 <span class="n">config_corresponds</span> <span class="o">=</span> <span class="bp">False</span>
521                 <span class="k">break</span>
522         
523         <span class="k">if</span> <span class="n">config_corresponds</span><span class="p">:</span>
524             <span class="k">return</span> <span class="bp">True</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">prod_dir</span><span class="p">,</span> <span class="n">dir_or_file</span><span class="p">)</span>
525     
526     <span class="k">return</span> <span class="bp">False</span><span class="p">,</span> <span class="bp">None</span>
527             
528             
529     </div>
530 <div class="viewcode-block" id="get_products_infos"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.get_products_infos">[docs]</a><span class="k">def</span> <span class="nf">get_products_infos</span><span class="p">(</span><span class="n">lproducts</span><span class="p">,</span> <span class="n">config</span><span class="p">):</span>
531     <span class="sd">&quot;&quot;&quot;Get the specific configuration of a list of products</span>
532 <span class="sd">    </span>
533 <span class="sd">    :param lproducts List: The list of product names</span>
534 <span class="sd">    :param config Config: The global configuration</span>
535 <span class="sd">    :return: the list of tuples </span>
536 <span class="sd">             (product name, specific configuration of the product)</span>
537 <span class="sd">    :rtype: [(str, Config)]</span>
538 <span class="sd">    &quot;&quot;&quot;</span>
539     <span class="n">products_infos</span> <span class="o">=</span> <span class="p">[]</span>
540     <span class="c"># Loop on product names</span>
541     <span class="k">for</span> <span class="n">prod</span> <span class="ow">in</span> <span class="n">lproducts</span><span class="p">:</span>       
542         <span class="c"># Get the specific configuration of the product</span>
543         <span class="n">prod_info</span> <span class="o">=</span> <span class="n">get_product_config</span><span class="p">(</span><span class="n">config</span><span class="p">,</span> <span class="n">prod</span><span class="p">)</span>
544         <span class="k">if</span> <span class="n">prod_info</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
545             <span class="n">products_infos</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">prod</span><span class="p">,</span> <span class="n">prod_info</span><span class="p">))</span>
546         <span class="k">else</span><span class="p">:</span>
547             <span class="n">msg</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s">&quot;The </span><span class="si">%s</span><span class="s"> product has no definition &quot;</span>
548                     <span class="s">&quot;in the configuration.&quot;</span><span class="p">)</span> <span class="o">%</span> <span class="n">prod</span>
549             <span class="k">raise</span> <span class="n">src</span><span class="o">.</span><span class="n">SatException</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
550     <span class="k">return</span> <span class="n">products_infos</span>
551 </div>
552 <div class="viewcode-block" id="get_product_dependencies"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.get_product_dependencies">[docs]</a><span class="k">def</span> <span class="nf">get_product_dependencies</span><span class="p">(</span><span class="n">config</span><span class="p">,</span> <span class="n">product_info</span><span class="p">):</span>
553     <span class="sd">&quot;&quot;&quot;\</span>
554 <span class="sd">    Get recursively the list of products that are </span>
555 <span class="sd">    in the product_info dependencies</span>
556 <span class="sd">    </span>
557 <span class="sd">    :param config Config: The global configuration</span>
558 <span class="sd">    :param product_info Config: The configuration specific to </span>
559 <span class="sd">                               the product</span>
560 <span class="sd">    :return: the list of products in dependence</span>
561 <span class="sd">    :rtype: list</span>
562 <span class="sd">    &quot;&quot;&quot;</span>
563     <span class="k">if</span> <span class="s">&quot;depend&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">product_info</span> <span class="ow">or</span> <span class="n">product_info</span><span class="o">.</span><span class="n">depend</span> <span class="o">==</span> <span class="p">[]:</span>
564         <span class="k">return</span> <span class="p">[]</span>
565     <span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
566     <span class="k">for</span> <span class="n">prod</span> <span class="ow">in</span> <span class="n">product_info</span><span class="o">.</span><span class="n">depend</span><span class="p">:</span>
567         <span class="k">if</span> <span class="n">prod</span> <span class="o">==</span> <span class="n">product_info</span><span class="o">.</span><span class="n">name</span><span class="p">:</span>
568             <span class="k">continue</span>
569         <span class="k">if</span> <span class="n">prod</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">res</span><span class="p">:</span>
570             <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">prod</span><span class="p">)</span>
571         <span class="n">prod_info</span> <span class="o">=</span> <span class="n">get_product_config</span><span class="p">(</span><span class="n">config</span><span class="p">,</span> <span class="n">prod</span><span class="p">)</span>
572         <span class="n">dep_prod</span> <span class="o">=</span> <span class="n">get_product_dependencies</span><span class="p">(</span><span class="n">config</span><span class="p">,</span> <span class="n">prod_info</span><span class="p">)</span>
573         <span class="k">for</span> <span class="n">prod_in_dep</span> <span class="ow">in</span> <span class="n">dep_prod</span><span class="p">:</span>
574             <span class="k">if</span> <span class="n">prod_in_dep</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">res</span><span class="p">:</span>
575                 <span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">prod_in_dep</span><span class="p">)</span>
576     <span class="k">return</span> <span class="n">res</span>
577 </div>
578 <div class="viewcode-block" id="check_installation"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.check_installation">[docs]</a><span class="k">def</span> <span class="nf">check_installation</span><span class="p">(</span><span class="n">product_info</span><span class="p">):</span>
579     <span class="sd">&quot;&quot;&quot;\</span>
580 <span class="sd">    Verify if a product is well installed. Checks install directory presence</span>
581 <span class="sd">    and some additional files if it is defined in the config </span>
582 <span class="sd">    </span>
583 <span class="sd">    :param product_info Config: The configuration specific to </span>
584 <span class="sd">                               the product</span>
585 <span class="sd">    :return: True if it is well installed</span>
586 <span class="sd">    :rtype: boolean</span>
587 <span class="sd">    &quot;&quot;&quot;</span>
588     <span class="k">if</span> <span class="ow">not</span> <span class="n">product_compiles</span><span class="p">(</span><span class="n">product_info</span><span class="p">):</span>
589         <span class="k">return</span> <span class="bp">True</span>
590     <span class="n">install_dir</span> <span class="o">=</span> <span class="n">product_info</span><span class="o">.</span><span class="n">install_dir</span>
591     <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">install_dir</span><span class="p">):</span>
592         <span class="k">return</span> <span class="bp">False</span>
593     <span class="k">if</span> <span class="p">(</span><span class="s">&quot;present_files&quot;</span> <span class="ow">in</span> <span class="n">product_info</span> <span class="ow">and</span> 
594         <span class="s">&quot;install&quot;</span> <span class="ow">in</span> <span class="n">product_info</span><span class="o">.</span><span class="n">present_files</span><span class="p">):</span>
595         <span class="k">for</span> <span class="n">file_relative_path</span> <span class="ow">in</span> <span class="n">product_info</span><span class="o">.</span><span class="n">present_files</span><span class="o">.</span><span class="n">install</span><span class="p">:</span>
596             <span class="n">file_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">install_dir</span><span class="p">,</span> <span class="n">file_relative_path</span><span class="p">)</span>
597             <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">file_path</span><span class="p">):</span>
598                 <span class="k">return</span> <span class="bp">False</span>
599     <span class="k">return</span> <span class="bp">True</span>
600 </div>
601 <div class="viewcode-block" id="check_source"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.check_source">[docs]</a><span class="k">def</span> <span class="nf">check_source</span><span class="p">(</span><span class="n">product_info</span><span class="p">):</span>
602     <span class="sd">&quot;&quot;&quot;Verify if a sources of product is preset. Checks source directory presence</span>
603 <span class="sd">    </span>
604 <span class="sd">    :param product_info Config: The configuration specific to </span>
605 <span class="sd">                               the product</span>
606 <span class="sd">    :return: True if it is well installed</span>
607 <span class="sd">    :rtype: boolean</span>
608 <span class="sd">    &quot;&quot;&quot;</span>
609     <span class="n">DBG</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">&quot;check_source product_info&quot;</span><span class="p">,</span> <span class="n">product_info</span><span class="p">)</span>
610     <span class="n">source_dir</span> <span class="o">=</span> <span class="n">product_info</span><span class="o">.</span><span class="n">source_dir</span>
611     <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">source_dir</span><span class="p">):</span>
612         <span class="k">return</span> <span class="bp">False</span>
613     <span class="k">if</span> <span class="p">(</span><span class="s">&quot;present_files&quot;</span> <span class="ow">in</span> <span class="n">product_info</span> <span class="ow">and</span> 
614         <span class="s">&quot;source&quot;</span> <span class="ow">in</span> <span class="n">product_info</span><span class="o">.</span><span class="n">present_files</span><span class="p">):</span>
615         <span class="k">for</span> <span class="n">file_relative_path</span> <span class="ow">in</span> <span class="n">product_info</span><span class="o">.</span><span class="n">present_files</span><span class="o">.</span><span class="n">source</span><span class="p">:</span>
616             <span class="n">file_path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">source_dir</span><span class="p">,</span> <span class="n">file_relative_path</span><span class="p">)</span>
617             <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">file_path</span><span class="p">):</span>
618                 <span class="k">return</span> <span class="bp">False</span>
619     <span class="k">return</span> <span class="bp">True</span>
620 </div>
621 <div class="viewcode-block" id="product_is_sample"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.product_is_sample">[docs]</a><span class="k">def</span> <span class="nf">product_is_sample</span><span class="p">(</span><span class="n">product_info</span><span class="p">):</span>
622     <span class="sd">&quot;&quot;&quot;Know if a product has the sample type</span>
623 <span class="sd">    </span>
624 <span class="sd">    :param product_info Config: The configuration specific to </span>
625 <span class="sd">                               the product</span>
626 <span class="sd">    :return: True if the product has the sample type, else False</span>
627 <span class="sd">    :rtype: boolean</span>
628 <span class="sd">    &quot;&quot;&quot;</span>
629     <span class="k">if</span> <span class="s">&#39;type&#39;</span> <span class="ow">in</span> <span class="n">product_info</span><span class="p">:</span>
630         <span class="n">ptype</span> <span class="o">=</span> <span class="n">product_info</span><span class="o">.</span><span class="n">type</span>
631         <span class="k">return</span> <span class="n">ptype</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">&#39;sample&#39;</span>
632     <span class="k">else</span><span class="p">:</span>
633         <span class="k">return</span> <span class="bp">False</span>
634 </div>
635 <div class="viewcode-block" id="product_is_salome"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.product_is_salome">[docs]</a><span class="k">def</span> <span class="nf">product_is_salome</span><span class="p">(</span><span class="n">product_info</span><span class="p">):</span>
636     <span class="sd">&quot;&quot;&quot;Know if a product is a SALOME module</span>
637 <span class="sd">    </span>
638 <span class="sd">    :param product_info Config: The configuration specific to </span>
639 <span class="sd">                               the product</span>
640 <span class="sd">    :return: True if the product is a SALOME module, else False</span>
641 <span class="sd">    :rtype: boolean</span>
642 <span class="sd">    &quot;&quot;&quot;</span>
643     <span class="k">return</span> <span class="p">(</span><span class="s">&quot;properties&quot;</span> <span class="ow">in</span> <span class="n">product_info</span> <span class="ow">and</span>
644             <span class="s">&quot;is_SALOME_module&quot;</span> <span class="ow">in</span> <span class="n">product_info</span><span class="o">.</span><span class="n">properties</span> <span class="ow">and</span>
645             <span class="n">product_info</span><span class="o">.</span><span class="n">properties</span><span class="o">.</span><span class="n">is_SALOME_module</span> <span class="o">==</span> <span class="s">&quot;yes&quot;</span><span class="p">)</span>
646 </div>
647 <div class="viewcode-block" id="product_is_fixed"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.product_is_fixed">[docs]</a><span class="k">def</span> <span class="nf">product_is_fixed</span><span class="p">(</span><span class="n">product_info</span><span class="p">):</span>
648     <span class="sd">&quot;&quot;&quot;Know if a product is fixed</span>
649 <span class="sd">    </span>
650 <span class="sd">    :param product_info Config: The configuration specific to </span>
651 <span class="sd">                               the product</span>
652 <span class="sd">    :return: True if the product is fixed, else False</span>
653 <span class="sd">    :rtype: boolean</span>
654 <span class="sd">    &quot;&quot;&quot;</span>
655     <span class="n">get_src</span> <span class="o">=</span> <span class="n">product_info</span><span class="o">.</span><span class="n">get_source</span>
656     <span class="k">return</span> <span class="n">get_src</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">&#39;fixed&#39;</span>
657 </div>
658 <div class="viewcode-block" id="product_is_native"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.product_is_native">[docs]</a><span class="k">def</span> <span class="nf">product_is_native</span><span class="p">(</span><span class="n">product_info</span><span class="p">):</span>
659     <span class="sd">&quot;&quot;&quot;Know if a product is native</span>
660 <span class="sd">    </span>
661 <span class="sd">    :param product_info Config: The configuration specific to </span>
662 <span class="sd">                               the product</span>
663 <span class="sd">    :return: True if the product is native, else False</span>
664 <span class="sd">    :rtype: boolean</span>
665 <span class="sd">    &quot;&quot;&quot;</span>
666     <span class="n">get_src</span> <span class="o">=</span> <span class="n">product_info</span><span class="o">.</span><span class="n">get_source</span>
667     <span class="k">return</span> <span class="n">get_src</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">&#39;native&#39;</span>
668 </div>
669 <div class="viewcode-block" id="product_is_dev"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.product_is_dev">[docs]</a><span class="k">def</span> <span class="nf">product_is_dev</span><span class="p">(</span><span class="n">product_info</span><span class="p">):</span>
670     <span class="sd">&quot;&quot;&quot;Know if a product is in dev mode</span>
671 <span class="sd">    </span>
672 <span class="sd">    :param product_info Config: The configuration specific to </span>
673 <span class="sd">                               the product</span>
674 <span class="sd">    :return: True if the product is in dev mode, else False</span>
675 <span class="sd">    :rtype: boolean</span>
676 <span class="sd">    &quot;&quot;&quot;</span>
677     <span class="n">dev</span> <span class="o">=</span> <span class="n">product_info</span><span class="o">.</span><span class="n">dev</span>
678     <span class="n">res</span> <span class="o">=</span> <span class="p">(</span><span class="n">dev</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">&#39;yes&#39;</span><span class="p">)</span>
679     <span class="n">DBG</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">&#39;product_is_dev </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">product_info</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">res</span><span class="p">)</span>
680     <span class="c"># if product_info.name == &quot;XDATA&quot;: return True #test #10569</span>
681     <span class="k">return</span> <span class="n">res</span>
682 </div>
683 <div class="viewcode-block" id="product_is_debug"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.product_is_debug">[docs]</a><span class="k">def</span> <span class="nf">product_is_debug</span><span class="p">(</span><span class="n">product_info</span><span class="p">):</span>
684     <span class="sd">&quot;&quot;&quot;Know if a product is in debug mode</span>
685 <span class="sd">    </span>
686 <span class="sd">    :param product_info Config: The configuration specific to </span>
687 <span class="sd">                               the product</span>
688 <span class="sd">    :return: True if the product is in debug mode, else False</span>
689 <span class="sd">    :rtype: boolean</span>
690 <span class="sd">    &quot;&quot;&quot;</span>
691     <span class="n">debug</span> <span class="o">=</span> <span class="n">product_info</span><span class="o">.</span><span class="n">debug</span>
692     <span class="k">return</span> <span class="n">debug</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">&#39;yes&#39;</span>
693 </div>
694 <div class="viewcode-block" id="product_is_autotools"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.product_is_autotools">[docs]</a><span class="k">def</span> <span class="nf">product_is_autotools</span><span class="p">(</span><span class="n">product_info</span><span class="p">):</span>
695     <span class="sd">&quot;&quot;&quot;Know if a product is compiled using the autotools</span>
696 <span class="sd">    </span>
697 <span class="sd">    :param product_info Config: The configuration specific to </span>
698 <span class="sd">                               the product</span>
699 <span class="sd">    :return: True if the product is autotools, else False</span>
700 <span class="sd">    :rtype: boolean</span>
701 <span class="sd">    &quot;&quot;&quot;</span>
702     <span class="n">build_src</span> <span class="o">=</span> <span class="n">product_info</span><span class="o">.</span><span class="n">build_source</span>
703     <span class="k">return</span> <span class="n">build_src</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">&#39;autotools&#39;</span>
704 </div>
705 <div class="viewcode-block" id="product_is_cmake"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.product_is_cmake">[docs]</a><span class="k">def</span> <span class="nf">product_is_cmake</span><span class="p">(</span><span class="n">product_info</span><span class="p">):</span>
706     <span class="sd">&quot;&quot;&quot;Know if a product is compiled using the cmake</span>
707 <span class="sd">    </span>
708 <span class="sd">    :param product_info Config: The configuration specific to </span>
709 <span class="sd">                               the product</span>
710 <span class="sd">    :return: True if the product is cmake, else False</span>
711 <span class="sd">    :rtype: boolean</span>
712 <span class="sd">    &quot;&quot;&quot;</span>
713     <span class="n">build_src</span> <span class="o">=</span> <span class="n">product_info</span><span class="o">.</span><span class="n">build_source</span>
714     <span class="k">return</span> <span class="n">build_src</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">&#39;cmake&#39;</span>
715 </div>
716 <div class="viewcode-block" id="product_is_vcs"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.product_is_vcs">[docs]</a><span class="k">def</span> <span class="nf">product_is_vcs</span><span class="p">(</span><span class="n">product_info</span><span class="p">):</span>
717     <span class="sd">&quot;&quot;&quot;Know if a product is download using git, svn or cvs (not archive)</span>
718 <span class="sd">    </span>
719 <span class="sd">    :param product_info Config: The configuration specific to </span>
720 <span class="sd">                               the product</span>
721 <span class="sd">    :return: True if the product is vcs, else False</span>
722 <span class="sd">    :rtype: boolean</span>
723 <span class="sd">    &quot;&quot;&quot;</span>
724     <span class="k">return</span> <span class="n">product_info</span><span class="o">.</span><span class="n">get_source</span> <span class="ow">in</span> <span class="n">AVAILABLE_VCS</span>
725 </div>
726 <div class="viewcode-block" id="product_is_smesh_plugin"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.product_is_smesh_plugin">[docs]</a><span class="k">def</span> <span class="nf">product_is_smesh_plugin</span><span class="p">(</span><span class="n">product_info</span><span class="p">):</span>
727     <span class="sd">&quot;&quot;&quot;Know if a product is a SMESH plugin</span>
728 <span class="sd">    </span>
729 <span class="sd">    :param product_info Config: The configuration specific to </span>
730 <span class="sd">                               the product</span>
731 <span class="sd">    :return: True if the product is a SMESH plugin, else False</span>
732 <span class="sd">    :rtype: boolean</span>
733 <span class="sd">    &quot;&quot;&quot;</span>
734     <span class="k">return</span> <span class="p">(</span><span class="s">&quot;properties&quot;</span> <span class="ow">in</span> <span class="n">product_info</span> <span class="ow">and</span>
735             <span class="s">&quot;smesh_plugin&quot;</span> <span class="ow">in</span> <span class="n">product_info</span><span class="o">.</span><span class="n">properties</span> <span class="ow">and</span>
736             <span class="n">product_info</span><span class="o">.</span><span class="n">properties</span><span class="o">.</span><span class="n">smesh_plugin</span> <span class="o">==</span> <span class="s">&quot;yes&quot;</span><span class="p">)</span>
737 </div>
738 <div class="viewcode-block" id="product_is_cpp"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.product_is_cpp">[docs]</a><span class="k">def</span> <span class="nf">product_is_cpp</span><span class="p">(</span><span class="n">product_info</span><span class="p">):</span>
739     <span class="sd">&quot;&quot;&quot;Know if a product is cpp</span>
740 <span class="sd">    </span>
741 <span class="sd">    :param product_info Config: The configuration specific to </span>
742 <span class="sd">                               the product</span>
743 <span class="sd">    :return: True if the product is a cpp, else False</span>
744 <span class="sd">    :rtype: boolean</span>
745 <span class="sd">    &quot;&quot;&quot;</span>
746     <span class="k">return</span> <span class="p">(</span><span class="s">&quot;properties&quot;</span> <span class="ow">in</span> <span class="n">product_info</span> <span class="ow">and</span>
747             <span class="s">&quot;cpp&quot;</span> <span class="ow">in</span> <span class="n">product_info</span><span class="o">.</span><span class="n">properties</span> <span class="ow">and</span>
748             <span class="n">product_info</span><span class="o">.</span><span class="n">properties</span><span class="o">.</span><span class="n">cpp</span> <span class="o">==</span> <span class="s">&quot;yes&quot;</span><span class="p">)</span>
749 </div>
750 <div class="viewcode-block" id="product_compiles"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.product_compiles">[docs]</a><span class="k">def</span> <span class="nf">product_compiles</span><span class="p">(</span><span class="n">product_info</span><span class="p">):</span>
751     <span class="sd">&quot;&quot;&quot;\</span>
752 <span class="sd">    Know if a product compiles or not </span>
753 <span class="sd">    (some products do not have a compilation procedure)</span>
754 <span class="sd">    </span>
755 <span class="sd">    :param product_info Config: The configuration specific to </span>
756 <span class="sd">                               the product</span>
757 <span class="sd">    :return: True if the product compiles, else False</span>
758 <span class="sd">    :rtype: boolean</span>
759 <span class="sd">    &quot;&quot;&quot;</span>
760     <span class="k">return</span> <span class="ow">not</span><span class="p">(</span><span class="s">&quot;properties&quot;</span> <span class="ow">in</span> <span class="n">product_info</span> <span class="ow">and</span>
761             <span class="s">&quot;compilation&quot;</span> <span class="ow">in</span> <span class="n">product_info</span><span class="o">.</span><span class="n">properties</span> <span class="ow">and</span>
762             <span class="n">product_info</span><span class="o">.</span><span class="n">properties</span><span class="o">.</span><span class="n">compilation</span> <span class="o">==</span> <span class="s">&quot;no&quot;</span><span class="p">)</span>
763 </div>
764 <div class="viewcode-block" id="product_has_script"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.product_has_script">[docs]</a><span class="k">def</span> <span class="nf">product_has_script</span><span class="p">(</span><span class="n">product_info</span><span class="p">):</span>
765     <span class="sd">&quot;&quot;&quot;Know if a product has a compilation script</span>
766 <span class="sd">    </span>
767 <span class="sd">    :param product_info Config: The configuration specific to </span>
768 <span class="sd">                               the product</span>
769 <span class="sd">    :return: True if the product it has a compilation script, else False</span>
770 <span class="sd">    :rtype: boolean</span>
771 <span class="sd">    &quot;&quot;&quot;</span>
772     <span class="k">if</span> <span class="s">&quot;build_source&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">product_info</span><span class="p">:</span>
773         <span class="c"># Native case</span>
774         <span class="k">return</span> <span class="bp">False</span>
775     <span class="n">build_src</span> <span class="o">=</span> <span class="n">product_info</span><span class="o">.</span><span class="n">build_source</span>
776     <span class="k">return</span> <span class="n">build_src</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s">&#39;script&#39;</span>
777 </div>
778 <div class="viewcode-block" id="product_has_env_script"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.product_has_env_script">[docs]</a><span class="k">def</span> <span class="nf">product_has_env_script</span><span class="p">(</span><span class="n">product_info</span><span class="p">):</span>
779     <span class="sd">&quot;&quot;&quot;Know if a product has an environment script</span>
780 <span class="sd">    </span>
781 <span class="sd">    :param product_info Config: The configuration specific to </span>
782 <span class="sd">                               the product</span>
783 <span class="sd">    :return: True if the product it has an environment script, else False</span>
784 <span class="sd">    :rtype: boolean</span>
785 <span class="sd">    &quot;&quot;&quot;</span>
786     <span class="k">return</span> <span class="s">&quot;environ&quot;</span> <span class="ow">in</span> <span class="n">product_info</span> <span class="ow">and</span> <span class="s">&quot;env_script&quot;</span> <span class="ow">in</span> <span class="n">product_info</span><span class="o">.</span><span class="n">environ</span>
787 </div>
788 <div class="viewcode-block" id="product_has_patches"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.product_has_patches">[docs]</a><span class="k">def</span> <span class="nf">product_has_patches</span><span class="p">(</span><span class="n">product_info</span><span class="p">):</span>
789     <span class="sd">&quot;&quot;&quot;Know if a product has one or more patches</span>
790 <span class="sd">    </span>
791 <span class="sd">    :param product_info Config: The configuration specific to </span>
792 <span class="sd">                               the product</span>
793 <span class="sd">    :return: True if the product has one or more patches</span>
794 <span class="sd">    :rtype: boolean</span>
795 <span class="sd">    &quot;&quot;&quot;</span>   
796     <span class="n">res</span> <span class="o">=</span> <span class="p">(</span> <span class="s">&quot;patches&quot;</span> <span class="ow">in</span> <span class="n">product_info</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">product_info</span><span class="o">.</span><span class="n">patches</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="p">)</span>
797     <span class="n">DBG</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">&#39;product_has_patches </span><span class="si">%s</span><span class="s">&#39;</span> <span class="o">%</span> <span class="n">product_info</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">res</span><span class="p">)</span>
798     <span class="c"># if product_info.name == &quot;XDATA&quot;: return True #test #10569</span>
799     <span class="k">return</span> <span class="n">res</span>
800 </div>
801 <div class="viewcode-block" id="product_has_logo"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.product_has_logo">[docs]</a><span class="k">def</span> <span class="nf">product_has_logo</span><span class="p">(</span><span class="n">product_info</span><span class="p">):</span>
802     <span class="sd">&quot;&quot;&quot;Know if a product has a logo (YACSGEN generate)</span>
803 <span class="sd">    </span>
804 <span class="sd">    :param product_info Config: The configuration specific to </span>
805 <span class="sd">                               the product</span>
806 <span class="sd">    :return: The path of the logo if the product has a logo, else False</span>
807 <span class="sd">    :rtype: Str</span>
808 <span class="sd">    &quot;&quot;&quot;</span>
809     <span class="k">if</span> <span class="p">(</span><span class="s">&quot;properties&quot;</span> <span class="ow">in</span> <span class="n">product_info</span> <span class="ow">and</span>
810             <span class="s">&quot;logo&quot;</span> <span class="ow">in</span> <span class="n">product_info</span><span class="o">.</span><span class="n">properties</span><span class="p">):</span>
811         <span class="k">return</span> <span class="n">product_info</span><span class="o">.</span><span class="n">properties</span><span class="o">.</span><span class="n">logo</span>
812     <span class="k">else</span><span class="p">:</span>
813         <span class="k">return</span> <span class="bp">False</span>
814 </div>
815 <div class="viewcode-block" id="product_has_salome_gui"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.product_has_salome_gui">[docs]</a><span class="k">def</span> <span class="nf">product_has_salome_gui</span><span class="p">(</span><span class="n">product_info</span><span class="p">):</span>
816     <span class="sd">&quot;&quot;&quot;Know if a product has a SALOME gui</span>
817 <span class="sd">    </span>
818 <span class="sd">    :param product_info Config: The configuration specific to </span>
819 <span class="sd">                               the product</span>
820 <span class="sd">    :return: True if the product has a SALOME gui, else False</span>
821 <span class="sd">    :rtype: Boolean</span>
822 <span class="sd">    &quot;&quot;&quot;</span>
823     <span class="k">return</span> <span class="p">(</span><span class="s">&quot;properties&quot;</span> <span class="ow">in</span> <span class="n">product_info</span> <span class="ow">and</span>
824             <span class="s">&quot;has_salome_gui&quot;</span> <span class="ow">in</span> <span class="n">product_info</span><span class="o">.</span><span class="n">properties</span> <span class="ow">and</span>
825             <span class="n">product_info</span><span class="o">.</span><span class="n">properties</span><span class="o">.</span><span class="n">has_salome_gui</span> <span class="o">==</span> <span class="s">&quot;yes&quot;</span><span class="p">)</span>
826 </div>
827 <div class="viewcode-block" id="product_is_mpi"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.product_is_mpi">[docs]</a><span class="k">def</span> <span class="nf">product_is_mpi</span><span class="p">(</span><span class="n">product_info</span><span class="p">):</span>
828     <span class="sd">&quot;&quot;&quot;Know if a product has openmpi in its dependencies</span>
829 <span class="sd">    </span>
830 <span class="sd">    :param product_info Config: The configuration specific to </span>
831 <span class="sd">                               the product</span>
832 <span class="sd">    :return: True if the product has openmpi inits dependencies</span>
833 <span class="sd">    :rtype: boolean</span>
834 <span class="sd">    &quot;&quot;&quot;</span>
835     <span class="k">return</span> <span class="s">&quot;openmpi&quot;</span> <span class="ow">in</span> <span class="n">product_info</span><span class="o">.</span><span class="n">depend</span>
836 </div>
837 <div class="viewcode-block" id="product_is_generated"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.product_is_generated">[docs]</a><span class="k">def</span> <span class="nf">product_is_generated</span><span class="p">(</span><span class="n">product_info</span><span class="p">):</span>
838     <span class="sd">&quot;&quot;&quot;Know if a product is generated (YACSGEN)</span>
839 <span class="sd">    </span>
840 <span class="sd">    :param product_info Config: The configuration specific to </span>
841 <span class="sd">                               the product</span>
842 <span class="sd">    :return: True if the product is generated</span>
843 <span class="sd">    :rtype: boolean</span>
844 <span class="sd">    &quot;&quot;&quot;</span>
845     <span class="k">return</span> <span class="p">(</span><span class="s">&quot;properties&quot;</span> <span class="ow">in</span> <span class="n">product_info</span> <span class="ow">and</span>
846             <span class="s">&quot;generate&quot;</span> <span class="ow">in</span> <span class="n">product_info</span><span class="o">.</span><span class="n">properties</span> <span class="ow">and</span>
847             <span class="n">product_info</span><span class="o">.</span><span class="n">properties</span><span class="o">.</span><span class="n">generate</span> <span class="o">==</span> <span class="s">&quot;yes&quot;</span><span class="p">)</span>
848 </div>
849 <div class="viewcode-block" id="get_product_components"><a class="viewcode-back" href="../../commands/apidoc/src.html#src.product.get_product_components">[docs]</a><span class="k">def</span> <span class="nf">get_product_components</span><span class="p">(</span><span class="n">product_info</span><span class="p">):</span>
850     <span class="sd">&quot;&quot;&quot;Get the component list to generate with the product</span>
851 <span class="sd">    </span>
852 <span class="sd">    :param product_info Config: The configuration specific to </span>
853 <span class="sd">                               the product</span>
854 <span class="sd">    :return: The list of names of the components</span>
855 <span class="sd">    :rtype: List</span>
856 <span class="sd">    </span>
857 <span class="sd">    &quot;&quot;&quot;</span>
858     <span class="k">if</span> <span class="ow">not</span> <span class="n">product_is_generated</span><span class="p">(</span><span class="n">product_info</span><span class="p">):</span>
859         <span class="k">return</span> <span class="p">[]</span>
860     
861     <span class="n">compo_list</span> <span class="o">=</span> <span class="p">[]</span>
862     <span class="k">if</span> <span class="s">&quot;component_name&quot;</span> <span class="ow">in</span> <span class="n">product_info</span><span class="p">:</span>
863         <span class="n">compo_list</span> <span class="o">=</span> <span class="n">product_info</span><span class="o">.</span><span class="n">component_name</span>
864     
865         <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">compo_list</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
866             <span class="n">compo_list</span> <span class="o">=</span> <span class="p">[</span> <span class="n">compo_list</span> <span class="p">]</span>
867
868     <span class="k">return</span> <span class="n">compo_list</span></div>
869 </pre></div>
870
871           </div>
872         </div>
873       </div>
874       <div class="sphinxsidebar">
875         <div class="sphinxsidebarwrapper">
876             <p class="logo"><a href="../../index.html">
877               <img class="logo" src="../../_static/sat_v5.0.png" alt="Logo"/>
878             </a></p><div class="relations">
879 <h3>Related Topics</h3>
880 <ul>
881   <li><a href="../../index.html">Documentation overview</a><ul>
882   <li><a href="../index.html">Module code</a><ul>
883   </ul></li>
884   </ul></li>
885 </ul>
886 </div>
887 <div id="searchbox" style="display: none">
888   <h3>Quick search</h3>
889     <form class="search" action="../../search.html" method="get">
890       <input type="text" name="q" />
891       <input type="submit" value="Go" />
892       <input type="hidden" name="check_keywords" value="yes" />
893       <input type="hidden" name="area" value="default" />
894     </form>
895     <p class="searchtip" style="font-size: 90%">
896     Enter search terms or a module, class or function name.
897     </p>
898 </div>
899 <script type="text/javascript">$('#searchbox').show(0);</script>
900         </div>
901       </div>
902       <div class="clearer"></div>
903     </div>
904     <div class="footer">
905       &copy;2018, CEA.
906       
907       |
908       Powered by <a href="http://sphinx-doc.org/">Sphinx 1.1.3</a>
909       &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster </a>
910       
911     </div>
912
913     
914
915     
916   </body>
917 </html>