Ignore:
Timestamp:
Jan 15, 2019, 1:03:37 AM (5 years ago)
Author:
Anne Philipp <anne.philipp@…>
Branches:
master, ctbto, dev
Children:
6f951ca
Parents:
0629ba8
Message:

new build of sphinx for updated api

File:
1 edited

Legend:

Unmodified
Added
Removed
  • documentation/Sphinx/build/html/_modules/tools.html

    r274f9ef r2625ca8  
    167167<span class="c1">#          my_error, normal_exit, init128, to_param_id</span>
    168168<span class="c1">#</span>
    169 <span class="c1">#    April 2018 - Anne Philipp (University of Vienna):</span>
     169<span class="c1">#    April - December 2018 - Anne Philipp (University of Vienna):</span>
    170170<span class="c1">#        - applied PEP8 style guide</span>
    171171<span class="c1">#        - added documentation</span>
    172 <span class="c1">#        - moved all functions from file Flexparttools to this file tools</span>
    173 <span class="c1">#        - added function get_list_as_string</span>
     172<span class="c1">#        - moved all non class methods from former file Flexparttools in here</span>
    174173<span class="c1">#        - seperated args and control interpretation</span>
     174<span class="c1">#        - added functions get_list_as_string, read_ecenv, send_mail, make_dir,</span>
     175<span class="c1">#          put_file_to_ecserver, submit_job_to_ecserver, get_informations,</span>
     176<span class="c1">#          get_dimensions, execute_subprocess, none_or_int, none_or_str</span>
    175177<span class="c1">#</span>
    176178<span class="c1"># @License:</span>
    177 <span class="c1">#    (C) Copyright 2014-2018.</span>
     179<span class="c1">#    (C) Copyright 2014-2019.</span>
     180<span class="c1">#    Anne Philipp, Leopold Haimberger</span>
    178181<span class="c1">#</span>
    179 <span class="c1">#    This software is licensed under the terms of the Apache Licence Version 2.0</span>
    180 <span class="c1">#    which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.</span>
     182<span class="c1">#    This work is licensed under the Creative Commons Attribution 4.0</span>
     183<span class="c1">#    International License. To view a copy of this license, visit</span>
     184<span class="c1">#    http://creativecommons.org/licenses/by/4.0/ or send a letter to</span>
     185<span class="c1">#    Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.</span>
    181186<span class="c1">#</span>
    182 <span class="c1"># @Modul Description:</span>
    183 <span class="c1">#    This module contains a couple of helpful functions which are</span>
    184 <span class="c1">#    used in different places in flex_extract.</span>
    185 <span class="c1">#</span>
    186 <span class="c1"># @Module Content:</span>
    187 <span class="c1">#    - get_cmdline_arguments</span>
    188 <span class="c1">#    - clean_up</span>
    189 <span class="c1">#    - my_error</span>
    190 <span class="c1">#    - normal_exit</span>
    191 <span class="c1">#    - product</span>
    192 <span class="c1">#    - silent_remove</span>
    193 <span class="c1">#    - init128</span>
    194 <span class="c1">#    - to_param_id</span>
    195 <span class="c1">#    - get_list_as_string</span>
    196 <span class="c1">#    - make_dir</span>
    197 <span class="c1">#</span>
     187<span class="c1"># @Methods:</span>
     188<span class="c1">#    none_or_str</span>
     189<span class="c1">#    none_or_int</span>
     190<span class="c1">#    get_cmdline_args</span>
     191<span class="c1">#    read_ecenv</span>
     192<span class="c1">#    clean_up</span>
     193<span class="c1">#    my_error</span>
     194<span class="c1">#    send_mail</span>
     195<span class="c1">#    normal_exit</span>
     196<span class="c1">#    product</span>
     197<span class="c1">#    silent_remove</span>
     198<span class="c1">#    init128</span>
     199<span class="c1">#    to_param_id</span>
     200<span class="c1">#    get_list_as_string</span>
     201<span class="c1">#    make_dir</span>
     202<span class="c1">#    put_file_to_ecserver</span>
     203<span class="c1">#    submit_job_to_ecserver</span>
     204<span class="c1">#    get_informations</span>
     205<span class="c1">#    get_dimensions</span>
     206<span class="c1">#    execute_subprocess</span>
    198207<span class="c1">#*******************************************************************************</span>
     208<span class="sd">&#39;&#39;&#39;This module contains a collection of diverse tasks within flex_extract.</span>
     209<span class="sd">&#39;&#39;&#39;</span>
    199210
    200211<span class="c1"># ------------------------------------------------------------------------------</span>
     
    207218<span class="kn">import</span> <span class="nn">subprocess</span>
    208219<span class="kn">import</span> <span class="nn">traceback</span>
     220<span class="kn">import</span> <span class="nn">exceptions</span>
     221<span class="kn">from</span> <span class="nn">datetime</span> <span class="k">import</span> <span class="n">datetime</span>
    209222<span class="kn">from</span> <span class="nn">argparse</span> <span class="k">import</span> <span class="n">ArgumentParser</span><span class="p">,</span> <span class="n">ArgumentDefaultsHelpFormatter</span>
    210223
    211224<span class="c1"># ------------------------------------------------------------------------------</span>
    212 <span class="c1"># FUNCTIONS</span>
     225<span class="c1"># METHODS</span>
    213226<span class="c1"># ------------------------------------------------------------------------------</span>
    214227
     
    219232<span class="sd">    Parameters</span>
    220233<span class="sd">    ----------</span>
    221 <span class="sd">    value : :obj:`string`</span>
     234<span class="sd">    value : str</span>
    222235<span class="sd">        String to be checked for the &quot;None&quot; word.</span>
    223236
     
    238251<span class="sd">    Parameters</span>
    239252<span class="sd">    ----------</span>
    240 <span class="sd">    value : :obj:`string`</span>
     253<span class="sd">    value : str</span>
    241254<span class="sd">        String to be checked for the &quot;None&quot; word.</span>
    242255
     
    252265    <span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">)</span></div>
    253266
    254 <div class="viewcode-block" id="get_cmdline_arguments"><a class="viewcode-back" href="../api.html#tools.get_cmdline_arguments">[docs]</a><span class="k">def</span> <span class="nf">get_cmdline_arguments</span><span class="p">():</span>
     267<div class="viewcode-block" id="get_cmdline_args"><a class="viewcode-back" href="../api.html#tools.get_cmdline_args">[docs]</a><span class="k">def</span> <span class="nf">get_cmdline_args</span><span class="p">():</span>
    255268    <span class="sd">&#39;&#39;&#39;Decomposes the command line arguments and assigns them to variables.</span>
    256269<span class="sd">    Apply default values for non mentioned arguments.</span>
     
    261274<span class="sd">    Return</span>
    262275<span class="sd">    ------</span>
    263 <span class="sd">    args : :obj:`Namespace`</span>
     276<span class="sd">    args : Namespace</span>
    264277<span class="sd">        Contains the commandline arguments from script/program call.</span>
    265278<span class="sd">    &#39;&#39;&#39;</span>
     
    269282                            <span class="n">formatter_class</span><span class="o">=</span><span class="n">ArgumentDefaultsHelpFormatter</span><span class="p">)</span>
    270283
    271     <span class="c1"># the most important arguments</span>
     284    <span class="c1"># control parameters that override control file values</span>
    272285    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">&quot;--start_date&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;start_date&quot;</span><span class="p">,</span>
    273286                        <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>
     
    279292                        <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
    280293                        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;# of days to be retrieved at once&quot;</span><span class="p">)</span>
     294    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">&quot;--job_chunk&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;job_chunk&quot;</span><span class="p">,</span>
     295                        <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
     296                        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;# of days to be retrieved within a single job&quot;</span><span class="p">)</span>
    281297    <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>
    282298                        <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.temp&#39;</span><span class="p">,</span>
    283299                        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;file with CONTROL parameters&quot;</span><span class="p">)</span>
    284 
    285     <span class="c1"># parameter for extra output information</span>
    286     <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">&quot;--debug&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;debug&quot;</span><span class="p">,</span>
    287                         <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
    288                         <span class="n">help</span><span class="o">=</span><span class="s2">&quot;debug mode - leave temporary files intact&quot;</span><span class="p">)</span>
    289     <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">&quot;--request&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;request&quot;</span><span class="p">,</span>
    290                         <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
    291                         <span class="n">help</span><span class="o">=</span><span class="s2">&quot;list all mars request in file mars_requests.dat </span><span class="se">\</span>
    292 <span class="s2">                        and skip submission to mars&quot;</span><span class="p">)</span>
    293     <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">&quot;--public&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;public&quot;</span><span class="p">,</span>
    294                         <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
    295                         <span class="n">help</span><span class="o">=</span><span class="s2">&quot;public mode - retrieves the public datasets&quot;</span><span class="p">)</span>
    296 
    297     <span class="c1"># some arguments that override the default in the CONTROL file</span>
    298300    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">&quot;--basetime&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;basetime&quot;</span><span class="p">,</span>
    299301                        <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
     
    309311                        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;area defined as north/west/south/east&quot;</span><span class="p">)</span>
    310312
    311     <span class="c1"># set the working directories</span>
     313    <span class="c1"># some switches</span>
     314    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">&quot;--debug&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;debug&quot;</span><span class="p">,</span>
     315                        <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
     316                        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;debug mode - leave temporary files intact&quot;</span><span class="p">)</span>
     317    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">&quot;--request&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;request&quot;</span><span class="p">,</span>
     318                        <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
     319                        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;list all mars requests in file mars_requests.dat&quot;</span><span class="p">)</span>
     320    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">&quot;--public&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;public&quot;</span><span class="p">,</span>
     321                        <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
     322                        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;public mode - retrieves the public datasets&quot;</span><span class="p">)</span>
     323    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">&quot;--rrint&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;rrint&quot;</span><span class="p">,</span>
     324                        <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
     325                        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;select old or new precipitation interpolation </span><span class="se">\</span>
     326<span class="s2">                        0 - old method</span><span class="se">\</span>
     327<span class="s2">                        1 - new method (additional subgrid points)&quot;</span><span class="p">)</span>
     328
     329    <span class="c1"># set directories</span>
    312330    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">&quot;--inputdir&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;inputdir&quot;</span><span class="p">,</span>
    313331                        <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>
     
    316334                        <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>
    317335                        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;root directory for storing output files&quot;</span><span class="p">)</span>
    318     <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">&quot;--flexpart_root_scripts&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;flexpart_root_scripts&quot;</span><span class="p">,</span>
     336    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">&quot;--flexpartdir&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;flexpartdir&quot;</span><span class="p">,</span>
    319337                        <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>
    320338                        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;FLEXPART root directory (to find grib2flexpart </span><span class="se">\</span>
     
    324342    <span class="c1"># this is only used by prepare_flexpart.py to rerun a postprocessing step</span>
    325343    <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">&quot;--ppid&quot;</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">&quot;ppid&quot;</span><span class="p">,</span>
    326                         <span class="nb">type</span><span class="o">=</span><span class="n">none_or_int</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
     344                        <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>
    327345                        <span class="n">help</span><span class="o">=</span><span class="s2">&quot;specify parent process id for </span><span class="se">\</span>
    328346<span class="s2">                        rerun of prepare_flexpart&quot;</span><span class="p">)</span>
     
    341359    <span class="k">return</span> <span class="n">args</span></div>
    342360
    343 <div class="viewcode-block" id="read_ecenv"><a class="viewcode-back" href="../api.html#tools.read_ecenv">[docs]</a><span class="k">def</span> <span class="nf">read_ecenv</span><span class="p">(</span><span class="n">filename</span><span class="p">):</span>
     361<div class="viewcode-block" id="read_ecenv"><a class="viewcode-back" href="../api.html#tools.read_ecenv">[docs]</a><span class="k">def</span> <span class="nf">read_ecenv</span><span class="p">(</span><span class="n">filepath</span><span class="p">):</span>
    344362    <span class="sd">&#39;&#39;&#39;Reads the file into a dictionary where the key values are the parameter</span>
    345363<span class="sd">    names.</span>
     
    347365<span class="sd">    Parameters</span>
    348366<span class="sd">    ----------</span>
    349 <span class="sd">    filename : :obj:`string`</span>
     367<span class="sd">    filepath : str</span>
    350368<span class="sd">        Path to file where the ECMWF environment parameters are stored.</span>
    351369
    352370<span class="sd">    Return</span>
    353371<span class="sd">    ------</span>
    354 <span class="sd">    envs : :obj:`dictionary`</span>
     372<span class="sd">    envs : dict</span>
    355373<span class="sd">        Contains the environment parameter ecuid, ecgid, gateway</span>
    356374<span class="sd">        and destination for ECMWF server environments.</span>
    357375<span class="sd">    &#39;&#39;&#39;</span>
    358376    <span class="n">envs</span><span class="o">=</span> <span class="p">{}</span>
    359 
    360     <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">,</span> <span class="s1">&#39;r&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
    361         <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">f</span><span class="p">:</span>
    362             <span class="n">data</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
    363             <span class="n">envs</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">])]</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
     377    <span class="k">try</span><span class="p">:</span>
     378        <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filepath</span><span class="p">,</span> <span class="s1">&#39;r&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
     379            <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">f</span><span class="p">:</span>
     380                <span class="n">data</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
     381                <span class="n">envs</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">])]</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
     382    <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
     383        <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>
     384        <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>
     385
     386        <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 ECMWF_ENV &#39;</span>
     387                     <span class="s1">&#39;file: &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">filepath</span><span class="p">))</span>
    364388
    365389    <span class="k">return</span> <span class="n">envs</span></div>
    366390
    367391<div class="viewcode-block" id="clean_up"><a class="viewcode-back" href="../api.html#tools.clean_up">[docs]</a><span class="k">def</span> <span class="nf">clean_up</span><span class="p">(</span><span class="n">c</span><span class="p">):</span>
    368     <span class="sd">&#39;&#39;&#39;Remove all files from intermediate directory (inputdir).</span>
    369 
    370 <span class="sd">    Parameters</span>
    371 <span class="sd">    ----------</span>
    372 <span class="sd">    c : :obj:`ControlFile`</span>
     392    <span class="sd">&#39;&#39;&#39;Remove files from the intermediate directory (inputdir).</span>
     393
     394<span class="sd">    It keeps the final FLEXPART input files if program runs without</span>
     395<span class="sd">    ECMWF Api and keywords &quot;ectrans&quot; or &quot;ecstorage&quot; are set to &quot;1&quot;.</span>
     396
     397<span class="sd">    Parameters</span>
     398<span class="sd">    ----------</span>
     399<span class="sd">    c : ControlFile</span>
    373400<span class="sd">        Contains all the parameters of CONTROL file and</span>
    374401<span class="sd">        command line.</span>
     
    379406<span class="sd">    &#39;&#39;&#39;</span>
    380407
    381     <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;clean_up&quot;</span><span class="p">)</span>
    382 
    383     <span class="n">cleanlist</span> <span class="o">=</span> <span class="n">glob</span><span class="o">.</span><span class="n">glob</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">inputdir</span> <span class="o">+</span> <span class="s2">&quot;/*&quot;</span><span class="p">)</span>
    384     <span class="k">for</span> <span class="n">clist</span> <span class="ow">in</span> <span class="n">cleanlist</span><span class="p">:</span>
    385         <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">prefix</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">clist</span><span class="p">:</span>
    386             <span class="n">silent_remove</span><span class="p">(</span><span class="n">clist</span><span class="p">)</span>
    387         <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">ecapi</span> <span class="ow">is</span> <span class="kc">False</span> <span class="ow">and</span> <span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">ectrans</span> <span class="o">==</span> <span class="s1">&#39;1&#39;</span> <span class="ow">or</span> <span class="n">c</span><span class="o">.</span><span class="n">ecstorage</span> <span class="o">==</span> <span class="s1">&#39;1&#39;</span><span class="p">):</span>
    388             <span class="n">silent_remove</span><span class="p">(</span><span class="n">clist</span><span class="p">)</span>
    389 
    390     <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Done&quot;</span><span class="p">)</span>
     408    <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;... clean inputdir!&quot;</span><span class="p">)</span>
     409
     410    <span class="n">cleanlist</span> <span class="o">=</span> <span class="n">glob</span><span class="o">.</span><span class="n">glob</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">inputdir</span><span class="p">,</span> <span class="s2">&quot;*&quot;</span><span class="p">))</span>
     411
     412    <span class="k">if</span> <span class="n">cleanlist</span><span class="p">:</span>
     413        <span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">cleanlist</span><span class="p">:</span>
     414            <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">prefix</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">element</span><span class="p">:</span>
     415                <span class="n">silent_remove</span><span class="p">(</span><span class="n">element</span><span class="p">)</span>
     416            <span class="k">if</span> <span class="n">c</span><span class="o">.</span><span class="n">ecapi</span> <span class="ow">is</span> <span class="kc">False</span> <span class="ow">and</span> <span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">ectrans</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">or</span> <span class="n">c</span><span class="o">.</span><span class="n">ecstorage</span> <span class="o">==</span> <span class="mi">1</span><span class="p">):</span>
     417                <span class="n">silent_remove</span><span class="p">(</span><span class="n">element</span><span class="p">)</span>
     418        <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;... done!&quot;</span><span class="p">)</span>
     419    <span class="k">else</span><span class="p">:</span>
     420        <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;... nothing to clean!&quot;</span><span class="p">)</span>
    391421
    392422    <span class="k">return</span></div>
     
    399429<span class="sd">    Parameters</span>
    400430<span class="sd">    ----------</span>
    401 <span class="sd">    user : :obj:`list` of :obj:`string`</span>
     431<span class="sd">    user : list of str</span>
    402432<span class="sd">        Contains all email addresses which should be notified.</span>
    403433<span class="sd">        It might also contain just the ecmwf user name which wil trigger</span>
    404434<span class="sd">        mailing to the associated email address for this user.</span>
    405435
    406 <span class="sd">    message : :obj:`string`, optional</span>
     436<span class="sd">    message : str, optional</span>
    407437<span class="sd">        Error message. Default value is &quot;ERROR&quot;.</span>
    408438
     
    412442<span class="sd">    &#39;&#39;&#39;</span>
    413443
    414     <span class="nb">print</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
    415 
    416     <span class="c1"># comment if user does not want email notification directly from python</span>
     444    <span class="n">trace</span> <span class="o">=</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_stack</span><span class="p">())</span>
     445    <span class="n">full_message</span> <span class="o">=</span> <span class="n">message</span> <span class="o">+</span> <span class="s1">&#39;</span><span class="se">\n\n</span><span class="s1">&#39;</span> <span class="o">+</span> <span class="n">trace</span>
     446
     447    <span class="nb">print</span><span class="p">(</span><span class="n">full_message</span><span class="p">)</span>
     448
     449    <span class="n">send_mail</span><span class="p">(</span><span class="n">users</span><span class="p">,</span> <span class="s1">&#39;ERROR&#39;</span><span class="p">,</span> <span class="n">full_message</span><span class="p">)</span>
     450
     451    <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>
     452
     453    <span class="k">return</span></div>
     454
     455
     456<div class="viewcode-block" id="send_mail"><a class="viewcode-back" href="../api.html#tools.send_mail">[docs]</a><span class="k">def</span> <span class="nf">send_mail</span><span class="p">(</span><span class="n">users</span><span class="p">,</span> <span class="n">success_mode</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
     457    <span class="sd">&#39;&#39;&#39;Prints a specific exit message which can be passed to the function.</span>
     458
     459<span class="sd">    Parameters</span>
     460<span class="sd">    ----------</span>
     461<span class="sd">    users : list of str</span>
     462<span class="sd">        Contains all email addresses which should be notified.</span>
     463<span class="sd">        It might also contain just the ecmwf user name which wil trigger</span>
     464<span class="sd">        mailing to the associated email address for this user.</span>
     465
     466<span class="sd">    success_mode : str</span>
     467<span class="sd">        States the exit mode of the program to put into</span>
     468<span class="sd">        the mail subject line.</span>
     469
     470<span class="sd">    message : str, optional</span>
     471<span class="sd">        Message for exiting program. Default value is &quot;Done!&quot;.</span>
     472
     473<span class="sd">    Return</span>
     474<span class="sd">    ------</span>
     475
     476<span class="sd">    &#39;&#39;&#39;</span>
     477
    417478    <span class="k">for</span> <span class="n">user</span> <span class="ow">in</span> <span class="n">users</span><span class="p">:</span>
    418479        <span class="k">if</span> <span class="s1">&#39;$</span><span class="si">{USER}</span><span class="s1">&#39;</span> <span class="ow">in</span> <span class="n">user</span><span class="p">:</span>
    419480            <span class="n">user</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s1">&#39;USER&#39;</span><span class="p">)</span>
    420481        <span class="k">try</span><span class="p">:</span>
    421             <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;mail&#39;</span><span class="p">,</span> <span class="s1">&#39;-s flex_extract_v7.1 ERROR&#39;</span><span class="p">,</span>
    422                                   <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">user</span><span class="p">)],</span>
     482            <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;mail&#39;</span><span class="p">,</span> <span class="s1">&#39;-s flex_extract_v7.1 &#39;</span> <span class="o">+</span>
     483                                  <span class="n">success_mode</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">user</span><span class="p">)],</span>
    423484                                 <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>
    424485                                 <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>
    425486                                 <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>
    426487                                 <span class="n">bufsize</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
    427             <span class="n">trace</span> <span class="o">=</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_stack</span><span class="p">())</span>
    428             <span class="n">pout</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">communicate</span><span class="p">(</span><span class="nb">input</span><span class="o">=</span><span class="n">message</span> <span class="o">+</span> <span class="s1">&#39;</span><span class="se">\n\n</span><span class="s1">&#39;</span> <span class="o">+</span> <span class="n">trace</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
     488            <span class="n">pout</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">communicate</span><span class="p">(</span><span class="nb">input</span><span class="o">=</span><span class="n">message</span> <span class="o">+</span> <span class="s1">&#39;</span><span class="se">\n\n</span><span class="s1">&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
    429489        <span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
    430             <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;ERROR: &#39;</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span>
    431             <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">&#39;Email could not be sent!&#39;</span><span class="p">)</span>
     490            <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>
     491            <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">&#39;... Email could not be sent!&#39;</span><span class="p">)</span>
     492        <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
     493            <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>
     494            <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>
     495            <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">&#39;... Email could not be sent!&#39;</span><span class="p">)</span>
    432496        <span class="k">else</span><span class="p">:</span>
    433             <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Email sent to &#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">expandvars</span><span class="p">(</span><span class="n">user</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39; &#39;</span> <span class="o">+</span>
    434                   <span class="n">pout</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span>
    435 
    436     <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>
     497            <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Email sent to &#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">expandvars</span><span class="p">(</span><span class="n">user</span><span class="p">))</span>
    437498
    438499    <span class="k">return</span></div>
    439500
    440501
    441 <div class="viewcode-block" id="normal_exit"><a class="viewcode-back" href="../api.html#tools.normal_exit">[docs]</a><span class="k">def</span> <span class="nf">normal_exit</span><span class="p">(</span><span class="n">users</span><span class="p">,</span> <span class="n">message</span><span class="o">=</span><span class="s1">&#39;Done!&#39;</span><span class="p">):</span>
     502<div class="viewcode-block" id="normal_exit"><a class="viewcode-back" href="../api.html#tools.normal_exit">[docs]</a><span class="k">def</span> <span class="nf">normal_exit</span><span class="p">(</span><span class="n">message</span><span class="o">=</span><span class="s1">&#39;Done!&#39;</span><span class="p">):</span>
    442503    <span class="sd">&#39;&#39;&#39;Prints a specific exit message which can be passed to the function.</span>
    443504
    444505<span class="sd">    Parameters</span>
    445506<span class="sd">    ----------</span>
    446 <span class="sd">    user : :obj:`list` of :obj:`string`</span>
    447 <span class="sd">        Contains all email addresses which should be notified.</span>
    448 <span class="sd">        It might also contain just the ecmwf user name which wil trigger</span>
    449 <span class="sd">        mailing to the associated email address for this user.</span>
    450 
    451 <span class="sd">    message : :obj:`string`, optional</span>
     507<span class="sd">    message : str, optional</span>
    452508<span class="sd">        Message for exiting program. Default value is &quot;Done!&quot;.</span>
    453509
     
    456512
    457513<span class="sd">    &#39;&#39;&#39;</span>
    458     <span class="nb">print</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
    459 
    460     <span class="c1"># comment if user does not want notification directly from python</span>
    461     <span class="k">for</span> <span class="n">user</span> <span class="ow">in</span> <span class="n">users</span><span class="p">:</span>
    462         <span class="k">if</span> <span class="s1">&#39;$</span><span class="si">{USER}</span><span class="s1">&#39;</span> <span class="ow">in</span> <span class="n">user</span><span class="p">:</span>
    463             <span class="n">user</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s1">&#39;USER&#39;</span><span class="p">)</span>
    464         <span class="k">try</span><span class="p">:</span>
    465             <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;mail&#39;</span><span class="p">,</span> <span class="s1">&#39;-s flex_extract_v7.1 normal exit&#39;</span><span class="p">,</span>
    466                                   <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">user</span><span class="p">)],</span>
    467                                  <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>
    468                                  <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>
    469                                  <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>
    470                                  <span class="n">bufsize</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
    471             <span class="n">pout</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">communicate</span><span class="p">(</span><span class="nb">input</span><span class="o">=</span><span class="n">message</span><span class="o">+</span><span class="s1">&#39;</span><span class="se">\n\n</span><span class="s1">&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
    472         <span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
    473             <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;ERROR: &#39;</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span>
    474             <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Email could not be sent!&#39;</span><span class="p">)</span>
    475         <span class="k">else</span><span class="p">:</span>
    476             <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Email sent to &#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">expandvars</span><span class="p">(</span><span class="n">user</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39; &#39;</span> <span class="o">+</span>
    477                   <span class="n">pout</span><span class="o">.</span><span class="n">decode</span><span class="p">())</span>
     514
     515    <span class="nb">print</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">message</span><span class="p">))</span>
    478516
    479517    <span class="k">return</span></div>
     
    481519
    482520<div class="viewcode-block" id="product"><a class="viewcode-back" href="../api.html#tools.product">[docs]</a><span class="k">def</span> <span class="nf">product</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwds</span><span class="p">):</span>
    483     <span class="sd">&#39;&#39;&#39;This method combines the single characters of the passed arguments</span>
     521    <span class="sd">&#39;&#39;&#39;Creates combinations of all passed arguments.</span>
     522
     523<span class="sd">    This method combines the single characters of the passed arguments</span>
    484524<span class="sd">    with each other. So that each character of each argument value</span>
    485525<span class="sd">    will be combined with each character of the other arguments as a tuple.</span>
     
    498538<span class="sd">    Parameters</span>
    499539<span class="sd">    ----------</span>
    500 <span class="sd">    \*args : :obj:`tuple`</span>
     540<span class="sd">    \*args : list or str</span>
    501541<span class="sd">        Positional arguments (arbitrary number).</span>
    502542
    503 <span class="sd">    \*\*kwds : :obj:`dictionary`</span>
     543<span class="sd">    \*\*kwds : dict</span>
    504544<span class="sd">        Contains all the keyword arguments from \*args.</span>
    505545
     
    510550<span class="sd">        See example in description above.</span>
    511551<span class="sd">    &#39;&#39;&#39;</span>
    512     <span class="n">pools</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="nb">tuple</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span> <span class="o">*</span> <span class="n">kwds</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;repeat&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
    513     <span class="n">result</span> <span class="o">=</span> <span class="p">[[]]</span>
    514     <span class="k">for</span> <span class="n">pool</span> <span class="ow">in</span> <span class="n">pools</span><span class="p">:</span>
    515         <span class="n">result</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="o">+</span> <span class="p">[</span><span class="n">y</span><span class="p">]</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">result</span> <span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">pool</span><span class="p">]</span>
    516     <span class="k">for</span> <span class="n">prod</span> <span class="ow">in</span> <span class="n">result</span><span class="p">:</span>
    517         <span class="k">yield</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">prod</span><span class="p">)</span>
     552    <span class="k">try</span><span class="p">:</span>
     553        <span class="n">pools</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="nb">tuple</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span> <span class="o">*</span> <span class="n">kwds</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;repeat&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
     554        <span class="n">result</span> <span class="o">=</span> <span class="p">[[]]</span>
     555        <span class="k">for</span> <span class="n">pool</span> <span class="ow">in</span> <span class="n">pools</span><span class="p">:</span>
     556            <span class="n">result</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="o">+</span> <span class="p">[</span><span class="n">y</span><span class="p">]</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">result</span> <span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">pool</span><span class="p">]</span>
     557        <span class="k">for</span> <span class="n">prod</span> <span class="ow">in</span> <span class="n">result</span><span class="p">:</span>
     558            <span class="k">yield</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">prod</span><span class="p">)</span>
     559    <span class="k">except</span> <span class="ne">TypeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
     560        <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">&#39;... PRODUCT GENERATION FAILED!&#39;</span><span class="p">)</span>
    518561
    519562    <span class="k">return</span></div>
     
    526569<span class="sd">    Parameters</span>
    527570<span class="sd">    ----------</span>
    528 <span class="sd">    filename : :obj:`string`</span>
     571<span class="sd">    filename : str</span>
    529572<span class="sd">        The name of the file to be removed without notification.</span>
    530573
     
    536579        <span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span>
    537580    <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
    538         <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">errno</span> <span class="o">!=</span> <span class="n">errno</span><span class="o">.</span><span class="n">ENOENT</span><span class="p">:</span>
    539             <span class="c1"># errno.ENOENT  =  no such file or directory</span>
     581        <span class="c1"># errno.ENOENT  =  no such file or directory</span>
     582        <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">errno</span> <span class="o">==</span> <span class="n">errno</span><span class="o">.</span><span class="n">ENOENT</span><span class="p">:</span>
     583            <span class="k">pass</span>
     584        <span class="k">else</span><span class="p">:</span>
    540585            <span class="k">raise</span>  <span class="c1"># re-raise exception if a different error occured</span>
    541586
     
    548593<span class="sd">    Parameters</span>
    549594<span class="sd">    ----------</span>
    550 <span class="sd">    filepath : :obj:`string`</span>
     595<span class="sd">    filepath : str</span>
    551596<span class="sd">        Path to file of ECMWF grib table number 128.</span>
    552597
    553598<span class="sd">    Return</span>
    554599<span class="sd">    ------</span>
    555 <span class="sd">    table128 : :obj:`dictionary`</span>
     600<span class="sd">    table128 : dict</span>
    556601<span class="sd">        Contains the ECMWF grib table 128 information.</span>
    557602<span class="sd">        The key is the parameter number and the value is the</span>
     
    559604<span class="sd">    &#39;&#39;&#39;</span>
    560605    <span class="n">table128</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
    561     <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filepath</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
    562         <span class="n">fdata</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
    563     <span class="k">for</span> <span class="n">data</span> <span class="ow">in</span> <span class="n">fdata</span><span class="p">:</span>
    564         <span class="k">if</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s1">&#39;!&#39;</span><span class="p">:</span>
    565             <span class="n">table128</span><span class="p">[</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">3</span><span class="p">]]</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">59</span><span class="p">:</span><span class="mi">64</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
     606    <span class="k">try</span><span class="p">:</span>
     607        <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filepath</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
     608            <span class="n">fdata</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
     609    <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
     610        <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>
     611        <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>
     612
     613        <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 parameter &#39;</span>
     614                 <span class="s1">&#39;table file: &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">filepath</span><span class="p">))</span>
     615    <span class="k">else</span><span class="p">:</span>
     616        <span class="k">for</span> <span class="n">data</span> <span class="ow">in</span> <span class="n">fdata</span><span class="p">:</span>
     617            <span class="k">if</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s1">&#39;!&#39;</span><span class="p">:</span>
     618                <span class="n">table128</span><span class="p">[</span><span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">3</span><span class="p">]]</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">59</span><span class="p">:</span><span class="mi">64</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
    566619
    567620    <span class="k">return</span> <span class="n">table128</span></div>
     
    573626<span class="sd">    Parameters</span>
    574627<span class="sd">    ----------</span>
    575 <span class="sd">    pars : :obj:`string`</span>
     628<span class="sd">    pars : str</span>
    576629<span class="sd">        Addpar argument from CONTROL file in the format of</span>
    577630<span class="sd">        parameter names instead of ids. The parameter short</span>
     
    579632<span class="sd">        one single string.</span>
    580633
    581 <span class="sd">    table : :obj:`dictionary`</span>
     634<span class="sd">    table : dict</span>
    582635<span class="sd">        Contains the ECMWF grib table 128 information.</span>
    583636<span class="sd">        The key is the parameter number and the value is the</span>
     
    586639<span class="sd">    Return</span>
    587640<span class="sd">    ------</span>
    588 <span class="sd">    ipar : :obj:`list` of :obj:`integer`</span>
     641<span class="sd">    ipar : list of int</span>
    589642<span class="sd">        List of addpar parameters from CONTROL file transformed to</span>
    590643<span class="sd">        parameter ids in the format of integer.</span>
    591644<span class="sd">    &#39;&#39;&#39;</span>
     645    <span class="k">if</span> <span class="ow">not</span> <span class="n">pars</span><span class="p">:</span>
     646        <span class="k">return</span> <span class="p">[]</span>
     647    <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">pars</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
     648        <span class="n">pars</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">pars</span><span class="p">)</span>
     649
    592650    <span class="n">cpar</span> <span class="o">=</span> <span class="n">pars</span><span class="o">.</span><span class="n">upper</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>
    593651    <span class="n">ipar</span> <span class="o">=</span> <span class="p">[]</span>
     
    607665<span class="sd">    Parameters</span>
    608666<span class="sd">    ----------</span>
    609 <span class="sd">    list_obj : :obj:`list`</span>
     667<span class="sd">    list_obj : list of *</span>
    610668<span class="sd">        A list with arbitrary content.</span>
    611669
    612 <span class="sd">    concatenate_sign : :obj:`string`, optional</span>
     670<span class="sd">    concatenate_sign : str, optional</span>
    613671<span class="sd">        A string which is used to concatenate the single</span>
    614672<span class="sd">        list elements. Default value is &quot;, &quot;.</span>
     
    616674<span class="sd">    Return</span>
    617675<span class="sd">    ------</span>
    618 <span class="sd">    str_of_list : :obj:`string`</span>
     676<span class="sd">    str_of_list : str</span>
    619677<span class="sd">        The content of the list as a single string.</span>
    620678<span class="sd">    &#39;&#39;&#39;</span>
    621679
     680    <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">list_obj</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
     681        <span class="n">list_obj</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">list_obj</span><span class="p">)</span>
    622682    <span class="n">str_of_list</span> <span class="o">=</span> <span class="n">concatenate_sign</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">l</span><span class="p">)</span> <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">list_obj</span><span class="p">)</span>
    623683
     
    625685
    626686<div class="viewcode-block" id="make_dir"><a class="viewcode-back" href="../api.html#tools.make_dir">[docs]</a><span class="k">def</span> <span class="nf">make_dir</span><span class="p">(</span><span class="n">directory</span><span class="p">):</span>
    627     <span class="sd">&#39;&#39;&#39;Creates a directory and gives a warning if the directory</span>
    628 <span class="sd">    already exists. The program stops only if there is another problem.</span>
    629 
    630 <span class="sd">    Parameters</span>
    631 <span class="sd">    ----------</span>
    632 <span class="sd">    directory : :obj:`string`</span>
    633 <span class="sd">        The directory name including the path which should be created.</span>
     687    <span class="sd">&#39;&#39;&#39;Creates a directory.</span>
     688
     689<span class="sd">    It gives a warning if the directory already exists and skips process.</span>
     690<span class="sd">    The program stops only if there is another problem.</span>
     691
     692<span class="sd">    Parameters</span>
     693<span class="sd">    ----------</span>
     694<span class="sd">    directory : str</span>
     695<span class="sd">        The path to directory which should be created.</span>
    634696
    635697<span class="sd">    Return</span>
     
    640702        <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">directory</span><span class="p">)</span>
    641703    <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
    642         <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">errno</span> <span class="o">!=</span> <span class="n">errno</span><span class="o">.</span><span class="n">EEXIST</span><span class="p">:</span>
    643             <span class="c1"># errno.EEXIST = directory already exists</span>
     704        <span class="c1"># errno.EEXIST = directory already exists</span>
     705        <span class="k">if</span> <span class="n">e</span><span class="o">.</span><span class="n">errno</span> <span class="o">==</span> <span class="n">errno</span><span class="o">.</span><span class="n">EEXIST</span><span class="p">:</span>
     706            <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;WARNING: Directory </span><span class="si">{0}</span><span class="s1"> already exists!&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">directory</span><span class="p">))</span>
     707        <span class="k">else</span><span class="p">:</span>
    644708            <span class="k">raise</span> <span class="c1"># re-raise exception if a different error occured</span>
    645         <span class="k">else</span><span class="p">:</span>
    646             <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;WARNING: Directory </span><span class="si">{0}</span><span class="s1"> already exists!&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">directory</span><span class="p">))</span>
    647709
    648710    <span class="k">return</span></div>
     
    659721<span class="sd">    Parameters</span>
    660722<span class="sd">    ----------</span>
    661 <span class="sd">    ecd : :obj:`string`</span>
     723<span class="sd">    ecd : str</span>
    662724<span class="sd">        The path were the file is stored.</span>
    663725
    664 <span class="sd">    filename : :obj:`string`</span>
     726<span class="sd">    filename : str</span>
    665727<span class="sd">        The name of the file to send to the ECMWF server.</span>
    666728
    667 <span class="sd">    target : :obj:`string`</span>
     729<span class="sd">    target : str</span>
    668730<span class="sd">        The target queue where the file should be sent to.</span>
    669731
    670 <span class="sd">    ecuid : :obj:`string`</span>
     732<span class="sd">    ecuid : str</span>
    671733<span class="sd">        The user id on ECMWF server.</span>
    672734
    673 <span class="sd">    ecgid : :obj:`string`</span>
     735<span class="sd">    ecgid : str</span>
    674736<span class="sd">        The group id on ECMWF server.</span>
    675737
    676738<span class="sd">    Return</span>
    677739<span class="sd">    ------</span>
    678 <span class="sd">    rcode : :obj:`string`</span>
    679 <span class="sd">        Resulting code of command execution. If successful the string</span>
    680 <span class="sd">        will be empty.</span>
     740
    681741<span class="sd">    &#39;&#39;&#39;</span>
    682742
    683743    <span class="k">try</span><span class="p">:</span>
    684         <span class="n">rcode</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_output</span><span class="p">([</span><span class="s1">&#39;ecaccess-file-put&#39;</span><span class="p">,</span>
    685                                           <span class="n">ecd</span> <span class="o">+</span> <span class="s1">&#39;/&#39;</span> <span class="o">+</span> <span class="n">filename</span><span class="p">,</span>
    686                                           <span class="n">target</span> <span class="o">+</span> <span class="s1">&#39;:/home/ms/&#39;</span> <span class="o">+</span>
    687                                           <span class="n">ecgid</span> <span class="o">+</span> <span class="s1">&#39;/&#39;</span> <span class="o">+</span> <span class="n">ecuid</span> <span class="o">+</span>
    688                                           <span class="s1">&#39;/&#39;</span> <span class="o">+</span> <span class="n">filename</span><span class="p">],</span>
    689                                          <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">)</span>
     744        <span class="n">subprocess</span><span class="o">.</span><span class="n">check_output</span><span class="p">([</span><span class="s1">&#39;ecaccess-file-put&#39;</span><span class="p">,</span>
     745                                 <span class="n">ecd</span> <span class="o">+</span> <span class="s1">&#39;/&#39;</span> <span class="o">+</span> <span class="n">filename</span><span class="p">,</span>
     746                                 <span class="n">target</span> <span class="o">+</span> <span class="s1">&#39;:/home/ms/&#39;</span> <span class="o">+</span>
     747                                 <span class="n">ecgid</span> <span class="o">+</span> <span class="s1">&#39;/&#39;</span> <span class="o">+</span> <span class="n">ecuid</span> <span class="o">+</span>
     748                                 <span class="s1">&#39;/&#39;</span> <span class="o">+</span> <span class="n">filename</span><span class="p">],</span>
     749                                <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">)</span>
    690750    <span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
    691         <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... ERROR CODE:</span><span class="se">\n</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">returncode</span><span class="p">))</span>
    692         <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... ERROR MESSAGE:</span><span class="se">\n</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="p">))</span>
     751        <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">returncode</span><span class="p">))</span>
     752        <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="p">))</span>
    693753
    694754        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">... Do you have a valid ecaccess certification key?&#39;</span><span class="p">)</span>
    695755        <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">&#39;... ECACCESS-FILE-PUT FAILED!&#39;</span><span class="p">)</span>
    696 
    697     <span class="k">return</span> <span class="n">rcode</span></div>
     756    <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
     757        <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>
     758        <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>
     759
     760        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">... Most likely the ECACCESS library is not available!&#39;</span><span class="p">)</span>
     761        <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">&#39;... ECACCESS-FILE-PUT FAILED!&#39;</span><span class="p">)</span>
     762
     763    <span class="k">return</span></div>
    698764
    699765<div class="viewcode-block" id="submit_job_to_ecserver"><a class="viewcode-back" href="../api.html#tools.submit_job_to_ecserver">[docs]</a><span class="k">def</span> <span class="nf">submit_job_to_ecserver</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">jobname</span><span class="p">):</span>
     
    708774<span class="sd">    Parameters</span>
    709775<span class="sd">    ----------</span>
    710 <span class="sd">    target : :obj:`string`</span>
     776<span class="sd">    target : str</span>
    711777<span class="sd">        The target where the file should be sent to, e.g. the queue.</span>
    712778
    713 <span class="sd">    jobname : :obj:`string`</span>
     779<span class="sd">    jobname : str</span>
    714780<span class="sd">        The name of the jobfile to be submitted to the ECMWF server.</span>
    715781
    716782<span class="sd">    Return</span>
    717783<span class="sd">    ------</span>
    718 <span class="sd">    rcode : :obj:`string`</span>
    719 <span class="sd">        Resulting code of command execution. If successful the string</span>
    720 <span class="sd">        will contain an integer number, representing the id of the job</span>
    721 <span class="sd">        at the ecmwf server.</span>
     784<span class="sd">    job_id : int</span>
     785<span class="sd">        The id number of the job as a reference at the ecmwf server.</span>
    722786<span class="sd">    &#39;&#39;&#39;</span>
    723787
    724788    <span class="k">try</span><span class="p">:</span>
    725         <span class="n">rcode</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_output</span><span class="p">([</span><span class="s1">&#39;ecaccess-job-submit&#39;</span><span class="p">,</span>
    726                                          <span class="s1">&#39;-queueName&#39;</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span>
    727                                          <span class="n">jobname</span><span class="p">])</span>
     789        <span class="n">job_id</span> <span class="o">=</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">check_output</span><span class="p">([</span><span class="s1">&#39;ecaccess-job-submit&#39;</span><span class="p">,</span> <span class="s1">&#39;-queueName&#39;</span><span class="p">,</span>
     790                                          <span class="n">target</span><span class="p">,</span> <span class="n">jobname</span><span class="p">])</span>
     791
    728792    <span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
    729         <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... ERROR CODE:</span><span class="se">\n</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">returncode</span><span class="p">))</span>
    730         <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;... ERROR MESSAGE:</span><span class="se">\n</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="p">))</span>
    731 
     793        <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">returncode</span><span class="p">))</span>
     794        <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="p">))</span>
    732795
    733796        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">... Do you have a valid ecaccess certification key?&#39;</span><span class="p">)</span>
    734797        <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">&#39;... ECACCESS-JOB-SUBMIT FAILED!&#39;</span><span class="p">)</span>
    735 
    736     <span class="k">return</span> <span class="n">rcode</span></div>
     798    <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
     799        <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>
     800        <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>
     801
     802        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">... Most likely the ECACCESS library is not available!&#39;</span><span class="p">)</span>
     803        <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">&#39;... ECACCESS-JOB-SUBMIT FAILED!&#39;</span><span class="p">)</span>
     804
     805    <span class="k">return</span> <span class="n">job_id</span></div>
     806
     807
     808<div class="viewcode-block" id="get_informations"><a class="viewcode-back" href="../api.html#tools.get_informations">[docs]</a><span class="k">def</span> <span class="nf">get_informations</span><span class="p">(</span><span class="n">filename</span><span class="p">):</span>
     809    <span class="sd">&#39;&#39;&#39;Gets basic information from an example grib file.</span>
     810
     811<span class="sd">    These information are important for later use and the</span>
     812<span class="sd">    initialization of numpy arrays for data storing.</span>
     813
     814<span class="sd">    Parameters</span>
     815<span class="sd">    ----------</span>
     816<span class="sd">    filename : str</span>
     817<span class="sd">            Name of the file which will be opened to extract basic information.</span>
     818
     819<span class="sd">    Return</span>
     820<span class="sd">    ------</span>
     821<span class="sd">    data : dict</span>
     822<span class="sd">        Contains basic informations of the ECMWF grib files, e.g.</span>
     823<span class="sd">        &#39;Ni&#39;, &#39;Nj&#39;, &#39;latitudeOfFirstGridPointInDegrees&#39;,</span>
     824<span class="sd">        &#39;longitudeOfFirstGridPointInDegrees&#39;, &#39;latitudeOfLastGridPointInDegrees&#39;,</span>
     825<span class="sd">        &#39;longitudeOfLastGridPointInDegrees&#39;, &#39;jDirectionIncrementInDegrees&#39;,</span>
     826<span class="sd">        &#39;iDirectionIncrementInDegrees&#39;, &#39;missingValue&#39;</span>
     827<span class="sd">    &#39;&#39;&#39;</span>
     828    <span class="kn">from</span> <span class="nn">eccodes</span> <span class="k">import</span> <span class="n">codes_grib_new_from_file</span><span class="p">,</span> <span class="n">codes_get</span><span class="p">,</span> <span class="n">codes_release</span>
     829
     830    <span class="n">data</span> <span class="o">=</span> <span class="p">{}</span>
     831
     832    <span class="c1"># --- open file ---</span>
     833    <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Opening file for getting information data --- </span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">filename</span><span class="p">)</span>
     834    <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
     835        <span class="c1"># load first message from file</span>
     836        <span class="n">gid</span> <span class="o">=</span> <span class="n">codes_grib_new_from_file</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
     837
     838        <span class="c1"># information needed from grib message</span>
     839        <span class="n">keys</span> <span class="o">=</span> <span class="p">[</span>
     840                <span class="s1">&#39;Ni&#39;</span><span class="p">,</span>
     841                <span class="s1">&#39;Nj&#39;</span><span class="p">,</span>
     842                <span class="s1">&#39;latitudeOfFirstGridPointInDegrees&#39;</span><span class="p">,</span>
     843                <span class="s1">&#39;longitudeOfFirstGridPointInDegrees&#39;</span><span class="p">,</span>
     844                <span class="s1">&#39;latitudeOfLastGridPointInDegrees&#39;</span><span class="p">,</span>
     845                <span class="s1">&#39;longitudeOfLastGridPointInDegrees&#39;</span><span class="p">,</span>
     846                <span class="s1">&#39;jDirectionIncrementInDegrees&#39;</span><span class="p">,</span>
     847                <span class="s1">&#39;iDirectionIncrementInDegrees&#39;</span><span class="p">,</span>
     848                <span class="s1">&#39;missingValue&#39;</span><span class="p">,</span>
     849               <span class="p">]</span>
     850
     851        <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">Informations are: &#39;</span><span class="p">)</span>
     852        <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">keys</span><span class="p">:</span>
     853            <span class="c1"># Get the value of the key in a grib message.</span>
     854            <span class="n">data</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">codes_get</span><span class="p">(</span><span class="n">gid</span><span class="p">,</span><span class="n">key</span><span class="p">)</span>
     855            <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">%s</span><span class="s2"> = </span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">key</span><span class="p">,</span><span class="n">data</span><span class="p">[</span><span class="n">key</span><span class="p">]))</span>
     856
     857        <span class="c1"># Free the memory for the message referred as gribid.</span>
     858        <span class="n">codes_release</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span>
     859
     860    <span class="k">return</span> <span class="n">data</span></div>
     861
     862
     863<div class="viewcode-block" id="get_dimensions"><a class="viewcode-back" href="../api.html#tools.get_dimensions">[docs]</a><span class="k">def</span> <span class="nf">get_dimensions</span><span class="p">(</span><span class="n">info</span><span class="p">,</span> <span class="n">purefc</span><span class="p">,</span> <span class="n">dtime</span><span class="p">,</span> <span class="n">index_vals</span><span class="p">,</span> <span class="n">start_date</span><span class="p">,</span> <span class="n">end_date</span><span class="p">):</span>
     864    <span class="sd">&#39;&#39;&#39;This function specifies the correct dimensions for x, y and t.</span>
     865
     866<span class="sd">    Parameters</span>
     867<span class="sd">    ----------</span>
     868<span class="sd">    info : dict</span>
     869<span class="sd">        Contains basic informations of the ECMWF grib files, e.g.</span>
     870<span class="sd">        &#39;Ni&#39;, &#39;Nj&#39;, &#39;latitudeOfFirstGridPointInDegrees&#39;,</span>
     871<span class="sd">        &#39;longitudeOfFirstGridPointInDegrees&#39;, &#39;latitudeOfLastGridPointInDegrees&#39;,</span>
     872<span class="sd">        &#39;longitudeOfLastGridPointInDegrees&#39;, &#39;jDirectionIncrementInDegrees&#39;,</span>
     873<span class="sd">        &#39;iDirectionIncrementInDegrees&#39;, &#39;missingValue&#39;</span>
     874
     875<span class="sd">    purefc : int</span>
     876<span class="sd">        Switch for definition of pure forecast mode or not.</span>
     877
     878<span class="sd">    dtime : str</span>
     879<span class="sd">        Time step in hours.</span>
     880
     881<span class="sd">    index_vals : list of list of str</span>
     882<span class="sd">        Contains the values from the keys used for a distinct selection</span>
     883<span class="sd">        of grib messages in processing  the grib files.</span>
     884<span class="sd">        Content looks like e.g.:</span>
     885<span class="sd">        index_vals[0]: (&#39;20171106&#39;, &#39;20171107&#39;, &#39;20171108&#39;) ; date</span>
     886<span class="sd">        index_vals[1]: (&#39;0&#39;, &#39;1200&#39;, &#39;1800&#39;, &#39;600&#39;) ; time</span>
     887<span class="sd">        index_vals[2]: (&#39;0&#39;, &#39;12&#39;, &#39;3&#39;, &#39;6&#39;, &#39;9&#39;) ; stepRange</span>
     888
     889<span class="sd">    start_date : str</span>
     890<span class="sd">        The start date of the retrieval job.</span>
     891
     892<span class="sd">    end_date : str</span>
     893<span class="sd">        The end date of the retrieval job.</span>
     894
     895<span class="sd">    Return</span>
     896<span class="sd">    ------</span>
     897<span class="sd">    (ix, jy, it) : tuple of int</span>
     898<span class="sd">        Dimension in x-direction, y-direction and in time.</span>
     899<span class="sd">    &#39;&#39;&#39;</span>
     900
     901    <span class="n">ix</span> <span class="o">=</span> <span class="n">info</span><span class="p">[</span><span class="s1">&#39;Ni&#39;</span><span class="p">]</span>
     902
     903    <span class="n">jy</span> <span class="o">=</span> <span class="n">info</span><span class="p">[</span><span class="s1">&#39;Nj&#39;</span><span class="p">]</span>
     904
     905    <span class="k">if</span> <span class="ow">not</span> <span class="n">purefc</span><span class="p">:</span>
     906        <span class="n">it</span> <span class="o">=</span> <span class="p">((</span><span class="n">end_date</span> <span class="o">-</span> <span class="n">start_date</span><span class="p">)</span><span class="o">.</span><span class="n">days</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="mi">24</span><span class="o">/</span><span class="nb">int</span><span class="p">(</span><span class="n">dtime</span><span class="p">)</span>
     907    <span class="k">else</span><span class="p">:</span>
     908        <span class="c1"># #no of step * #no of times * #no of days</span>
     909        <span class="n">it</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">index_vals</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">index_vals</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">index_vals</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
     910
     911    <span class="k">return</span> <span class="p">(</span><span class="n">ix</span><span class="p">,</span> <span class="n">jy</span><span class="p">,</span> <span class="n">it</span><span class="p">)</span></div>
     912
     913
     914<div class="viewcode-block" id="execute_subprocess"><a class="viewcode-back" href="../api.html#tools.execute_subprocess">[docs]</a><span class="k">def</span> <span class="nf">execute_subprocess</span><span class="p">(</span><span class="n">cmd_list</span><span class="p">,</span> <span class="n">error_msg</span><span class="o">=</span><span class="s1">&#39;SUBPROCESS FAILED!&#39;</span><span class="p">):</span>
     915    <span class="sd">&#39;&#39;&#39;Executes a command line instruction via a subprocess.</span>
     916
     917<span class="sd">    Error handling is done if an error occures.</span>
     918
     919<span class="sd">    Parameters</span>
     920<span class="sd">    ----------</span>
     921<span class="sd">    cmd_list : list of str</span>
     922<span class="sd">        A list of the components for the command line execution. Each</span>
     923<span class="sd">        list entry is a single part of the command which is seperated from</span>
     924<span class="sd">        the rest by a blank space.</span>
     925<span class="sd">        E.g. [&#39;mv&#39;, file1, file2]</span>
     926
     927<span class="sd">    Return</span>
     928<span class="sd">    ------</span>
     929<span class="sd">    error_msg : str, optional</span>
     930<span class="sd">        The possible error message if the subprocess failed.</span>
     931<span class="sd">        By default it will just tell &quot;SUBPROCESS FAILED!&quot;.</span>
     932<span class="sd">    &#39;&#39;&#39;</span>
     933
     934    <span class="k">try</span><span class="p">:</span>
     935        <span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">(</span><span class="n">cmd_list</span><span class="p">)</span>
     936    <span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
     937        <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">returncode</span><span class="p">))</span>
     938        <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="p">))</span>
     939
     940        <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">&#39;... &#39;</span> <span class="o">+</span> <span class="n">error_msg</span><span class="p">)</span>
     941    <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
     942        <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>
     943        <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>
     944
     945        <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">&#39;... &#39;</span> <span class="o">+</span> <span class="n">error_msg</span><span class="p">)</span>
     946
     947    <span class="k">return</span></div>
    737948</pre></div>
    738949
     
    747958  <div role="contentinfo">
    748959    <p>
    749         &copy; Copyright 2018, Anne Philipp and Leopold Haimberger.
     960        &copy; Copyright 2018, Anne Philipp and Leopold Haimberger
    750961
    751962    </p>
     
    766977 
    767978
    768     <script type="text/javascript">
    769         var DOCUMENTATION_OPTIONS = {
    770             URL_ROOT:'../',
    771             VERSION:'7.1 alpha',
    772             LANGUAGE:'None',
    773             COLLAPSE_INDEX:false,
    774             FILE_SUFFIX:'.html',
    775             HAS_SOURCE:  true,
    776             SOURCELINK_SUFFIX: '.txt'
    777         };
    778     </script>
    779       <script type="text/javascript" src="../_static/jquery.js"></script>
    780       <script type="text/javascript" src="../_static/underscore.js"></script>
    781       <script type="text/javascript" src="../_static/doctools.js"></script>
    782       <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
     979   
     980   
     981      <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
     982        <script type="text/javascript" src="../_static/jquery.js"></script>
     983        <script type="text/javascript" src="../_static/underscore.js"></script>
     984        <script type="text/javascript" src="../_static/doctools.js"></script>
     985   
    783986
    784987 
Note: See TracChangeset for help on using the changeset viewer.
hosted by ZAMG