source: flex_extract.git/Documentation/html/_modules/install.html @ 903ed4f

dev
Last change on this file since 903ed4f was 903ed4f, checked in by anphi <anne.philipp@…>, 4 years ago

spell correction

  • Property mode set to 100644
File size: 115.5 KB
Line 
1
2
3<!DOCTYPE html>
4<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
5<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
6<head>
7  <meta charset="utf-8">
8 
9  <meta name="viewport" content="width=device-width, initial-scale=1.0">
10 
11  <title>install &mdash; flex_extract 7.1.2 documentation</title>
12 
13
14 
15 
16 
17 
18
19 
20  <script type="text/javascript" src="../_static/js/modernizr.min.js"></script>
21 
22   
23      <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
24        <script src="../_static/jquery.js"></script>
25        <script src="../_static/underscore.js"></script>
26        <script src="../_static/doctools.js"></script>
27        <script src="../_static/language_data.js"></script>
28        <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
29   
30    <script type="text/javascript" src="../_static/js/theme.js"></script>
31
32   
33
34 
35  <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
36  <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
37  <link rel="stylesheet" href="../_static/css/custom.css" type="text/css" />
38  <link rel="stylesheet" href="../_static/css/theme_overrides.css" type="text/css" />
39    <link rel="index" title="Index" href="../genindex.html" />
40    <link rel="search" title="Search" href="../search.html" /> 
41</head>
42
43<body class="wy-body-for-nav">
44
45   
46  <div class="wy-grid-for-nav">
47   
48    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
49      <div class="wy-side-scroll">
50        <div class="wy-side-nav-search" >
51         
52
53         
54            <a href="../index.html" class="icon icon-home"> flex_extract
55         
56
57         
58          </a>
59
60         
61           
62           
63              <div class="version">
64                7.1.2
65              </div>
66           
67         
68
69         
70<div role="search">
71  <form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
72    <input type="text" name="q" placeholder="Search docs" />
73    <input type="hidden" name="check_keywords" value="yes" />
74    <input type="hidden" name="area" value="default" />
75  </form>
76</div>
77
78         
79        </div>
80
81        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
82         
83           
84           
85             
86           
87           
88              <p class="caption"><span class="caption-text">Table of Contents:</span></p>
89<ul>
90<li class="toctree-l1"><a class="reference internal" href="../ecmwf_data.html">ECMWF Data</a></li>
91<li class="toctree-l1"><a class="reference internal" href="../installation.html">Installation</a></li>
92<li class="toctree-l1"><a class="reference internal" href="../quick_start.html">Usage</a></li>
93<li class="toctree-l1"><a class="reference internal" href="../documentation.html">Code-Level Documentation</a></li>
94<li class="toctree-l1"><a class="reference internal" href="../evaluation.html">Evaluation</a></li>
95<li class="toctree-l1"><a class="reference internal" href="../dev_guide.html">Developer Guide</a></li>
96<li class="toctree-l1"><a class="reference internal" href="../changelog.html">Changelog</a></li>
97<li class="toctree-l1"><a class="reference internal" href="../support.html">Support</a></li>
98<li class="toctree-l1"><a class="reference internal" href="../Support/faq.html">FAQ - Frequently asked questions</a></li>
99<li class="toctree-l1"><a class="reference internal" href="../authors.html">Developer Team</a></li>
100</ul>
101
102           
103         
104        </div>
105      </div>
106    </nav>
107
108    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
109
110     
111      <nav class="wy-nav-top" aria-label="top navigation">
112       
113          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
114          <a href="../index.html">flex_extract</a>
115       
116      </nav>
117
118
119      <div class="wy-nav-content">
120       
121        <div class="rst-content">
122       
123         
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139<div role="navigation" aria-label="breadcrumbs navigation">
140
141  <ul class="wy-breadcrumbs">
142   
143      <li><a href="../index.html">Docs</a> &raquo;</li>
144       
145          <li><a href="index.html">Module code</a> &raquo;</li>
146       
147      <li>install</li>
148   
149   
150      <li class="wy-breadcrumbs-aside">
151       
152      </li>
153   
154  </ul>
155
156 
157  <hr/>
158</div>
159          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
160           <div itemprop="articleBody">
161           
162  <h1>Source code for install</h1><div class="highlight"><pre>
163<span></span><span class="ch">#!/usr/bin/env python3</span>
164<span class="c1"># -*- coding: utf-8 -*-</span>
165<span class="c1">#*******************************************************************************</span>
166<span class="c1"># @Author: Leopold Haimberger (University of Vienna)</span>
167<span class="c1">#</span>
168<span class="c1"># @Date: November 2015</span>
169<span class="c1">#</span>
170<span class="c1"># @Change History:</span>
171<span class="c1">#</span>
172<span class="c1">#    February 2018 - Anne Philipp (University of Vienna):</span>
173<span class="c1">#        - applied PEP8 style guide</span>
174<span class="c1">#        - added documentation</span>
175<span class="c1">#        - moved install_args_and_control in here</span>
176<span class="c1">#        - splitted code in smaller functions</span>
177<span class="c1">#        - delete fortran build files in here instead of compile job script</span>
178<span class="c1">#        - changed static path names to variables from config file</span>
179<span class="c1">#        - splitted install function into several smaller pieces</span>
180<span class="c1">#        - use of tarfile package in python</span>
181<span class="c1">#    June 2020 - Anne Philipp</span>
182<span class="c1">#        - renamed &quot;convert&quot; functions to &quot;fortran&quot; functions</span>
183<span class="c1">#        - reconfigured mk_tarball to select *.template files instead</span>
184<span class="c1">#          of *.nl and *.temp</span>
185<span class="c1">#        - added check for makefile settings</span>
186<span class="c1">#    August 2020 - Leopold Haimberger</span>
187<span class="c1">#        - added a new installation section for system installation (if-else block)</span>
188<span class="c1">#        - read new argument from command line</span>
189<span class="c1">#        - write .setup.rc for a system installation into Run directory</span>
190<span class="c1">#        - copy executables to system path and user files to user path</span>
191<span class="c1">#</span>
192<span class="c1"># @License:</span>
193<span class="c1">#    (C) Copyright 2014-2020.</span>
194<span class="c1">#    Anne Philipp, Leopold Haimberger</span>
195<span class="c1">#</span>
196<span class="c1">#    SPDX-License-Identifier: CC-BY-4.0</span>
197<span class="c1">#</span>
198<span class="c1">#    This work is licensed under the Creative Commons Attribution 4.0</span>
199<span class="c1">#    International License. To view a copy of this license, visit</span>
200<span class="c1">#    http://creativecommons.org/licenses/by/4.0/ or send a letter to</span>
201<span class="c1">#    Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span>
202<span class="c1">#</span>
203<span class="c1"># @Methods:</span>
204<span class="c1">#    main</span>
205<span class="c1">#    get_install_cmdline_args</span>
206<span class="c1">#    install_via_gateway</span>
207<span class="c1">#    check_install_conditions</span>
208<span class="c1">#    mk_tarball</span>
209<span class="c1">#    un_tarball</span>
210<span class="c1">#    mk_env_vars</span>
211<span class="c1">#    mk_compilejob</span>
212<span class="c1">#    mk_job_template</span>
213<span class="c1">#    del_fortran_build</span>
214<span class="c1">#    mk_fortran_build</span>
215<span class="c1">#</span>
216<span class="c1">#*******************************************************************************</span>
217<span class="sd">&#39;&#39;&#39;This script installs the flex_extract program.</span>
218
219<span class="sd">Depending on the selected installation environment (locally or on the</span>
220<span class="sd">ECMWF server ecgate or cca) the program extracts the command line</span>
221<span class="sd">arguments and the CONTROL file parameter and prepares the corresponding</span>
222<span class="sd">environment.</span>
223<span class="sd">The necessary files are collected in a tar ball and placed</span>
224<span class="sd">at the target location. There, is is untared, the environment variables are</span>
225<span class="sd">set, and the Fortran code is compiled.</span>
226<span class="sd">If the ECMWF environment is selected, a job script is prepared and submitted</span>
227<span class="sd">for the remaining configurations after putting the tar ball on the</span>
228<span class="sd">target ECMWF server.</span>
229
230<span class="sd">Type: install.py --help</span>
231<span class="sd">to get information about command line parameters.</span>
232<span class="sd">Read the documentation for usage instructions.</span>
233<span class="sd">&#39;&#39;&#39;</span>
234
235<span class="c1"># ------------------------------------------------------------------------------</span>
236<span class="c1"># MODULES</span>
237<span class="c1"># ------------------------------------------------------------------------------</span>
238<span class="kn">from</span> <span class="nn">__future__</span> <span class="kn">import</span> <span class="n">print_function</span>
239
240<span class="kn">import</span> <span class="nn">os</span>
241<span class="kn">import</span> <span class="nn">sys</span>
242<span class="kn">import</span> <span class="nn">subprocess</span>
243<span class="kn">import</span> <span class="nn">tarfile</span>
244<span class="kn">import</span> <span class="nn">shutil</span>
245<span class="kn">from</span> <span class="nn">argparse</span> <span class="kn">import</span> <span class="n">ArgumentParser</span><span class="p">,</span> <span class="n">ArgumentDefaultsHelpFormatter</span>
246
247<span class="c1"># software specific classes and modules from flex_extract</span>
248<span class="kn">import</span> <span class="nn">_config</span>
249<span class="kn">from</span> <span class="nn">Classes.ControlFile</span> <span class="kn">import</span> <span class="n">ControlFile</span>
250<span class="kn">from</span> <span class="nn">Classes.UioFiles</span> <span class="kn">import</span> <span class="n">UioFiles</span>
251<span class="kn">from</span> <span class="nn">Mods.tools</span> <span class="kn">import</span> <span class="p">(</span><span class="n">make_dir</span><span class="p">,</span> <span class="n">put_file_to_ecserver</span><span class="p">,</span> <span class="n">submit_job_to_ecserver</span><span class="p">,</span>
252                        <span class="n">silent_remove</span><span class="p">,</span> <span class="n">execute_subprocess</span><span class="p">,</span> <span class="n">none_or_str</span><span class="p">,</span>
253                        <span class="n">overwrite_lines_in_file</span><span class="p">,</span> <span class="n">check_for_string_in_file</span><span class="p">)</span>
254
255<span class="c1"># ------------------------------------------------------------------------------</span>
256<span class="c1"># FUNCTIONS</span>
257<span class="c1"># ------------------------------------------------------------------------------</span>
258<div class="viewcode-block" id="main"><a class="viewcode-back" href="../Documentation/Api/api_python.html#install.main">[docs]</a><span class="k">def</span> <span class="nf">main</span><span class="p">():</span>
259    <span class="sd">&#39;&#39;&#39;Controls the installation process. Calls the installation function</span>
260<span class="sd">    if target is specified.</span>
261
262<span class="sd">    Parameters</span>
263<span class="sd">    ----------</span>
264
265<span class="sd">    Return</span>
266<span class="sd">    ------</span>
267<span class="sd">    &#39;&#39;&#39;</span>
268
269    <span class="n">args</span> <span class="o">=</span> <span class="n">get_install_cmdline_args</span><span class="p">()</span>
270    <span class="n">c</span> <span class="o">=</span> <span class="n">ControlFile</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">controlfile</span><span class="p">)</span>
271    <span class="n">c</span><span class="o">.</span><span class="n">assign_args_to_control</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>
272    <span class="n">check_install_conditions</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
273
274    <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">&#39;local&#39;</span><span class="p">,</span> <span class="s1">&#39;syslocal&#39;</span><span class="p">]:</span> <span class="c1"># ecgate or cca</span>
275        <span class="n">install_via_gateway</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
276    <span class="k">else</span><span class="p">:</span> <span class="c1"># local</span>
277        <span class="n">install_local</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
278
279    <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;SUCCESS: INSTALLATION FINISHED!&quot;</span><span class="p">)</span>
280
281    <span class="k">return</span></div>
282
283<div class="viewcode-block" id="get_install_cmdline_args"><a class="viewcode-back" href="../Documentation/Api/api_python.html#install.get_install_cmdline_args">[docs]</a><span class="k">def</span> <span class="nf">get_install_cmdline_args</span><span class="p">():</span>
284    <span class="sd">&#39;&#39;&#39;Decomposes the command line arguments and assigns them to variables.</span>
285<span class="sd">    Apply default values for arguments not present.</span>
286
287<span class="sd">    Parameters</span>
288<span class="sd">    ----------</span>
289
290<span class="sd">    Return</span>
291<span class="sd">    ------</span>
292<span class="sd">    args : Namespace</span>
293<span class="sd">        Contains the commandline arguments from script/program call.</span>
294<span class="sd">    &#39;&#39;&#39;</span>
295    <span class="n">parser</span> <span class="o">=</span> <span class="n">ArgumentParser</span><span class="p">(</span><span class="n">description</span><span class="o">=</span><span class="s1">&#39;Install flex_extract software &#39;</span>
296                                        <span class="s1">&#39;locally or on ECMWF machines&#39;</span><span class="p">,</span>
297                            <span class="n">formatter_class</span><span class="o">=</span><span class="n">ArgumentDefaultsHelpFormatter</span><span class="p">)</span>
298
299    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s1">&#39;--target&#39;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s1">&#39;install_target&#39;</span><span class="p">,</span>
300                        <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
301                        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;Valid targets: syslocal | local | ecgate | cca , </span><span class="se">\</span>
302<span class="s2">                        the latter two are at ECMWF&quot;</span><span class="p">)</span>
303    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">&quot;--makefile&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;makefile&quot;</span><span class="p">,</span>
304                        <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
305                        <span class="n">help</span><span class="o">=</span><span class="s1">&#39;Name of makefile for compiling the &#39;</span>
306                        <span class="s1">&#39;Fortran program&#39;</span><span class="p">)</span>
307    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">&quot;--ecuid&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;ecuid&quot;</span><span class="p">,</span>
308                        <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
309                        <span class="n">help</span><span class="o">=</span><span class="s1">&#39;User id at ECMWF&#39;</span><span class="p">)</span>
310    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">&quot;--ecgid&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;ecgid&quot;</span><span class="p">,</span>
311                        <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
312                        <span class="n">help</span><span class="o">=</span><span class="s1">&#39;Group id at ECMWF&#39;</span><span class="p">)</span>
313    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">&quot;--gateway&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;gateway&quot;</span><span class="p">,</span>
314                        <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
315                        <span class="n">help</span><span class="o">=</span><span class="s1">&#39;Name of the local gateway server&#39;</span><span class="p">)</span>
316    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">&quot;--destination&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;destination&quot;</span><span class="p">,</span>
317                        <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
318                        <span class="n">help</span><span class="o">=</span><span class="s1">&#39;ecaccess association, e.g. &#39;</span>
319                        <span class="s1">&#39;myUser@genericSftp&#39;</span><span class="p">)</span>
320
321    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">&quot;--installdir&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;installdir&quot;</span><span class="p">,</span>
322                        <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
323                        <span class="n">help</span><span class="o">=</span><span class="s1">&#39;Root (user) directory of the &#39;</span>
324                        <span class="s1">&#39;flex_extract installation&#39;</span><span class="p">)</span>
325    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">&quot;--sysinstalldir&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;sysinstalldir&quot;</span><span class="p">,</span>
326                        <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
327                        <span class="n">help</span><span class="o">=</span><span class="s1">&#39;System installation path; where &#39;</span>
328                        <span class="s1">&#39;executables are stored.&#39;</span><span class="p">)</span>
329
330    <span class="c1"># arguments for job submission to ECMWF, only needed by submit.py</span>
331    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">&quot;--job_template&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s1">&#39;job_template&#39;</span><span class="p">,</span>
332                        <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">&quot;job.template&quot;</span><span class="p">,</span>
333                        <span class="n">help</span><span class="o">=</span><span class="s1">&#39;Rudimentary template file to create a batch &#39;</span>
334                        <span class="s1">&#39;job template for submission to ECMWF servers&#39;</span><span class="p">)</span>
335
336    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">&quot;--controlfile&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;controlfile&quot;</span><span class="p">,</span>
337                        <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s1">&#39;CONTROL_EA5&#39;</span><span class="p">,</span>
338                        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;A file that contains all CONTROL parameters.&quot;</span><span class="p">)</span>
339
340    <span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
341
342    <span class="k">return</span> <span class="n">args</span></div>
343
344
345<div class="viewcode-block" id="install_via_gateway"><a class="viewcode-back" href="../Documentation/Api/api_python.html#install.install_via_gateway">[docs]</a><span class="k">def</span> <span class="nf">install_via_gateway</span><span class="p">(</span><span class="n">c</span><span class="p">):</span>
346    <span class="sd">&#39;&#39;&#39;Prepare data transfer to remote gateway and submit a job script which will</span>
347<span class="sd">    install everything on the remote gateway.</span>
348
349<span class="sd">    Parameters</span>
350<span class="sd">    ----------</span>
351<span class="sd">    c : ControlFile</span>
352<span class="sd">        Contains all the parameters of CONTROL file and</span>
353<span class="sd">        command line.</span>
354
355<span class="sd">    Return</span>
356<span class="sd">    ------</span>
357
358<span class="sd">    &#39;&#39;&#39;</span>
359
360    <span class="n">tarball_name</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">FLEXEXTRACT_DIRNAME</span> <span class="o">+</span> <span class="s1">&#39;.tar&#39;</span>
361    <span class="n">tar_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">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span><span class="p">,</span> <span class="n">tarball_name</span><span class="p">)</span>
362
363    <span class="n">mk_compilejob</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">makefile</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">ecuid</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">ecgid</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">)</span>
364
365    <span class="n">mk_job_template</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">ecuid</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">ecgid</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">)</span>
366
367    <span class="n">mk_env_vars</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">ecuid</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">ecgid</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">gateway</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">destination</span><span class="p">)</span>
368
369    <span class="n">mk_tarball</span><span class="p">(</span><span class="n">tar_file</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span><span class="p">)</span>
370
371    <span class="n">put_file_to_ecserver</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span><span class="p">,</span> <span class="n">tarball_name</span><span class="p">,</span>
372                         <span class="n">c</span><span class="o">.</span><span class="n">install_target</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">ecuid</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">ecgid</span><span class="p">)</span>
373
374    <span class="n">submit_job_to_ecserver</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">install_target</span><span class="p">,</span>
375                           <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">PATH_REL_JOBSCRIPTS</span><span class="p">,</span>
376                                        <span class="n">_config</span><span class="o">.</span><span class="n">FILE_INSTALL_COMPILEJOB</span><span class="p">))</span>
377
378    <span class="n">silent_remove</span><span class="p">(</span><span class="n">tar_file</span><span class="p">)</span>
379
380    <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Job compilation script has been submitted to ecgate for &#39;</span> <span class="o">+</span>
381          <span class="s1">&#39;installation in &#39;</span> <span class="o">+</span> <span class="n">c</span><span class="o">.</span><span class="n">installdir</span> <span class="o">+</span>
382          <span class="s1">&#39;/&#39;</span> <span class="o">+</span> <span class="n">_config</span><span class="o">.</span><span class="n">FLEXEXTRACT_DIRNAME</span><span class="p">)</span>
383    <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;You should get an email with subject &quot;flexcompile&quot; within &#39;</span> <span class="o">+</span>
384          <span class="s1">&#39;the next few minutes!&#39;</span><span class="p">)</span>
385
386    <span class="k">return</span></div>
387
388<div class="viewcode-block" id="install_local"><a class="viewcode-back" href="../Documentation/Api/api_python.html#install.install_local">[docs]</a><span class="k">def</span> <span class="nf">install_local</span><span class="p">(</span><span class="n">c</span><span class="p">):</span>
389    <span class="sd">&#39;&#39;&#39;Perform the actual installation on a local machine.</span>
390
391<span class="sd">    Parameters</span>
392<span class="sd">    ----------</span>
393<span class="sd">    c : ControlFile</span>
394<span class="sd">        Contains all the parameters of CONTROL file and</span>
395<span class="sd">        command line.</span>
396
397<span class="sd">    Return</span>
398<span class="sd">    ------</span>
399
400<span class="sd">    &#39;&#39;&#39;</span>
401
402    <span class="n">tar_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">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span><span class="p">,</span>
403                            <span class="n">_config</span><span class="o">.</span><span class="n">FLEXEXTRACT_DIRNAME</span> <span class="o">+</span> <span class="s1">&#39;.tar&#39;</span><span class="p">)</span>
404
405    <span class="n">c</span><span class="o">.</span><span class="n">installdir</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">abspath</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">expandvars</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">expanduser</span><span class="p">(</span>
406                <span class="n">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">)))</span>
407    <span class="n">c</span><span class="o">.</span><span class="n">sysinstalldir</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">abspath</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">expandvars</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">expanduser</span><span class="p">(</span>
408        <span class="n">c</span><span class="o">.</span><span class="n">sysinstalldir</span><span class="p">)))</span>
409
410    <span class="c1"># this is standard installation into a single directory</span>
411    <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span> <span class="o">==</span> <span class="s1">&#39;local&#39;</span><span class="p">:</span>
412
413        <span class="c1"># installation into the current directory</span>
414        <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">abspath</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span><span class="p">)</span> <span class="o">==</span> <span class="n">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">:</span>
415            <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;WARNING: installdir has not been specified&#39;</span><span class="p">)</span>
416            <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;flex_extract will be installed in current dir by compiling the &#39;</span> <span class="o">+</span>
417                  <span class="s1">&#39;Fortran source in &#39;</span> <span class="o">+</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_FORTRAN_SRC</span><span class="p">)</span>
418            <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_FORTRAN_SRC</span><span class="p">)</span>
419        <span class="c1"># installation into a different path</span>
420        <span class="k">elif</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span><span class="p">)</span> <span class="o">!=</span> <span class="n">c</span><span class="o">.</span><span class="n">installdir</span> <span class="p">:</span>
421
422            <span class="c1"># creates the target working directory for flex_extract</span>
423            <span class="n">mk_tarball</span><span class="p">(</span><span class="n">tar_file</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span><span class="p">)</span>
424            <span class="n">make_dir</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">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">,</span>
425                                  <span class="n">_config</span><span class="o">.</span><span class="n">FLEXEXTRACT_DIRNAME</span><span class="p">))</span>
426            <span class="n">os</span><span class="o">.</span><span class="n">chdir</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">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">,</span>
427                                  <span class="n">_config</span><span class="o">.</span><span class="n">FLEXEXTRACT_DIRNAME</span><span class="p">))</span>
428            <span class="n">un_tarball</span><span class="p">(</span><span class="n">tar_file</span><span class="p">)</span>
429            <span class="n">os</span><span class="o">.</span><span class="n">chdir</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">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">,</span>
430                                  <span class="n">_config</span><span class="o">.</span><span class="n">FLEXEXTRACT_DIRNAME</span><span class="p">,</span>
431                                  <span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_FORTRAN_SRC</span><span class="p">))</span>
432
433        <span class="c1"># Create Fortran executable</span>
434        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Install &#39;</span> <span class="o">+</span>  <span class="n">_config</span><span class="o">.</span><span class="n">FLEXEXTRACT_DIRNAME</span> <span class="o">+</span> <span class="s1">&#39; software at &#39;</span> <span class="o">+</span>
435              <span class="n">c</span><span class="o">.</span><span class="n">install_target</span> <span class="o">+</span> <span class="s1">&#39; in directory &#39;</span> <span class="o">+</span> <span class="n">c</span><span class="o">.</span><span class="n">installdir</span> <span class="o">+</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
436
437        <span class="n">del_fortran_build</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">)</span>
438        <span class="n">mk_fortran_build</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">makefile</span><span class="p">)</span>
439        <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="s1">&#39;../../&#39;</span><span class="p">)</span>
440        <span class="c1"># make sure that the correct calling of submit.py script is in run_local.sh</span>
441        <span class="n">overwrite_lines_in_file</span><span class="p">(</span><span class="s1">&#39;Run/run_local.sh&#39;</span><span class="p">,</span>
442                                <span class="s1">&#39;pyscript=&#39;</span><span class="p">,</span> <span class="s1">&#39;pyscript=../Source/Python/submit.py</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
443
444    <span class="c1"># this is system installation were executables and user files are separated</span>
445    <span class="k">elif</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span> <span class="o">==</span> <span class="s1">&#39;syslocal&#39;</span><span class="p">:</span>
446        <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">abspath</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span><span class="p">)</span> <span class="o">==</span> <span class="n">c</span><span class="o">.</span><span class="n">sysinstalldir</span> <span class="p">:</span>
447            <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">&#39;ERROR: System installation path is equal to user &#39;</span>
448                     <span class="s1">&#39;installation path.</span><span class="se">\n</span><span class="s1"> Please change either the system &#39;</span>
449                     <span class="s1">&#39;installation path or use installation target &quot;local&quot;.&#39;</span><span class="p">)</span>
450        <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">abspath</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span><span class="p">)</span> <span class="o">==</span> <span class="n">c</span><span class="o">.</span><span class="n">installdir</span> <span class="p">:</span>
451            <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Flex_extract will be installed in current directory!&#39;</span><span class="p">)</span>
452        <span class="k">else</span><span class="p">:</span> <span class="c1"># install user part in different dir</span>
453            <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Flex_extract will be installed in &#39;</span> <span class="o">+</span> <span class="n">c</span><span class="o">.</span><span class="n">installdir</span> <span class="p">)</span>
454
455            <span class="n">c</span><span class="o">.</span><span class="n">installdir</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">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">,</span><span class="n">_config</span><span class="o">.</span><span class="n">FLEXEXTRACT_DIRNAME</span><span class="p">)</span>
456            <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">isdir</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">):</span>
457                <span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">)</span>
458
459            <span class="c1"># copy all files except Python and Fortranfiles to this dir</span>
460            <span class="n">shutil</span><span class="o">.</span><span class="n">copytree</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span><span class="p">,</span>
461                            <span class="n">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">,</span> <span class="n">symlinks</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
462            <span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</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">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">,</span><span class="s1">&#39;Source&#39;</span><span class="p">))</span>
463            <span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</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">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">,</span><span class="s1">&#39;.git&#39;</span><span class="p">))</span>
464            <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">,</span> <span class="s1">&#39;*~&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">:</span>
465                <span class="n">silent_remove</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
466
467            <span class="n">os</span><span class="o">.</span><span class="n">remove</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">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">,</span><span class="s1">&#39;setup.sh&#39;</span><span class="p">))</span>
468            <span class="n">os</span><span class="o">.</span><span class="n">remove</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">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">,</span><span class="s1">&#39;setup_local.sh&#39;</span><span class="p">))</span>
469
470        <span class="c1"># configure run_local script correctly</span>
471        <span class="c1"># check if source of system config file is already in run_local.sh,</span>
472        <span class="c1"># if not, add it</span>
473        <span class="k">if</span> <span class="ow">not</span> <span class="n">check_for_string_in_file</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">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">,</span><span class="s1">&#39;Run/run_local.sh&#39;</span><span class="p">),</span>
474                                 <span class="s1">&#39;source .setup.rc&#39;</span><span class="p">):</span>
475            <span class="n">overwrite_lines_in_file</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">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">,</span><span class="s1">&#39;Run/run_local.sh&#39;</span><span class="p">),</span>
476                                    <span class="s1">&#39;# PATH TO SUBMISSION SCRIPT&#39;</span><span class="p">,</span>
477                                    <span class="s1">&#39;# PATH TO SUBMISSION SCRIPT</span><span class="se">\n</span><span class="s1">source &#39;</span><span class="o">+</span><span class="n">_config</span><span class="o">.</span><span class="n">FILE_SYS_CONFIG</span><span class="o">+</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
478        <span class="c1"># make sure that the correct calling of submit.py script is in run_local.sh</span>
479        <span class="n">overwrite_lines_in_file</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">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">,</span><span class="s1">&#39;Run/run_local.sh&#39;</span><span class="p">),</span>
480                                <span class="s1">&#39;pyscript=&#39;</span><span class="p">,</span> <span class="s1">&#39;pyscript=submit.py</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
481
482        <span class="c1"># change permission for file to executable</span>
483        <span class="n">execute_subprocess</span><span class="p">([</span><span class="s1">&#39;chmod&#39;</span><span class="p">,</span> <span class="s1">&#39;0775&#39;</span><span class="p">,</span>
484                            <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">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">),</span><span class="s1">&#39;Run/run_local.sh&#39;</span><span class="p">)])</span>
485
486
487        <span class="c1"># create systemdir</span>
488        <span class="n">c</span><span class="o">.</span><span class="n">sysinstalldir</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">c</span><span class="o">.</span><span class="n">sysinstalldir</span><span class="p">,</span><span class="n">_config</span><span class="o">.</span><span class="n">FLEXEXTRACT_DIRNAME</span><span class="p">)</span>
489        <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">isdir</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">sysinstalldir</span><span class="p">):</span>
490            <span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">sysinstalldir</span><span class="p">)</span>
491
492        <span class="c1"># create setup file for running flex_extract with system installation</span>
493        <span class="k">with</span> <span class="nb">open</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">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">),</span><span class="s1">&#39;Run/.setup.rc&#39;</span><span class="p">),</span><span class="s1">&#39;w&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">fio</span><span class="p">:</span>
494            <span class="n">fio</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">&#39;#!/bin/bash </span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
495            <span class="n">fio</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">&#39;export FLEXEXTRACT_USER_DIR=&#39;</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">abspath</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">)</span><span class="o">+</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
496            <span class="n">fio</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">&#39;export PATH=&#39;</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">abspath</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">sysinstalldir</span><span class="p">)</span><span class="o">+</span><span class="s1">&#39;/Python:$</span><span class="si">{PATH}</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
497            <span class="n">fio</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s1">&#39;export PATH=&#39;</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">abspath</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">sysinstalldir</span><span class="p">)</span><span class="o">+</span><span class="s1">&#39;:$</span><span class="si">{PATH}</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
498
499        <span class="c1"># copy all Python and Fortranfiles to this dir</span>
500        <span class="n">shutil</span><span class="o">.</span><span class="n">copytree</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_SOURCES</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">sysinstalldir</span><span class="p">,</span> <span class="n">symlinks</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
501
502        <span class="n">os</span><span class="o">.</span><span class="n">chdir</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">c</span><span class="o">.</span><span class="n">sysinstalldir</span><span class="p">,</span><span class="s1">&#39;Fortran&#39;</span><span class="p">))</span>
503        <span class="c1"># Create Fortran executable</span>
504        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Install &#39;</span> <span class="o">+</span>  <span class="n">_config</span><span class="o">.</span><span class="n">FLEXEXTRACT_DIRNAME</span> <span class="o">+</span> <span class="s1">&#39; software as &#39;</span> <span class="o">+</span>
505              <span class="n">c</span><span class="o">.</span><span class="n">install_target</span> <span class="o">+</span> <span class="s1">&#39; in directory &#39;</span> <span class="o">+</span>
506              <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">sysinstalldir</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
507
508        <span class="n">del_fortran_build</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">)</span>
509        <span class="n">mk_fortran_build</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">makefile</span><span class="p">)</span>
510
511        <span class="n">outfile</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">,</span><span class="s1">&#39;*.out&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span>
512        <span class="n">test</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">c</span><span class="o">.</span><span class="n">sysinstalldir</span><span class="p">,</span><span class="s1">&#39;calc_etadot&#39;</span><span class="p">)</span>
513        <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">outfile</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
514            <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;WARNING: Multiple executables for Fortran code are available!&#39;</span><span class="p">)</span>
515        <span class="c1"># move executable one dir up and delete Fortran dir</span>
516        <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="s1">&#39;..&#39;</span><span class="p">)</span>
517        <span class="n">shutil</span><span class="o">.</span><span class="n">move</span><span class="p">(</span><span class="n">outfile</span><span class="p">[</span><span class="mi">0</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">c</span><span class="o">.</span><span class="n">sysinstalldir</span><span class="p">,</span><span class="s1">&#39;calc_etadot&#39;</span><span class="p">))</span>
518        <span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</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">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">sysinstalldir</span><span class="p">),</span><span class="s1">&#39;Fortran&#39;</span><span class="p">))</span>
519
520    <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span><span class="p">)</span>
521    <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">isfile</span><span class="p">(</span><span class="n">tar_file</span><span class="p">):</span>
522        <span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">tar_file</span><span class="p">)</span>
523
524    <span class="k">return</span></div>
525
526
527<div class="viewcode-block" id="check_install_conditions"><a class="viewcode-back" href="../Documentation/Api/api_python.html#install.check_install_conditions">[docs]</a><span class="k">def</span> <span class="nf">check_install_conditions</span><span class="p">(</span><span class="n">c</span><span class="p">):</span>
528    <span class="sd">&#39;&#39;&#39;Checks necessary attributes and conditions</span>
529<span class="sd">    for the installation, e.g. whether they exist and contain values.</span>
530<span class="sd">    Otherwise set default values.</span>
531
532<span class="sd">    Parameters</span>
533<span class="sd">    ----------</span>
534<span class="sd">    c : ControlFile</span>
535<span class="sd">        Contains all the parameters of CONTROL file and</span>
536<span class="sd">        command line.</span>
537
538
539<span class="sd">    Return</span>
540<span class="sd">    ------</span>
541
542<span class="sd">    &#39;&#39;&#39;</span>
543
544    <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span> <span class="ow">and</span> \
545       <span class="n">c</span><span class="o">.</span><span class="n">install_target</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">_config</span><span class="o">.</span><span class="n">INSTALL_TARGETS</span><span class="p">:</span>
546        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;ERROR: unknown or missing installation target &#39;</span><span class="p">)</span>
547        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;target: &#39;</span><span class="p">,</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span><span class="p">)</span>
548        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;please specify correct installation target &#39;</span> <span class="o">+</span>
549              <span class="nb">str</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">INSTALL_TARGETS</span><span class="p">))</span>
550        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;use -h or --help for help&#39;</span><span class="p">)</span>
551        <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
552
553    <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span> <span class="ow">and</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">&#39;local&#39;</span><span class="p">,</span> <span class="s1">&#39;syslocal&#39;</span><span class="p">]:</span>
554        <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">ecgid</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">ecuid</span><span class="p">:</span>
555            <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Please enter your ECMWF user id and group id &#39;</span>
556                  <span class="s1">&#39; with command line options --ecuid --ecgid&#39;</span><span class="p">)</span>
557            <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Try &quot;&#39;</span> <span class="o">+</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> \
558                  <span class="s1">&#39; -h&quot; to print usage information&#39;</span><span class="p">)</span>
559            <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Please consult ecaccess documentation or ECMWF user &#39;</span>
560                  <span class="s1">&#39;support for further details.</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
561            <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
562        <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">gateway</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">destination</span><span class="p">:</span>
563            <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;WARNING: Parameters GATEWAY and DESTINATION were &#39;</span>
564                  <span class="s1">&#39;not properly set for working on ECMWF server. </span><span class="se">\n</span><span class="s1">&#39;</span>
565                  <span class="s1">&#39;There will be no transfer of output files to the &#39;</span>
566                  <span class="s1">&#39;local gateway server possible!&#39;</span><span class="p">)</span>
567        <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">:</span>
568            <span class="n">c</span><span class="o">.</span><span class="n">installdir</span> <span class="o">=</span> <span class="s1">&#39;$</span><span class="si">{HOME}</span><span class="s1">&#39;</span>
569    <span class="k">elif</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span> <span class="o">==</span> <span class="s1">&#39;local&#39;</span><span class="p">:</span>
570        <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">:</span>
571            <span class="n">c</span><span class="o">.</span><span class="n">installdir</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span>
572    <span class="k">elif</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span> <span class="o">==</span> <span class="s1">&#39;syslocal&#39;</span><span class="p">:</span>
573        <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">installdir</span><span class="p">:</span>
574            <span class="n">c</span><span class="o">.</span><span class="n">installdir</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span>
575        <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">sysinstalldir</span><span class="p">:</span>
576            <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;ERROR: System installation was selected but &#39;</span>
577                  <span class="s1">&#39;no system installation path was defined.&#39;</span><span class="p">)</span>
578            <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">()</span>
579
580    <span class="k">if</span> <span class="ow">not</span> <span class="n">c</span><span class="o">.</span><span class="n">makefile</span><span class="p">:</span>
581        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;WARNING: no makefile was specified.&#39;</span><span class="p">)</span>
582        <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span> <span class="o">==</span> <span class="s1">&#39;local&#39;</span><span class="p">:</span>
583            <span class="n">c</span><span class="o">.</span><span class="n">makefile</span> <span class="o">=</span> <span class="s1">&#39;makefile_local_gfortran&#39;</span>
584            <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;WARNING: default makefile selected: makefile_local_gfortan&#39;</span><span class="p">)</span>
585        <span class="k">elif</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span> <span class="o">==</span> <span class="s1">&#39;ecgate&#39;</span><span class="p">:</span>
586            <span class="n">c</span><span class="o">.</span><span class="n">makefile</span> <span class="o">=</span> <span class="s1">&#39;makefile_ecgate&#39;</span>
587            <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;WARNING: default makefile selected: makefile_ecgate&#39;</span><span class="p">)</span>
588        <span class="k">elif</span> <span class="n">c</span><span class="o">.</span><span class="n">install_target</span> <span class="o">==</span> <span class="s1">&#39;cca&#39;</span> <span class="ow">or</span> \
589             <span class="n">c</span><span class="o">.</span><span class="n">install_target</span> <span class="o">==</span> <span class="s1">&#39;ccb&#39;</span><span class="p">:</span>
590            <span class="n">c</span><span class="o">.</span><span class="n">makefile</span> <span class="o">=</span> <span class="s1">&#39;makefile_cray&#39;</span>
591            <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;WARNING: default makefile selected: makefile_cray&#39;</span><span class="p">)</span>
592        <span class="k">else</span><span class="p">:</span>
593            <span class="k">pass</span>
594
595    <span class="k">return</span></div>
596
597
598<div class="viewcode-block" id="mk_tarball"><a class="viewcode-back" href="../Documentation/Api/api_python.html#install.mk_tarball">[docs]</a><span class="k">def</span> <span class="nf">mk_tarball</span><span class="p">(</span><span class="n">tarball_path</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span>
599    <span class="sd">&#39;&#39;&#39;Creates a tarball with all necessary files which need to be sent to the</span>
600<span class="sd">    installation directory.</span>
601<span class="sd">    It does not matter whether this is local or remote.</span>
602<span class="sd">    Collects all Python files, the Fortran source and makefiles,</span>
603<span class="sd">    the ECMWF_ENV file, the CONTROL files as well as the</span>
604<span class="sd">    template files.</span>
605
606<span class="sd">    Parameters</span>
607<span class="sd">    ----------</span>
608<span class="sd">    tarball_path : str</span>
609<span class="sd">        The complete path to the tar file which will contain all</span>
610<span class="sd">        relevant data for flex_extract.</span>
611
612<span class="sd">    target : str</span>
613<span class="sd">        The queue where the job is submitted to.</span>
614
615<span class="sd">    Return</span>
616<span class="sd">    ------</span>
617
618<span class="sd">    &#39;&#39;&#39;</span>
619
620    <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Create tarball ...&#39;</span><span class="p">)</span>
621
622    <span class="c1"># change to FLEXEXTRACT directory so that the tar can contain</span>
623    <span class="c1"># relative pathes to the files and directories</span>
624    <span class="n">ecd</span> <span class="o">=</span> <span class="n">_config</span><span class="o">.</span><span class="n">PATH_FLEXEXTRACT_DIR</span> <span class="o">+</span> <span class="s1">&#39;/&#39;</span>
625    <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">ecd</span><span class="p">)</span>
626
627    <span class="c1"># get lists of the files to be added to the tar file</span>
628    <span class="k">if</span> <span class="n">target</span> <span class="o">==</span> <span class="s1">&#39;local&#39;</span><span class="p">:</span>
629        <span class="n">ecmwf_env_file</span> <span class="o">=</span> <span class="p">[]</span>
630        <span class="n">runfile</span> <span class="o">=</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">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span>
631                   <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_RUN_DIR</span><span class="p">,</span>
632                                     <span class="s1">&#39;run_local.sh&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span>
633    <span class="k">else</span><span class="p">:</span>
634        <span class="n">ecmwf_env_file</span> <span class="o">=</span> <span class="p">[</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_ECMWF_ENV</span><span class="p">]</span>
635        <span class="n">runfile</span> <span class="o">=</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">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span>
636                   <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_RUN_DIR</span><span class="p">,</span>
637                                     <span class="s1">&#39;run.sh&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span>
638
639    <span class="n">pyfiles</span> <span class="o">=</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">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span>
640               <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_PYTHON_SRC</span><span class="p">,</span> <span class="s1">&#39;*py&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span>
641    <span class="n">pytestfiles</span> <span class="o">=</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">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span>
642                   <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_PYTHONTEST_SRC</span><span class="p">,</span> <span class="s1">&#39;*py&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span>
643    <span class="n">controlfiles</span> <span class="o">=</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">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span>
644                    <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_CONTROLFILES</span><span class="p">,</span>
645                                      <span class="s1">&#39;CONTROL*&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span>
646    <span class="n">testfiles</span> <span class="o">=</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">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span>
647                 <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_TEST</span><span class="o">+</span><span class="s2">&quot;/Installation&quot;</span><span class="p">,</span> <span class="s1">&#39;*&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span>
648    <span class="n">tempfiles</span> <span class="o">=</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">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span>
649                 <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_TEMPLATES</span><span class="p">,</span> <span class="s1">&#39;*.template&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span>
650    <span class="n">gribtable</span> <span class="o">=</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">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span>
651                 <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_TEMPLATES</span><span class="p">,</span> <span class="s1">&#39;*grib*&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span>
652    <span class="n">ffiles</span> <span class="o">=</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">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span>
653              <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_FORTRAN_SRC</span><span class="p">,</span> <span class="s1">&#39;*.f90&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span>
654    <span class="n">hfiles</span> <span class="o">=</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">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span>
655              <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_FORTRAN_SRC</span><span class="p">,</span> <span class="s1">&#39;*.h&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span>
656    <span class="n">makefiles</span> <span class="o">=</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">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span>
657                 <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_FORTRAN_SRC</span><span class="p">,</span> <span class="s1">&#39;makefile*&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span>
658    <span class="n">jobdir</span> <span class="o">=</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">relpath</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">ecd</span><span class="p">)</span>
659               <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_JOBSCRIPTS</span><span class="p">,</span> <span class="s1">&#39;*.md&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">files</span><span class="p">]</span>
660
661    <span class="c1"># concatenate single lists to one for a better looping</span>
662    <span class="n">filelist</span> <span class="o">=</span> <span class="n">pyfiles</span> <span class="o">+</span> <span class="n">pytestfiles</span> <span class="o">+</span> <span class="n">controlfiles</span> <span class="o">+</span> <span class="n">tempfiles</span> <span class="o">+</span> \
663               <span class="n">ffiles</span> <span class="o">+</span> <span class="n">gribtable</span> <span class="o">+</span> <span class="n">hfiles</span> <span class="o">+</span> <span class="n">makefiles</span> <span class="o">+</span> <span class="n">ecmwf_env_file</span> <span class="o">+</span> \
664               <span class="n">runfile</span> <span class="o">+</span> <span class="n">jobdir</span> <span class="o">+</span> <span class="n">testfiles</span> <span class="o">+</span>\
665               <span class="p">[</span><span class="s1">&#39;CODE_OF_CONDUCT.md&#39;</span><span class="p">,</span> <span class="s1">&#39;LICENSE.md&#39;</span><span class="p">,</span> <span class="s1">&#39;README.md&#39;</span><span class="p">]</span>
666
667    <span class="c1"># create installation tar-file</span>
668    <span class="n">exclude_files</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;.ksh&quot;</span><span class="p">,</span> <span class="s2">&quot;.tar&quot;</span><span class="p">]</span>
669    <span class="k">try</span><span class="p">:</span>
670        <span class="k">with</span> <span class="n">tarfile</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">tarball_path</span><span class="p">,</span> <span class="s2">&quot;w:gz&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">tar_handle</span><span class="p">:</span>
671            <span class="k">for</span> <span class="n">filename</span> <span class="ow">in</span> <span class="n">filelist</span><span class="p">:</span>
672                <span class="n">tar_handle</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="n">recursive</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
673                               <span class="nb">filter</span><span class="o">=</span><span class="k">lambda</span> <span class="n">tarinfo</span><span class="p">:</span> <span class="kc">None</span>
674                               <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">splitext</span><span class="p">(</span><span class="n">tarinfo</span><span class="o">.</span><span class="n">name</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span>
675                               <span class="ow">in</span> <span class="n">exclude_files</span>
676                               <span class="k">else</span> <span class="n">tarinfo</span><span class="p">)</span>
677    <span class="k">except</span> <span class="n">tarfile</span><span class="o">.</span><span class="n">TarError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
678        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... ERROR: &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
679
680        <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">... error occured while trying to create the tar-file &#39;</span> <span class="o">+</span>
681                 <span class="nb">str</span><span class="p">(</span><span class="n">tarball_path</span><span class="p">))</span>
682
683    <span class="k">return</span></div>
684
685
686<div class="viewcode-block" id="un_tarball"><a class="viewcode-back" href="../Documentation/Api/api_python.html#install.un_tarball">[docs]</a><span class="k">def</span> <span class="nf">un_tarball</span><span class="p">(</span><span class="n">tarball_path</span><span class="p">):</span>
687    <span class="sd">&#39;&#39;&#39;Extracts the given tarball into current directory.</span>
688
689<span class="sd">    Parameters</span>
690<span class="sd">    ----------</span>
691<span class="sd">    tarball_path : str</span>
692<span class="sd">        The complete path to the tar file which will contain all</span>
693<span class="sd">        relevant data for flex_extract.</span>
694
695<span class="sd">    Return</span>
696<span class="sd">    ------</span>
697
698<span class="sd">    &#39;&#39;&#39;</span>
699
700    <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Untar ...&#39;</span><span class="p">)</span>
701
702    <span class="k">try</span><span class="p">:</span>
703        <span class="k">with</span> <span class="n">tarfile</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">tarball_path</span><span class="p">)</span> <span class="k">as</span> <span class="n">tar_handle</span><span class="p">:</span>
704            <span class="n">tar_handle</span><span class="o">.</span><span class="n">extractall</span><span class="p">()</span>
705    <span class="k">except</span> <span class="n">tarfile</span><span class="o">.</span><span class="n">TarError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
706        <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">... error occured while trying to read tar-file &#39;</span> <span class="o">+</span>
707                 <span class="nb">str</span><span class="p">(</span><span class="n">tarball_path</span><span class="p">))</span>
708    <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
709        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... ERROR CODE: &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span>
710        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span>
711
712        <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">... error occured while trying to read tar-file &#39;</span> <span class="o">+</span>
713                 <span class="nb">str</span><span class="p">(</span><span class="n">tarball_path</span><span class="p">))</span>
714
715    <span class="k">return</span></div>
716
717<div class="viewcode-block" id="mk_env_vars"><a class="viewcode-back" href="../Documentation/Api/api_python.html#install.mk_env_vars">[docs]</a><span class="k">def</span> <span class="nf">mk_env_vars</span><span class="p">(</span><span class="n">ecuid</span><span class="p">,</span> <span class="n">ecgid</span><span class="p">,</span> <span class="n">gateway</span><span class="p">,</span> <span class="n">destination</span><span class="p">):</span>
718    <span class="sd">&#39;&#39;&#39;Creates a file named ECMWF_ENV which contains the</span>
719<span class="sd">    necessary environmental variables at ECMWF servers.</span>
720<span class="sd">    It is based on the template ECMWF_ENV.template.</span>
721
722<span class="sd">    Parameters</span>
723<span class="sd">    ----------</span>
724<span class="sd">    ecuid : str</span>
725<span class="sd">        The user id on ECMWF server.</span>
726
727<span class="sd">    ecgid : str</span>
728<span class="sd">        The group id on ECMWF server.</span>
729
730<span class="sd">    gateway : str</span>
731<span class="sd">        The gateway server the user is using.</span>
732
733<span class="sd">    destination : str</span>
734<span class="sd">        The remote destination which is used to transfer files</span>
735<span class="sd">        from ECMWF server to local gateway server.</span>
736
737<span class="sd">    Return</span>
738<span class="sd">    ------</span>
739
740<span class="sd">    &#39;&#39;&#39;</span>
741    <span class="kn">from</span> <span class="nn">genshi.template.text</span> <span class="kn">import</span> <span class="n">NewTextTemplate</span>
742    <span class="kn">from</span> <span class="nn">genshi.template</span> <span class="kn">import</span>  <span class="n">TemplateLoader</span>
743    <span class="kn">from</span> <span class="nn">genshi.template.eval</span> <span class="kn">import</span> <span class="n">UndefinedError</span>
744
745    <span class="k">try</span><span class="p">:</span>
746        <span class="n">loader</span> <span class="o">=</span> <span class="n">TemplateLoader</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> <span class="n">auto_reload</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
747        <span class="n">ecmwfvars_template</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_USER_ENVVARS</span><span class="p">,</span>
748                                         <span class="bp">cls</span><span class="o">=</span><span class="n">NewTextTemplate</span><span class="p">)</span>
749
750        <span class="n">stream</span> <span class="o">=</span> <span class="n">ecmwfvars_template</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span><span class="n">user_name</span><span class="o">=</span><span class="n">ecuid</span><span class="p">,</span>
751                                             <span class="n">user_group</span><span class="o">=</span><span class="n">ecgid</span><span class="p">,</span>
752                                             <span class="n">gateway_name</span><span class="o">=</span><span class="n">gateway</span><span class="p">,</span>
753                                             <span class="n">destination_name</span><span class="o">=</span><span class="n">destination</span>
754                                            <span class="p">)</span>
755    <span class="k">except</span> <span class="n">UndefinedError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
756        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... ERROR &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
757
758        <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">... error occured while trying to generate template &#39;</span> <span class="o">+</span>
759                 <span class="n">_config</span><span class="o">.</span><span class="n">PATH_ECMWF_ENV</span><span class="p">)</span>
760    <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
761        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... ERROR CODE: &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span>
762        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span>
763
764        <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">... error occured while trying to generate template &#39;</span> <span class="o">+</span>
765                 <span class="n">_config</span><span class="o">.</span><span class="n">PATH_ECMWF_ENV</span><span class="p">)</span>
766
767    <span class="k">try</span><span class="p">:</span>
768        <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_ECMWF_ENV</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
769            <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">stream</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s1">&#39;text&#39;</span><span class="p">))</span>
770    <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
771        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... ERROR CODE: &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span>
772        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span>
773
774        <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">... error occured while trying to write &#39;</span> <span class="o">+</span>
775                 <span class="n">_config</span><span class="o">.</span><span class="n">PATH_ECMWF_ENV</span><span class="p">)</span>
776
777    <span class="k">return</span></div>
778
779<div class="viewcode-block" id="mk_compilejob"><a class="viewcode-back" href="../Documentation/Api/api_python.html#install.mk_compilejob">[docs]</a><span class="k">def</span> <span class="nf">mk_compilejob</span><span class="p">(</span><span class="n">makefile</span><span class="p">,</span> <span class="n">ecuid</span><span class="p">,</span> <span class="n">ecgid</span><span class="p">,</span> <span class="n">fp_root</span><span class="p">):</span>
780    <span class="sd">&#39;&#39;&#39;Modifies the original job template file so that it is specified</span>
781<span class="sd">    for the user and the environment were it will be applied. Result</span>
782<span class="sd">    is stored in a new file &quot;job.temp&quot; in the python directory.</span>
783
784<span class="sd">    Parameters</span>
785<span class="sd">    ----------</span>
786<span class="sd">    makefile : str</span>
787<span class="sd">        Name of the makefile which should be used to compile the Fortran</span>
788<span class="sd">        program.</span>
789
790<span class="sd">    ecuid : str</span>
791<span class="sd">        The user id on ECMWF server.</span>
792
793<span class="sd">    ecgid : str</span>
794<span class="sd">        The group id on ECMWF server.</span>
795
796<span class="sd">    fp_root : str</span>
797<span class="sd">       Path to the root directory of FLEXPART environment or flex_extract</span>
798<span class="sd">       environment.</span>
799
800<span class="sd">    Return</span>
801<span class="sd">    ------</span>
802
803<span class="sd">    &#39;&#39;&#39;</span>
804    <span class="kn">from</span> <span class="nn">genshi.template.text</span> <span class="kn">import</span> <span class="n">NewTextTemplate</span>
805    <span class="kn">from</span> <span class="nn">genshi.template</span> <span class="kn">import</span>  <span class="n">TemplateLoader</span>
806    <span class="kn">from</span> <span class="nn">genshi.template.eval</span> <span class="kn">import</span>  <span class="n">UndefinedError</span>
807
808    <span class="k">if</span> <span class="n">fp_root</span> <span class="o">==</span> <span class="s1">&#39;../&#39;</span><span class="p">:</span>
809        <span class="n">fp_root</span> <span class="o">=</span> <span class="s1">&#39;$HOME&#39;</span>
810
811    <span class="k">try</span><span class="p">:</span>
812        <span class="n">loader</span> <span class="o">=</span> <span class="n">TemplateLoader</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> <span class="n">auto_reload</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
813        <span class="n">compile_template</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_INSTALL_COMPILEJOB</span><span class="p">,</span>
814                                       <span class="bp">cls</span><span class="o">=</span><span class="n">NewTextTemplate</span><span class="p">)</span>
815
816        <span class="n">stream</span> <span class="o">=</span> <span class="n">compile_template</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span>
817            <span class="n">usergroup</span><span class="o">=</span><span class="n">ecgid</span><span class="p">,</span>
818            <span class="n">username</span><span class="o">=</span><span class="n">ecuid</span><span class="p">,</span>
819            <span class="n">version_number</span><span class="o">=</span><span class="n">_config</span><span class="o">.</span><span class="n">_VERSION_STR</span><span class="p">,</span>
820            <span class="n">fp_root_scripts</span><span class="o">=</span><span class="n">fp_root</span><span class="p">,</span>
821            <span class="n">makefile</span><span class="o">=</span><span class="n">makefile</span><span class="p">,</span>
822            <span class="n">fortran_program</span><span class="o">=</span><span class="n">_config</span><span class="o">.</span><span class="n">FORTRAN_EXECUTABLE</span>
823        <span class="p">)</span>
824    <span class="k">except</span> <span class="n">UndefinedError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
825        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... ERROR &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
826
827        <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">... error occured while trying to generate template &#39;</span> <span class="o">+</span>
828                 <span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_INSTALL_COMPILEJOB</span><span class="p">)</span>
829    <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
830        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... ERROR CODE: &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span>
831        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span>
832
833        <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">... error occured while trying to generate template &#39;</span> <span class="o">+</span>
834                 <span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_INSTALL_COMPILEJOB</span><span class="p">)</span>
835
836    <span class="k">try</span><span class="p">:</span>
837        <span class="n">compilejob</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">PATH_JOBSCRIPTS</span><span class="p">,</span>
838                                  <span class="n">_config</span><span class="o">.</span><span class="n">FILE_INSTALL_COMPILEJOB</span><span class="p">)</span>
839
840        <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">compilejob</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
841            <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">stream</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s1">&#39;text&#39;</span><span class="p">))</span>
842    <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
843        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... ERROR CODE: &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span>
844        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span>
845
846        <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">... error occured while trying to write &#39;</span> <span class="o">+</span>
847                 <span class="n">compilejob</span><span class="p">)</span>
848
849    <span class="k">return</span></div>
850
851<div class="viewcode-block" id="mk_job_template"><a class="viewcode-back" href="../Documentation/Api/api_python.html#install.mk_job_template">[docs]</a><span class="k">def</span> <span class="nf">mk_job_template</span><span class="p">(</span><span class="n">ecuid</span><span class="p">,</span> <span class="n">ecgid</span><span class="p">,</span> <span class="n">fp_root</span><span class="p">):</span>
852    <span class="sd">&#39;&#39;&#39;Modifies the original job template file so that it is specified</span>
853<span class="sd">    for the user and the environment were it will be applied. Result</span>
854<span class="sd">    is stored in a new file.</span>
855
856<span class="sd">    Parameters</span>
857<span class="sd">    ----------</span>
858<span class="sd">    ecuid : str</span>
859<span class="sd">        The user id on ECMWF server.</span>
860
861<span class="sd">    ecgid : str</span>
862<span class="sd">        The group id on ECMWF server.</span>
863
864<span class="sd">    fp_root : str</span>
865<span class="sd">       Path to the root directory of FLEXPART environment or flex_extract</span>
866<span class="sd">       environment.</span>
867
868<span class="sd">    Return</span>
869<span class="sd">    ------</span>
870
871<span class="sd">    &#39;&#39;&#39;</span>
872    <span class="kn">from</span> <span class="nn">genshi.template.text</span> <span class="kn">import</span> <span class="n">NewTextTemplate</span>
873    <span class="kn">from</span> <span class="nn">genshi.template</span> <span class="kn">import</span>  <span class="n">TemplateLoader</span>
874    <span class="kn">from</span> <span class="nn">genshi.template.eval</span> <span class="kn">import</span>  <span class="n">UndefinedError</span>
875
876    <span class="n">fp_root_path_to_python</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">fp_root</span><span class="p">,</span>
877                                          <span class="n">_config</span><span class="o">.</span><span class="n">FLEXEXTRACT_DIRNAME</span><span class="p">,</span>
878                                          <span class="n">_config</span><span class="o">.</span><span class="n">PATH_REL_PYTHON_SRC</span><span class="p">)</span>
879    <span class="k">if</span> <span class="s1">&#39;$&#39;</span> <span class="ow">in</span> <span class="n">fp_root_path_to_python</span><span class="p">:</span>
880        <span class="n">ind</span> <span class="o">=</span> <span class="n">fp_root_path_to_python</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s1">&#39;$&#39;</span><span class="p">)</span>
881        <span class="n">fp_root_path_to_python</span> <span class="o">=</span> <span class="n">fp_root_path_to_python</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="n">ind</span><span class="p">]</span> <span class="o">+</span> <span class="s1">&#39;$&#39;</span> <span class="o">+</span> \
882                                 <span class="n">fp_root_path_to_python</span><span class="p">[</span><span class="n">ind</span><span class="p">:]</span>
883
884    <span class="k">try</span><span class="p">:</span>
885        <span class="n">loader</span> <span class="o">=</span> <span class="n">TemplateLoader</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">PATH_TEMPLATES</span><span class="p">,</span> <span class="n">auto_reload</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
886        <span class="n">compile_template</span> <span class="o">=</span> <span class="n">loader</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_INSTALL_JOB</span><span class="p">,</span>
887                                       <span class="bp">cls</span><span class="o">=</span><span class="n">NewTextTemplate</span><span class="p">)</span>
888
889        <span class="n">stream</span> <span class="o">=</span> <span class="n">compile_template</span><span class="o">.</span><span class="n">generate</span><span class="p">(</span>
890            <span class="n">usergroup</span><span class="o">=</span><span class="n">ecgid</span><span class="p">,</span>
891            <span class="n">username</span><span class="o">=</span><span class="n">ecuid</span><span class="p">,</span>
892            <span class="n">version_number</span><span class="o">=</span><span class="n">_config</span><span class="o">.</span><span class="n">_VERSION_STR</span><span class="p">,</span>
893            <span class="n">fp_root_path</span><span class="o">=</span><span class="n">fp_root_path_to_python</span><span class="p">,</span>
894        <span class="p">)</span>
895    <span class="k">except</span> <span class="n">UndefinedError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
896        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... ERROR &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
897
898        <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">... error occured while trying to generate template &#39;</span> <span class="o">+</span>
899                 <span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_INSTALL_JOB</span><span class="p">)</span>
900    <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
901        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... ERROR CODE: &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span>
902        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span>
903
904        <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">... error occured while trying to generate template &#39;</span> <span class="o">+</span>
905                 <span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_INSTALL_JOB</span><span class="p">)</span>
906
907
908    <span class="k">try</span><span class="p">:</span>
909        <span class="n">tempjobfile</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">PATH_TEMPLATES</span><span class="p">,</span>
910                                   <span class="n">_config</span><span class="o">.</span><span class="n">TEMPFILE_JOB</span><span class="p">)</span>
911
912        <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">tempjobfile</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
913            <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">stream</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s1">&#39;text&#39;</span><span class="p">))</span>
914    <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
915        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... ERROR CODE: &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">errno</span><span class="p">))</span>
916        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">strerror</span><span class="p">))</span>
917
918        <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">... error occured while trying to write &#39;</span> <span class="o">+</span>
919                 <span class="n">tempjobfile</span><span class="p">)</span>
920
921    <span class="k">return</span></div>
922
923<div class="viewcode-block" id="del_fortran_build"><a class="viewcode-back" href="../Documentation/Api/api_python.html#install.del_fortran_build">[docs]</a><span class="k">def</span> <span class="nf">del_fortran_build</span><span class="p">(</span><span class="n">src_path</span><span class="p">):</span>
924    <span class="sd">&#39;&#39;&#39;Clean up the Fortran source directory and remove all</span>
925<span class="sd">    build files (e.g. \*.o, \*.mod and FORTRAN EXECUTABLE)</span>
926
927<span class="sd">    Parameters</span>
928<span class="sd">    ----------</span>
929<span class="sd">    src_path : str</span>
930<span class="sd">        Path to the fortran source directory.</span>
931
932<span class="sd">    Return</span>
933<span class="sd">    ------</span>
934
935<span class="sd">    &#39;&#39;&#39;</span>
936
937    <span class="n">modfiles</span> <span class="o">=</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">src_path</span><span class="p">,</span> <span class="s1">&#39;*.mod&#39;</span><span class="p">)</span>
938    <span class="n">objfiles</span> <span class="o">=</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">src_path</span><span class="p">,</span> <span class="s1">&#39;*.o&#39;</span><span class="p">)</span>
939    <span class="n">exefile</span> <span class="o">=</span> <span class="n">UioFiles</span><span class="p">(</span><span class="n">src_path</span><span class="p">,</span> <span class="n">_config</span><span class="o">.</span><span class="n">FORTRAN_EXECUTABLE</span><span class="p">)</span>
940
941    <span class="n">modfiles</span><span class="o">.</span><span class="n">delete_files</span><span class="p">()</span>
942    <span class="n">objfiles</span><span class="o">.</span><span class="n">delete_files</span><span class="p">()</span>
943    <span class="n">exefile</span><span class="o">.</span><span class="n">delete_files</span><span class="p">()</span>
944
945    <span class="k">return</span></div>
946
947<div class="viewcode-block" id="mk_fortran_build"><a class="viewcode-back" href="../Documentation/Api/api_python.html#install.mk_fortran_build">[docs]</a><span class="k">def</span> <span class="nf">mk_fortran_build</span><span class="p">(</span><span class="n">src_path</span><span class="p">,</span> <span class="n">makefile</span><span class="p">):</span>
948    <span class="sd">&#39;&#39;&#39;Compiles the Fortran code and generates the executable.</span>
949
950<span class="sd">    Parameters</span>
951<span class="sd">    ----------</span>
952<span class="sd">    src_path : str</span>
953<span class="sd">        Path to the fortran source directory.</span>
954
955<span class="sd">    makefile : str</span>
956<span class="sd">        The name of the makefile which should be used.</span>
957
958<span class="sd">    Return</span>
959<span class="sd">    ------</span>
960
961<span class="sd">    &#39;&#39;&#39;</span>
962
963    <span class="k">try</span><span class="p">:</span>
964        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Using makefile: &#39;</span> <span class="o">+</span> <span class="n">makefile</span><span class="p">)</span>
965        <span class="n">p</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">Popen</span><span class="p">([</span><span class="s1">&#39;make&#39;</span><span class="p">,</span> <span class="s1">&#39;-f&#39;</span><span class="p">,</span>
966                              <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">src_path</span><span class="p">,</span> <span class="n">makefile</span><span class="p">)],</span>
967                             <span class="n">stdin</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
968                             <span class="n">stdout</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
969                             <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">PIPE</span><span class="p">,</span>
970                             <span class="n">bufsize</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
971        <span class="n">pout</span><span class="p">,</span> <span class="n">perr</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">communicate</span><span class="p">()</span>
972        <span class="nb">print</span><span class="p">(</span><span class="n">pout</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span>
973        <span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">returncode</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
974            <span class="nb">print</span><span class="p">(</span><span class="n">perr</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span>
975            <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Please edit &#39;</span> <span class="o">+</span> <span class="n">makefile</span> <span class="o">+</span>
976                  <span class="s1">&#39; or try another makefile in the src directory.&#39;</span><span class="p">)</span>
977            <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Most likely ECCODES_INCLUDE_DIR, ECCODES_LIB &#39;</span>
978                  <span class="s1">&#39;and EMOSLIB must be adapted.&#39;</span><span class="p">)</span>
979            <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Available makefiles:&#39;</span><span class="p">)</span>
980            <span class="nb">print</span><span class="p">(</span><span class="n">UioFiles</span><span class="p">(</span><span class="n">src_path</span><span class="p">,</span> <span class="s1">&#39;makefile*&#39;</span><span class="p">))</span>
981            <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">&#39;Compilation failed!&#39;</span><span class="p">)</span>
982    <span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
983        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;ERROR: makefile call failed:&#39;</span><span class="p">)</span>
984        <span class="nb">print</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
985    <span class="k">else</span><span class="p">:</span>
986        <span class="n">execute_subprocess</span><span class="p">([</span><span class="s1">&#39;ls&#39;</span><span class="p">,</span> <span class="s1">&#39;-l&#39;</span><span class="p">,</span>
987                            <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">src_path</span><span class="p">,</span> <span class="n">_config</span><span class="o">.</span><span class="n">FORTRAN_EXECUTABLE</span><span class="p">)],</span>
988                           <span class="n">error_msg</span><span class="o">=</span><span class="s1">&#39;FORTRAN EXECUTABLE COULD NOT BE FOUND!&#39;</span><span class="p">)</span>
989
990    <span class="k">return</span></div>
991
992
993<span class="k">if</span> <span class="vm">__name__</span> <span class="o">==</span> <span class="s2">&quot;__main__&quot;</span><span class="p">:</span>
994    <span class="n">main</span><span class="p">()</span>
995</pre></div>
996
997           </div>
998           
999          </div>
1000          <footer>
1001 
1002
1003  <hr/>
1004
1005  <div role="contentinfo">
1006    <p>
1007        &copy; Copyright 2020, Anne Philipp, Leopold Haimberger and Petra Seibert
1008
1009    </p>
1010  </div>
1011  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
1012
1013</footer>
1014
1015        </div>
1016      </div>
1017
1018    </section>
1019
1020  </div>
1021 
1022
1023
1024  <script type="text/javascript">
1025      jQuery(function () {
1026          SphinxRtdTheme.Navigation.enable(true);
1027      });
1028  </script>
1029
1030 
1031 
1032   
1033   
1034
1035</body>
1036</html>
Note: See TracBrowser for help on using the repository browser.
hosted by ZAMG