Changeset 2625ca8 in flex_extract.git for documentation/Sphinx/build/html/_modules/tools.html
- Timestamp:
- Jan 15, 2019, 1:03:37 AM (5 years ago)
- Branches:
- master, ctbto, dev
- Children:
- 6f951ca
- Parents:
- 0629ba8
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
documentation/Sphinx/build/html/_modules/tools.html
r274f9ef r2625ca8 167 167 <span class="c1"># my_error, normal_exit, init128, to_param_id</span> 168 168 <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> 170 170 <span class="c1"># - applied PEP8 style guide</span> 171 171 <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> 174 173 <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> 175 177 <span class="c1">#</span> 176 178 <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> 178 181 <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> 181 186 <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> 198 207 <span class="c1">#*******************************************************************************</span> 208 <span class="sd">'''This module contains a collection of diverse tasks within flex_extract.</span> 209 <span class="sd">'''</span> 199 210 200 211 <span class="c1"># ------------------------------------------------------------------------------</span> … … 207 218 <span class="kn">import</span> <span class="nn">subprocess</span> 208 219 <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> 209 222 <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> 210 223 211 224 <span class="c1"># ------------------------------------------------------------------------------</span> 212 <span class="c1"># FUNCTIONS</span>225 <span class="c1"># METHODS</span> 213 226 <span class="c1"># ------------------------------------------------------------------------------</span> 214 227 … … 219 232 <span class="sd"> Parameters</span> 220 233 <span class="sd"> ----------</span> 221 <span class="sd"> value : :obj:`string`</span>234 <span class="sd"> value : str</span> 222 235 <span class="sd"> String to be checked for the "None" word.</span> 223 236 … … 238 251 <span class="sd"> Parameters</span> 239 252 <span class="sd"> ----------</span> 240 <span class="sd"> value : :obj:`string`</span>253 <span class="sd"> value : str</span> 241 254 <span class="sd"> String to be checked for the "None" word.</span> 242 255 … … 252 265 <span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="p">)</span></div> 253 266 254 <div class="viewcode-block" id="get_cmdline_arg uments"><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> 255 268 <span class="sd">'''Decomposes the command line arguments and assigns them to variables.</span> 256 269 <span class="sd"> Apply default values for non mentioned arguments.</span> … … 261 274 <span class="sd"> Return</span> 262 275 <span class="sd"> ------</span> 263 <span class="sd"> args : :obj:`Namespace`</span>276 <span class="sd"> args : Namespace</span> 264 277 <span class="sd"> Contains the commandline arguments from script/program call.</span> 265 278 <span class="sd"> '''</span> … … 269 282 <span class="n">formatter_class</span><span class="o">=</span><span class="n">ArgumentDefaultsHelpFormatter</span><span class="p">)</span> 270 283 271 <span class="c1"># the most important arguments</span>284 <span class="c1"># control parameters that override control file values</span> 272 285 <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--start_date"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"start_date"</span><span class="p">,</span> 273 286 <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> … … 279 292 <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> 280 293 <span class="n">help</span><span class="o">=</span><span class="s2">"# of days to be retrieved at once"</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">"--job_chunk"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"job_chunk"</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">"# of days to be retrieved within a single job"</span><span class="p">)</span> 281 297 <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--controlfile"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"controlfile"</span><span class="p">,</span> 282 298 <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">'CONTROL.temp'</span><span class="p">,</span> 283 299 <span class="n">help</span><span class="o">=</span><span class="s2">"file with CONTROL parameters"</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">"--debug"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"debug"</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">"debug mode - leave temporary files intact"</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">"--request"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"request"</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">"list all mars request in file mars_requests.dat </span><span class="se">\</span>292 <span class="s2"> and skip submission to mars"</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">"--public"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"public"</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">"public mode - retrieves the public datasets"</span><span class="p">)</span>296 297 <span class="c1"># some arguments that override the default in the CONTROL file</span>298 300 <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--basetime"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"basetime"</span><span class="p">,</span> 299 301 <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> … … 309 311 <span class="n">help</span><span class="o">=</span><span class="s2">"area defined as north/west/south/east"</span><span class="p">)</span> 310 312 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">"--debug"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"debug"</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">"debug mode - leave temporary files intact"</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">"--request"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"request"</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">"list all mars requests in file mars_requests.dat"</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">"--public"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"public"</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">"public mode - retrieves the public datasets"</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">"--rrint"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"rrint"</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">"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)"</span><span class="p">)</span> 328 329 <span class="c1"># set directories</span> 312 330 <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--inputdir"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"inputdir"</span><span class="p">,</span> 313 331 <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> … … 316 334 <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> 317 335 <span class="n">help</span><span class="o">=</span><span class="s2">"root directory for storing output files"</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">"--flexpart _root_scripts"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"flexpart_root_scripts"</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">"--flexpartdir"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"flexpartdir"</span><span class="p">,</span> 319 337 <span class="nb">type</span><span class="o">=</span><span class="n">none_or_str</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> 320 338 <span class="n">help</span><span class="o">=</span><span class="s2">"FLEXPART root directory (to find grib2flexpart </span><span class="se">\</span> … … 324 342 <span class="c1"># this is only used by prepare_flexpart.py to rerun a postprocessing step</span> 325 343 <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--ppid"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"ppid"</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> 327 345 <span class="n">help</span><span class="o">=</span><span class="s2">"specify parent process id for </span><span class="se">\</span> 328 346 <span class="s2"> rerun of prepare_flexpart"</span><span class="p">)</span> … … 341 359 <span class="k">return</span> <span class="n">args</span></div> 342 360 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">file name</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> 344 362 <span class="sd">'''Reads the file into a dictionary where the key values are the parameter</span> 345 363 <span class="sd"> names.</span> … … 347 365 <span class="sd"> Parameters</span> 348 366 <span class="sd"> ----------</span> 349 <span class="sd"> file name : :obj:`string`</span>367 <span class="sd"> filepath : str</span> 350 368 <span class="sd"> Path to file where the ECMWF environment parameters are stored.</span> 351 369 352 370 <span class="sd"> Return</span> 353 371 <span class="sd"> ------</span> 354 <span class="sd"> envs : :obj:`dictionary`</span>372 <span class="sd"> envs : dict</span> 355 373 <span class="sd"> Contains the environment parameter ecuid, ecgid, gateway</span> 356 374 <span class="sd"> and destination for ECMWF server environments.</span> 357 375 <span class="sd"> '''</span> 358 376 <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">'r'</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">'r'</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">'... ERROR CODE: '</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">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</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">'</span><span class="se">\n</span><span class="s1">... Error occured while trying to read ECMWF_ENV '</span> 387 <span class="s1">'file: '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">filepath</span><span class="p">))</span> 364 388 365 389 <span class="k">return</span> <span class="n">envs</span></div> 366 390 367 391 <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">'''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">'''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 "ectrans" or "ecstorage" are set to "1".</span> 396 397 <span class="sd"> Parameters</span> 398 <span class="sd"> ----------</span> 399 <span class="sd"> c : ControlFile</span> 373 400 <span class="sd"> Contains all the parameters of CONTROL file and</span> 374 401 <span class="sd"> command line.</span> … … 379 406 <span class="sd"> '''</span> 380 407 381 <span class="nb">print</span><span class="p">(</span><span class="s2">"clean_up"</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">"/*"</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">'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="s1">'1'</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">"Done"</span><span class="p">)</span> 408 <span class="nb">print</span><span class="p">(</span><span class="s2">"... clean inputdir!"</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">"*"</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">"... done!"</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">"... nothing to clean!"</span><span class="p">)</span> 391 421 392 422 <span class="k">return</span></div> … … 399 429 <span class="sd"> Parameters</span> 400 430 <span class="sd"> ----------</span> 401 <span class="sd"> user : :obj:`list` of :obj:`string`</span>431 <span class="sd"> user : list of str</span> 402 432 <span class="sd"> Contains all email addresses which should be notified.</span> 403 433 <span class="sd"> It might also contain just the ecmwf user name which wil trigger</span> 404 434 <span class="sd"> mailing to the associated email address for this user.</span> 405 435 406 <span class="sd"> message : :obj:`string`, optional</span>436 <span class="sd"> message : str, optional</span> 407 437 <span class="sd"> Error message. Default value is "ERROR".</span> 408 438 … … 412 442 <span class="sd"> '''</span> 413 443 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">'</span><span class="se">\n</span><span class="s1">'</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">'</span><span class="se">\n\n</span><span class="s1">'</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">'ERROR'</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">'''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 "Done!".</span> 472 473 <span class="sd"> Return</span> 474 <span class="sd"> ------</span> 475 476 <span class="sd"> '''</span> 477 417 478 <span class="k">for</span> <span class="n">user</span> <span class="ow">in</span> <span class="n">users</span><span class="p">:</span> 418 479 <span class="k">if</span> <span class="s1">'$</span><span class="si">{USER}</span><span class="s1">'</span> <span class="ow">in</span> <span class="n">user</span><span class="p">:</span> 419 480 <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">'USER'</span><span class="p">)</span> 420 481 <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">'mail'</span><span class="p">,</span> <span class="s1">'-s flex_extract_v7.1 ERROR'</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">'mail'</span><span class="p">,</span> <span class="s1">'-s flex_extract_v7.1 '</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> 423 484 <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> 424 485 <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> 425 486 <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> 426 487 <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">'</span><span class="se">\n</span><span class="s1">'</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">'</span><span class="se">\n\n</span><span class="s1">'</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">'</span><span class="se">\n\n</span><span class="s1">'</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> 429 489 <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">'ERROR: '</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">'Email could not be sent!'</span><span class="p">)</span> 490 <span class="nb">print</span><span class="p">(</span><span class="s1">'... ERROR: '</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">'... Email could not be sent!'</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">'... ERROR CODE: '</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">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</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">'... Email could not be sent!'</span><span class="p">)</span> 432 496 <span class="k">else</span><span class="p">:</span> 433 <span class="nb">print</span><span class="p">(</span><span class="s1">'Email sent to '</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">' '</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">'Email sent to '</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> 437 498 438 499 <span class="k">return</span></div> 439 500 440 501 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">'Done!'</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">'Done!'</span><span class="p">):</span> 442 503 <span class="sd">'''Prints a specific exit message which can be passed to the function.</span> 443 504 444 505 <span class="sd"> Parameters</span> 445 506 <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> 452 508 <span class="sd"> Message for exiting program. Default value is "Done!".</span> 453 509 … … 456 512 457 513 <span class="sd"> '''</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">'$</span><span class="si">{USER}</span><span class="s1">'</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">'USER'</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">'mail'</span><span class="p">,</span> <span class="s1">'-s flex_extract_v7.1 normal exit'</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">'</span><span class="se">\n\n</span><span class="s1">'</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">'ERROR: '</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">'Email could not be sent!'</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">'Email sent to '</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">' '</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> 478 516 479 517 <span class="k">return</span></div> … … 481 519 482 520 <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">'''This method combines the single characters of the passed arguments</span> 521 <span class="sd">'''Creates combinations of all passed arguments.</span> 522 523 <span class="sd"> This method combines the single characters of the passed arguments</span> 484 524 <span class="sd"> with each other. So that each character of each argument value</span> 485 525 <span class="sd"> will be combined with each character of the other arguments as a tuple.</span> … … 498 538 <span class="sd"> Parameters</span> 499 539 <span class="sd"> ----------</span> 500 <span class="sd"> \*args : :obj:`tuple`</span>540 <span class="sd"> \*args : list or str</span> 501 541 <span class="sd"> Positional arguments (arbitrary number).</span> 502 542 503 <span class="sd"> \*\*kwds : :obj:`dictionary`</span>543 <span class="sd"> \*\*kwds : dict</span> 504 544 <span class="sd"> Contains all the keyword arguments from \*args.</span> 505 545 … … 510 550 <span class="sd"> See example in description above.</span> 511 551 <span class="sd"> '''</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">'repeat'</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">'repeat'</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">'... PRODUCT GENERATION FAILED!'</span><span class="p">)</span> 518 561 519 562 <span class="k">return</span></div> … … 526 569 <span class="sd"> Parameters</span> 527 570 <span class="sd"> ----------</span> 528 <span class="sd"> filename : :obj:`string`</span>571 <span class="sd"> filename : str</span> 529 572 <span class="sd"> The name of the file to be removed without notification.</span> 530 573 … … 536 579 <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> 537 580 <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> 540 585 <span class="k">raise</span> <span class="c1"># re-raise exception if a different error occured</span> 541 586 … … 548 593 <span class="sd"> Parameters</span> 549 594 <span class="sd"> ----------</span> 550 <span class="sd"> filepath : :obj:`string`</span>595 <span class="sd"> filepath : str</span> 551 596 <span class="sd"> Path to file of ECMWF grib table number 128.</span> 552 597 553 598 <span class="sd"> Return</span> 554 599 <span class="sd"> ------</span> 555 <span class="sd"> table128 : :obj:`dictionary`</span>600 <span class="sd"> table128 : dict</span> 556 601 <span class="sd"> Contains the ECMWF grib table 128 information.</span> 557 602 <span class="sd"> The key is the parameter number and the value is the</span> … … 559 604 <span class="sd"> '''</span> 560 605 <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">'</span><span class="se">\n</span><span class="s1">'</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">'!'</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">'</span><span class="se">\n</span><span class="s1">'</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">'... ERROR CODE: '</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">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</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">'</span><span class="se">\n</span><span class="s1">... Error occured while trying to read parameter '</span> 614 <span class="s1">'table file: '</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">'!'</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> 566 619 567 620 <span class="k">return</span> <span class="n">table128</span></div> … … 573 626 <span class="sd"> Parameters</span> 574 627 <span class="sd"> ----------</span> 575 <span class="sd"> pars : :obj:`string`</span>628 <span class="sd"> pars : str</span> 576 629 <span class="sd"> Addpar argument from CONTROL file in the format of</span> 577 630 <span class="sd"> parameter names instead of ids. The parameter short</span> … … 579 632 <span class="sd"> one single string.</span> 580 633 581 <span class="sd"> table : :obj:`dictionary`</span>634 <span class="sd"> table : dict</span> 582 635 <span class="sd"> Contains the ECMWF grib table 128 information.</span> 583 636 <span class="sd"> The key is the parameter number and the value is the</span> … … 586 639 <span class="sd"> Return</span> 587 640 <span class="sd"> ------</span> 588 <span class="sd"> ipar : :obj:`list` of :obj:`integer`</span>641 <span class="sd"> ipar : list of int</span> 589 642 <span class="sd"> List of addpar parameters from CONTROL file transformed to</span> 590 643 <span class="sd"> parameter ids in the format of integer.</span> 591 644 <span class="sd"> '''</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 592 650 <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">'/'</span><span class="p">)</span> 593 651 <span class="n">ipar</span> <span class="o">=</span> <span class="p">[]</span> … … 607 665 <span class="sd"> Parameters</span> 608 666 <span class="sd"> ----------</span> 609 <span class="sd"> list_obj : :obj:`list`</span>667 <span class="sd"> list_obj : list of *</span> 610 668 <span class="sd"> A list with arbitrary content.</span> 611 669 612 <span class="sd"> concatenate_sign : :obj:`string`, optional</span>670 <span class="sd"> concatenate_sign : str, optional</span> 613 671 <span class="sd"> A string which is used to concatenate the single</span> 614 672 <span class="sd"> list elements. Default value is ", ".</span> … … 616 674 <span class="sd"> Return</span> 617 675 <span class="sd"> ------</span> 618 <span class="sd"> str_of_list : :obj:`string`</span>676 <span class="sd"> str_of_list : str</span> 619 677 <span class="sd"> The content of the list as a single string.</span> 620 678 <span class="sd"> '''</span> 621 679 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> 622 682 <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> 623 683 … … 625 685 626 686 <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">'''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">'''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> 634 696 635 697 <span class="sd"> Return</span> … … 640 702 <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> 641 703 <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">'WARNING: Directory </span><span class="si">{0}</span><span class="s1"> already exists!'</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> 644 708 <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">'WARNING: Directory </span><span class="si">{0}</span><span class="s1"> already exists!'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">directory</span><span class="p">))</span>647 709 648 710 <span class="k">return</span></div> … … 659 721 <span class="sd"> Parameters</span> 660 722 <span class="sd"> ----------</span> 661 <span class="sd"> ecd : :obj:`string`</span>723 <span class="sd"> ecd : str</span> 662 724 <span class="sd"> The path were the file is stored.</span> 663 725 664 <span class="sd"> filename : :obj:`string`</span>726 <span class="sd"> filename : str</span> 665 727 <span class="sd"> The name of the file to send to the ECMWF server.</span> 666 728 667 <span class="sd"> target : :obj:`string`</span>729 <span class="sd"> target : str</span> 668 730 <span class="sd"> The target queue where the file should be sent to.</span> 669 731 670 <span class="sd"> ecuid : :obj:`string`</span>732 <span class="sd"> ecuid : str</span> 671 733 <span class="sd"> The user id on ECMWF server.</span> 672 734 673 <span class="sd"> ecgid : :obj:`string`</span>735 <span class="sd"> ecgid : str</span> 674 736 <span class="sd"> The group id on ECMWF server.</span> 675 737 676 738 <span class="sd"> Return</span> 677 739 <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 681 741 <span class="sd"> '''</span> 682 742 683 743 <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">'ecaccess-file-put'</span><span class="p">,</span>685 686 687 688 689 744 <span class="n">subprocess</span><span class="o">.</span><span class="n">check_output</span><span class="p">([</span><span class="s1">'ecaccess-file-put'</span><span class="p">,</span> 745 <span class="n">ecd</span> <span class="o">+</span> <span class="s1">'/'</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">':/home/ms/'</span> <span class="o">+</span> 747 <span class="n">ecgid</span> <span class="o">+</span> <span class="s1">'/'</span> <span class="o">+</span> <span class="n">ecuid</span> <span class="o">+</span> 748 <span class="s1">'/'</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> 690 750 <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">'... ERROR CODE: </span><span class="se">\n</span><span class="s1"> ...'</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">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> ...'</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">'... ERROR CODE: '</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">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> 693 753 694 754 <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... Do you have a valid ecaccess certification key?'</span><span class="p">)</span> 695 755 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... ECACCESS-FILE-PUT FAILED!'</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">'... ERROR CODE: '</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">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</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">'</span><span class="se">\n</span><span class="s1">... Most likely the ECACCESS library is not available!'</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">'... ECACCESS-FILE-PUT FAILED!'</span><span class="p">)</span> 762 763 <span class="k">return</span></div> 698 764 699 765 <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> … … 708 774 <span class="sd"> Parameters</span> 709 775 <span class="sd"> ----------</span> 710 <span class="sd"> target : :obj:`string`</span>776 <span class="sd"> target : str</span> 711 777 <span class="sd"> The target where the file should be sent to, e.g. the queue.</span> 712 778 713 <span class="sd"> jobname : :obj:`string`</span>779 <span class="sd"> jobname : str</span> 714 780 <span class="sd"> The name of the jobfile to be submitted to the ECMWF server.</span> 715 781 716 782 <span class="sd"> Return</span> 717 783 <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> 722 786 <span class="sd"> '''</span> 723 787 724 788 <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">'ecaccess-job-submit'</span><span class="p">,</span>726 <span class="s1">'-queueName'</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">'ecaccess-job-submit'</span><span class="p">,</span> <span class="s1">'-queueName'</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 728 792 <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">'... ERROR CODE:</span><span class="se">\n</span><span class="s1"> ... '</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">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> ... '</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">'... ERROR CODE: '</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">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> 732 795 733 796 <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">... Do you have a valid ecaccess certification key?'</span><span class="p">)</span> 734 797 <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="s1">'... ECACCESS-JOB-SUBMIT FAILED!'</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">'... ERROR CODE: '</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">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</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">'</span><span class="se">\n</span><span class="s1">... Most likely the ECACCESS library is not available!'</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">'... ECACCESS-JOB-SUBMIT FAILED!'</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">'''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"> 'Ni', 'Nj', 'latitudeOfFirstGridPointInDegrees',</span> 824 <span class="sd"> 'longitudeOfFirstGridPointInDegrees', 'latitudeOfLastGridPointInDegrees',</span> 825 <span class="sd"> 'longitudeOfLastGridPointInDegrees', 'jDirectionIncrementInDegrees',</span> 826 <span class="sd"> 'iDirectionIncrementInDegrees', 'missingValue'</span> 827 <span class="sd"> '''</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">"Opening file for getting information data --- </span><span class="si">%s</span><span class="s2">"</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">'Ni'</span><span class="p">,</span> 841 <span class="s1">'Nj'</span><span class="p">,</span> 842 <span class="s1">'latitudeOfFirstGridPointInDegrees'</span><span class="p">,</span> 843 <span class="s1">'longitudeOfFirstGridPointInDegrees'</span><span class="p">,</span> 844 <span class="s1">'latitudeOfLastGridPointInDegrees'</span><span class="p">,</span> 845 <span class="s1">'longitudeOfLastGridPointInDegrees'</span><span class="p">,</span> 846 <span class="s1">'jDirectionIncrementInDegrees'</span><span class="p">,</span> 847 <span class="s1">'iDirectionIncrementInDegrees'</span><span class="p">,</span> 848 <span class="s1">'missingValue'</span><span class="p">,</span> 849 <span class="p">]</span> 850 851 <span class="nb">print</span><span class="p">(</span><span class="s1">'</span><span class="se">\n</span><span class="s1">Informations are: '</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">"</span><span class="si">%s</span><span class="s2"> = </span><span class="si">%s</span><span class="s2">"</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">'''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"> 'Ni', 'Nj', 'latitudeOfFirstGridPointInDegrees',</span> 871 <span class="sd"> 'longitudeOfFirstGridPointInDegrees', 'latitudeOfLastGridPointInDegrees',</span> 872 <span class="sd"> 'longitudeOfLastGridPointInDegrees', 'jDirectionIncrementInDegrees',</span> 873 <span class="sd"> 'iDirectionIncrementInDegrees', 'missingValue'</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]: ('20171106', '20171107', '20171108') ; date</span> 886 <span class="sd"> index_vals[1]: ('0', '1200', '1800', '600') ; time</span> 887 <span class="sd"> index_vals[2]: ('0', '12', '3', '6', '9') ; 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"> '''</span> 900 901 <span class="n">ix</span> <span class="o">=</span> <span class="n">info</span><span class="p">[</span><span class="s1">'Ni'</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">'Nj'</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">'SUBPROCESS FAILED!'</span><span class="p">):</span> 915 <span class="sd">'''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. ['mv', 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 "SUBPROCESS FAILED!".</span> 932 <span class="sd"> '''</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">'... ERROR CODE: '</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">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</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">'... '</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">'... ERROR CODE: '</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">'... ERROR MESSAGE:</span><span class="se">\n</span><span class="s1"> </span><span class="se">\t</span><span class="s1"> '</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">'... '</span> <span class="o">+</span> <span class="n">error_msg</span><span class="p">)</span> 946 947 <span class="k">return</span></div> 737 948 </pre></div> 738 949 … … 747 958 <div role="contentinfo"> 748 959 <p> 749 © Copyright 2018, Anne Philipp and Leopold Haimberger .960 © Copyright 2018, Anne Philipp and Leopold Haimberger 750 961 751 962 </p> … … 766 977 767 978 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 783 986 784 987
Note: See TracChangeset
for help on using the changeset viewer.