vortex-nwp 2.1.0__tar.gz → 2.1.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/PKG-INFO +1 -1
  2. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/pyproject.toml +1 -1
  3. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/__init__.py +9 -7
  4. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/algo/components.py +4 -1
  5. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/algo/mpitools.py +10 -6
  6. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/config.py +11 -7
  7. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/data/abstractstores.py +8 -1
  8. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/data/handlers.py +92 -2
  9. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/data/providers.py +4 -3
  10. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/data/stores.py +19 -26
  11. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/data/stores.py +11 -7
  12. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/toolbox.py +81 -21
  13. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/tools/grib.py +2 -2
  14. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/tools/schedulers.py +36 -41
  15. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/tools/services.py +21 -7
  16. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/tools/storage.py +3 -1
  17. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex_nwp.egg-info/PKG-INFO +1 -1
  18. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex_nwp.egg-info/SOURCES.txt +1 -0
  19. vortex_nwp-2.1.2/tests/test_ecflow.py +37 -0
  20. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/LICENSE +0 -0
  21. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/README.md +0 -0
  22. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/setup.cfg +0 -0
  23. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/algo/__init__.py +0 -0
  24. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/algo/mpitools_templates/__init__.py +0 -0
  25. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/algo/mpitools_templates/envelope_wrapper_default.tpl +0 -0
  26. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/algo/mpitools_templates/envelope_wrapper_mpiauto.tpl +0 -0
  27. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/algo/mpitools_templates/wrapstd_wrapper_default.tpl +0 -0
  28. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/algo/serversynctools.py +0 -0
  29. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/data/__init__.py +0 -0
  30. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/data/containers.py +0 -0
  31. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/data/contents.py +0 -0
  32. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/data/executables.py +0 -0
  33. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/data/flow.py +0 -0
  34. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/data/geometries.ini +0 -0
  35. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/data/geometries.py +0 -0
  36. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/data/outflow.py +0 -0
  37. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/data/resources.py +0 -0
  38. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/data/sync_templates/__init__.py +0 -0
  39. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/gloves.py +0 -0
  40. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/layout/__init__.py +0 -0
  41. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/layout/contexts.py +0 -0
  42. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/layout/dataflow.py +0 -0
  43. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/layout/monitor.py +0 -0
  44. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/__init__.py +0 -0
  45. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/algo/__init__.py +0 -0
  46. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/algo/assim.py +0 -0
  47. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/algo/clim.py +0 -0
  48. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/algo/coupling.py +0 -0
  49. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/algo/eda.py +0 -0
  50. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/algo/eps.py +0 -0
  51. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/algo/forecasts.py +0 -0
  52. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/algo/fpserver.py +0 -0
  53. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/algo/ifsnaming.py +0 -0
  54. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/algo/ifsroot.py +0 -0
  55. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/algo/monitoring.py +0 -0
  56. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/algo/mpitools.py +0 -0
  57. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/algo/odbtools.py +0 -0
  58. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/algo/oopsroot.py +0 -0
  59. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/algo/oopstests.py +0 -0
  60. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/algo/request.py +0 -0
  61. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/algo/stdpost.py +0 -0
  62. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/data/__init__.py +0 -0
  63. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/data/assim.py +0 -0
  64. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/data/boundaries.py +0 -0
  65. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/data/climfiles.py +0 -0
  66. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/data/configfiles.py +0 -0
  67. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/data/consts.py +0 -0
  68. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/data/ctpini.py +0 -0
  69. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/data/diagnostics.py +0 -0
  70. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/data/eda.py +0 -0
  71. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/data/eps.py +0 -0
  72. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/data/executables.py +0 -0
  73. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/data/fields.py +0 -0
  74. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/data/gridfiles.py +0 -0
  75. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/data/logs.py +0 -0
  76. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/data/modelstates.py +0 -0
  77. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/data/monitoring.py +0 -0
  78. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/data/namelists.py +0 -0
  79. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/data/obs.py +0 -0
  80. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/data/oopsexec.py +0 -0
  81. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/data/providers.py +0 -0
  82. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/data/query.py +0 -0
  83. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/data/surfex.py +0 -0
  84. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/syntax/__init__.py +0 -0
  85. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/syntax/stdattrs.py +0 -0
  86. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/tools/__init__.py +0 -0
  87. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/tools/addons.py +0 -0
  88. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/tools/agt.py +0 -0
  89. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/tools/bdap.py +0 -0
  90. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/tools/bdcp.py +0 -0
  91. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/tools/bdm.py +0 -0
  92. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/tools/bdmp.py +0 -0
  93. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/tools/conftools.py +0 -0
  94. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/tools/drhook.py +0 -0
  95. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/tools/grib.py +0 -0
  96. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/tools/gribdiff.py +0 -0
  97. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/tools/ifstools.py +0 -0
  98. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/tools/igastuff.py +0 -0
  99. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/tools/mars.py +0 -0
  100. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/tools/odb.py +0 -0
  101. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/tools/partitioning.py +0 -0
  102. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/tools/satrad.py +0 -0
  103. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/util/__init__.py +0 -0
  104. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/util/async.py +0 -0
  105. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/util/beacon.py +0 -0
  106. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/util/diffpygram.py +0 -0
  107. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/util/ens.py +0 -0
  108. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/util/hooks.py +0 -0
  109. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/util/taskdeco.py +0 -0
  110. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/util/usepygram.py +0 -0
  111. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/nwp/util/usetnt.py +0 -0
  112. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/proxy.py +0 -0
  113. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/sessions.py +0 -0
  114. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/syntax/__init__.py +0 -0
  115. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/syntax/stdattrs.py +0 -0
  116. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/syntax/stddeco.py +0 -0
  117. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/tools/__init__.py +0 -0
  118. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/tools/actions.py +0 -0
  119. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/tools/addons.py +0 -0
  120. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/tools/arm.py +0 -0
  121. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/tools/compression.py +0 -0
  122. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/tools/date.py +0 -0
  123. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/tools/ddhpack.py +0 -0
  124. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/tools/delayedactions.py +0 -0
  125. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/tools/env.py +0 -0
  126. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/tools/folder.py +0 -0
  127. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/tools/lfi.py +0 -0
  128. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/tools/listings.py +0 -0
  129. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/tools/names.py +0 -0
  130. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/tools/net.py +0 -0
  131. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/tools/odb.py +0 -0
  132. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/tools/parallelism.py +0 -0
  133. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/tools/prestaging.py +0 -0
  134. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/tools/rawfiles.py +0 -0
  135. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/tools/surfex.py +0 -0
  136. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/tools/systems.py +0 -0
  137. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/tools/targets.py +0 -0
  138. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/util/__init__.py +0 -0
  139. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/util/config.py +0 -0
  140. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/util/empty.py +0 -0
  141. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/util/helpers.py +0 -0
  142. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/util/introspection.py +0 -0
  143. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/util/iosponge.py +0 -0
  144. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/util/roles.py +0 -0
  145. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/util/storefunctions.py +0 -0
  146. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/util/structs.py +0 -0
  147. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex/util/worker.py +0 -0
  148. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex_nwp.egg-info/dependency_links.txt +0 -0
  149. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex_nwp.egg-info/requires.txt +0 -0
  150. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/src/vortex_nwp.egg-info/top_level.txt +0 -0
  151. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_algo_server.py +0 -0
  152. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_arpifs_listings_integration.py +0 -0
  153. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_cfgparser.py +0 -0
  154. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_cfgtemplating.py +0 -0
  155. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_compression.py +0 -0
  156. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_config.py +0 -0
  157. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_conftools.py +0 -0
  158. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_containers.py +0 -0
  159. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_doctests.py +0 -0
  160. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_ecmwf_interface.py +0 -0
  161. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_env.py +0 -0
  162. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_epygram.py +0 -0
  163. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_gco.py +0 -0
  164. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_ifstools.py +0 -0
  165. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_import.py +0 -0
  166. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_iosponge.py +0 -0
  167. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_job_examples.py +0 -0
  168. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_layoutappconf.py +0 -0
  169. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_layoutjobs.py +0 -0
  170. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_layoutmonitor.py +0 -0
  171. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_layoutnodes.py +0 -0
  172. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_net_netstat.py +0 -0
  173. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_net_ssh.py +0 -0
  174. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_partitioning.py +0 -0
  175. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_providers.py +0 -0
  176. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_sessions_stuff.py +0 -0
  177. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_simpleworkflow.py +0 -0
  178. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_smartftget.py +0 -0
  179. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_ssh.py +0 -0
  180. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_storage.py +0 -0
  181. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_stores.py +0 -0
  182. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_syntax.py +0 -0
  183. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_targets.py +0 -0
  184. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_templates.py +0 -0
  185. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_toolsodb.py +0 -0
  186. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_uget.py +0 -0
  187. {vortex_nwp-2.1.0 → vortex_nwp-2.1.2}/tests/test_vortexnames.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vortex-nwp
3
- Version: 2.1.0
3
+ Version: 2.1.2
4
4
  Summary: A Python library to write Numerical Weather Prediction pipelines components
5
5
  Author-email: The Vortex Team <vortex.support@meteo.fr>
6
6
  License: CECILL-C
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "vortex-nwp"
7
- version = "2.1.0"
7
+ version = "2.1.2"
8
8
  description = "A Python library to write Numerical Weather Prediction pipelines components"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.7"
@@ -21,8 +21,8 @@ strongly advised.
21
21
  """
22
22
 
23
23
  import atexit
24
+ from pathlib import Path
24
25
  import sys
25
- import os
26
26
 
27
27
  # importlib.metadata included in stdlib from 3.8 onwards.
28
28
  # For older versions, import third-party importlib_metadata
@@ -53,10 +53,10 @@ from .toolbox import algo as task
53
53
 
54
54
  from . import nwp as nwp # footprints import
55
55
 
56
- __version__ = "2.1.0"
56
+ __version__ = "2.1.2"
57
57
  __prompt__ = "Vortex v-" + __version__ + ":"
58
58
 
59
- __nextversion__ = "2.1.1"
59
+ __nextversion__ = "2.1.3"
60
60
  __tocinfoline__ = "VORTEX core package"
61
61
 
62
62
  __all__ = [
@@ -111,11 +111,13 @@ footprints.setup.callback = vortexfpdefaults
111
111
  ticket = sessions.get
112
112
  sh = sessions.system
113
113
 
114
- # If a config file can be found in current dir, load it else load .vortex.d/vortex.toml
115
- if os.path.isfile("vortex.toml"):
116
- config.load_config("vortex.toml")
114
+ # If a config file can be found in current dir, load it else load
115
+ # .vortex.d/vortex.toml
116
+ confname = Path("vortex.toml")
117
+ if confname.exists():
118
+ config.load_config(confname)
117
119
  else:
118
- config.load_config(os.environ["HOME"] + "/.vortex.d/vortex.toml")
120
+ config.load_config(Path.home() / ".vortex.d" / confname)
119
121
 
120
122
  # Load some superstars sub-packages
121
123
 
@@ -1841,7 +1841,10 @@ class Parallel(xExecutableAlgoComponent):
1841
1841
  def _mpitool_attributes(self, opts):
1842
1842
  """Return the dictionary of attributes needed to create the mpitool object."""
1843
1843
  # Read the appropriate configuration in the target file
1844
- conf_dict = config.from_config(section="mpitool")
1844
+ if not config.is_defined(section="mpitool"):
1845
+ conf_dict = {}
1846
+ else:
1847
+ conf_dict = config.from_config(section="mpitool")
1845
1848
  if self.mpiname:
1846
1849
  conf_dict["mpiname"] = self.mpiname
1847
1850
  # Make "mpirun" the default mpi command name
@@ -84,6 +84,7 @@ from vortex.tools import env
84
84
  from vortex.tools.arm import ArmForgeTool
85
85
  from vortex.tools.systems import ExecutionError
86
86
  from vortex.util import config
87
+ from vortex.config import is_defined, ConfigurationError
87
88
 
88
89
  #: No automatic export
89
90
  __all__ = []
@@ -1431,12 +1432,15 @@ class SRun(MpiTool):
1431
1432
  @property
1432
1433
  def _actual_slurmversion(self):
1433
1434
  """Return the slurm major version number."""
1434
- slurmversion = self.slurmversion or from_config(
1435
- section="mpitool", key="slurmversion"
1436
- )
1437
- if not slurmversion:
1438
- raise ValueError("No slurm version specified")
1439
- return slurmversion
1435
+ if self.slurmversion:
1436
+ return self.slurmversion
1437
+
1438
+ if not is_defined(section="mpitool", key="slurmversion"):
1439
+ raise ConfigurationError(
1440
+ "Using 'srun' MPI tool but slurm version is not configured. See "
1441
+ "https://vortex-nwp.readthedocs.io/en/latest/user-guide/configuration.html#mpitool"
1442
+ )
1443
+ return from_config(section="mpitool", key="slurmversion")
1440
1444
 
1441
1445
  def _set_binaries_hack(self, binaries):
1442
1446
  """Set the list of :class:`MpiBinaryDescription` objects associated with this instance."""
@@ -3,6 +3,7 @@ the value of configuration options, respectively.
3
3
 
4
4
  """
5
5
 
6
+ from pathlib import Path
6
7
  import tomli
7
8
 
8
9
  from bronx.fancies import loggers
@@ -24,7 +25,7 @@ class ConfigurationError(Exception):
24
25
  """Something is wrong with the provided configuration"""
25
26
 
26
27
 
27
- def load_config(configpath="vortex.toml"):
28
+ def load_config(configpath=Path("vortex.toml")):
28
29
  """Load configuration from a TOML configuration file
29
30
 
30
31
  Existing configuration values are overriden. The configuration
@@ -41,19 +42,22 @@ def load_config(configpath="vortex.toml"):
41
42
  # ...
42
43
  """
43
44
  global VORTEX_CONFIG
45
+ configpath = Path(configpath)
44
46
  try:
45
- with open(configpath, "rb") as f:
47
+ with configpath.open(mode="rb") as f:
46
48
  VORTEX_CONFIG = tomli.load(f)
47
- print(f"Successfully read configuration file {configpath}")
49
+ print(f"Successfully read configuration file {configpath.absolute()}")
48
50
  except FileNotFoundError:
49
- print(f"Could not read configuration file {configpath} (not found).")
51
+ print(
52
+ f"Could not read configuration file {configpath.absolute()} (not found)."
53
+ )
50
54
  print("Use load_config(/path/to/config) to update the configuration")
51
55
 
52
56
 
53
57
  def print_config():
54
58
  """Print configuration (key, value) pairs"""
55
59
  if VORTEX_CONFIG:
56
- for k, v in VORTEX_CONFIG:
60
+ for k, v in VORTEX_CONFIG.items():
57
61
  print(k.upper(), v)
58
62
 
59
63
 
@@ -65,10 +69,10 @@ def from_config(section, key=None):
65
69
  """
66
70
  try:
67
71
  subconfig = VORTEX_CONFIG[section]
68
- except KeyError:
72
+ except KeyError as e:
69
73
  raise ConfigurationError(
70
74
  f"Missing configuration section {section}",
71
- )
75
+ ) from e
72
76
  if not key:
73
77
  return subconfig
74
78
 
@@ -14,7 +14,7 @@ from bronx.system import hash as hashutils
14
14
  import footprints
15
15
 
16
16
  from vortex import sessions
17
- from vortex.config import from_config, ConfigurationError
17
+ from vortex.config import from_config, ConfigurationError, is_defined
18
18
  from vortex.syntax.stdattrs import (
19
19
  hashalgo,
20
20
  hashalgo_avail_list,
@@ -870,6 +870,13 @@ class ArchiveStore(Store):
870
870
  @property
871
871
  def actual_storetube(self):
872
872
  """This archive network name (potentially read form the configuration file)."""
873
+ if self._actual_storetube:
874
+ return self._actual_storetube
875
+ if not is_defined(section="storage", key="protocol"):
876
+ raise ConfigurationError(
877
+ "Using remote data tree but protocol is not configured. See "
878
+ "https://vortex-nwp.readthedocs.io/en/latest/user-guide/configuration.html#storage"
879
+ )
873
880
  if self._actual_storetube is None:
874
881
  self._actual_storetube = from_config(
875
882
  section="storage",
@@ -134,7 +134,26 @@ class Handler:
134
134
  return str(self.__dict__)
135
135
 
136
136
  def _get_resource(self):
137
- """Getter for ``resource`` property."""
137
+ """Getter for ``resource`` property.
138
+
139
+ **Example**
140
+
141
+ >>> rh = vortex.input(
142
+ ... vapp="arpege",
143
+ ... vconf="4dvarfr",
144
+ ... cutoff="production",
145
+ ... date="202506160000",
146
+ ... term=1,
147
+ ... geometry="global1798",
148
+ ... model="arpege",
149
+ ... block="forecast",
150
+ ... kind="modelstate",
151
+ ... experiment="oper",
152
+ ... local="myfile",
153
+ ... )
154
+ >>> print(rh.resource)
155
+ <vortex.nwp.data.modelstates.Historic object at 0x7b430874a620 | model='arpege' date='2025-06-16T00:00:00Z' cutoff='production' geometry='<vortex.data.geometries.GaussGeometry | tag='global1798' id='ARPEGE TL1798c2.2 stretched-rotated geometry' tl=1798 c=2.2>' term='01:00' subset='None'>
156
+ """
138
157
  return self._resource
139
158
 
140
159
  def _set_resource(self, value):
@@ -534,7 +553,29 @@ class Handler:
534
553
  return rst
535
554
 
536
555
  def locate(self, **extras):
537
- """Try to figure out what would be the physical location of the resource."""
556
+ r"""
557
+ Try to figure out what would be the physical location of the resource.
558
+
559
+ :returns: A semiclon separated string listing the various locations where the resource can be found.
560
+
561
+ >>> rh = vortex.input(
562
+ ... vapp="arpege",
563
+ ... vconf="4dvarfr",
564
+ ... cutoff="production",
565
+ ... date="202506160000",
566
+ ... term=1,
567
+ ... geometry="global1798",
568
+ ... model="arpege",
569
+ ... block="forecast",
570
+ ... kind="modelstate",
571
+ ... experiment="oper",
572
+ ... local="myfile",
573
+ ... )
574
+ >>> print("\n".join(rh.locate().split(";")))
575
+ /home/user/.vortex.d/arpege/4dvarfr/OPER/20250616T0000P/forecast/historic.arpege.tl1798-c22+0001:00.fa
576
+ user@archive:/data/archive/arpege/4dvarfr/OPER/2025/06/16/T0000P/forecast/historic.arpege.tl1798-c22+0001:00.fa
577
+
578
+ """
538
579
  rst = None
539
580
  if self.resource and self.provider:
540
581
  store = self.store
@@ -825,6 +866,32 @@ class Handler:
825
866
  * When **insitu** is False, an attempt to get the resource is systematically
826
867
  made except if **alternate** is defined and the local container already
827
868
  exists.
869
+
870
+ **Example**
871
+
872
+ .. code:: python
873
+
874
+ rhandlers = vortex.input(
875
+ kind='gridpoint',
876
+ term=1,
877
+ geometry='eurw1s40',
878
+ nativefmt='grib',
879
+ model='arome',
880
+ cutoff='production',
881
+ date=['2024060121', '2024060122'],
882
+ origin='historic',
883
+ vapp='arome',
884
+ vconf='pefrance',
885
+ member=[1,2,5],
886
+ experiment='myexp',
887
+ block='forecast',
888
+ local='gribfile_[member].grib',
889
+ format='grib',
890
+ )
891
+
892
+ for rh in rhandlers:
893
+ rh.get()
894
+
828
895
  """
829
896
  return self._get_proxy(self._actual_get, alternate=alternate, **extras)
830
897
 
@@ -1010,6 +1077,29 @@ class Handler:
1010
1077
 
1011
1078
  Conversely, the low-level stores are made aware of the previous successful
1012
1079
  put. That way, a local container is not put twice to the same destination.
1080
+
1081
+ .. code:: python
1082
+
1083
+ rhandlers = vortex.output(
1084
+ kind='gridpoint',
1085
+ term=1,
1086
+ geometry='eurw1s40',
1087
+ nativefmt='grib',
1088
+ model='arome',
1089
+ cutoff='production',
1090
+ date=['2024060121', '2024060122'],
1091
+ origin='historic',
1092
+ vapp='arome',
1093
+ vconf='pefrance',
1094
+ member=[1,2,5],
1095
+ experiment='myexp',
1096
+ block='forecast',
1097
+ local='gribfile_[member].grib',
1098
+ format='grib',
1099
+ )
1100
+
1101
+ for rh in rhandlers:
1102
+ rh.put()
1013
1103
  """
1014
1104
  rst = False
1015
1105
  if self.complete:
@@ -279,6 +279,7 @@ class Vortex(Provider):
279
279
 
280
280
  _DEFAULT_NAME_BUILDER = names.VortexNameBuilder()
281
281
  _CUSTOM_NAME_BUILDERS = dict()
282
+ _SPECIAL_EXPS = ("oper", "dble", "test", "mirr")
282
283
 
283
284
  _footprint = [
284
285
  block,
@@ -365,8 +366,8 @@ class Vortex(Provider):
365
366
  self._namebuilder = self._CUSTOM_NAME_BUILDERS[self.namebuild]
366
367
  else:
367
368
  self._namebuilder = self._DEFAULT_NAME_BUILDER
368
- if self.experiment in ("oper", "dble"):
369
- self.experiment = self.experiment.upper()
369
+ if self.experiment in (n.upper() for n in self._SPECIAL_EXPS):
370
+ self.experiment = self.experiment.lower()
370
371
 
371
372
  # Ensure compatibility with deprecated namespace attribute
372
373
  # Under the hood the namespace attribute is still used to
@@ -426,7 +427,7 @@ class Vortex(Provider):
426
427
 
427
428
  def netloc(self, resource):
428
429
  """Returns the current ``namespace``."""
429
- if self.experiment in ("OPER", "DBLE"):
430
+ if self.experiment in self._SPECIAL_EXPS:
430
431
  return "vsop." + self.namespace.domain
431
432
  return self.namespace.netloc
432
433
 
@@ -748,13 +748,12 @@ class VortexStdBaseArchiveStore(_VortexBaseArchiveStore):
748
748
  )
749
749
  except config.ConfigurationError as e:
750
750
  msg = (
751
- "Trying to write to archive but location is not configured.\n"
751
+ "Trying to write to archive but location is not configured. "
752
752
  'Make sure key "rootdir" is defined in storage section of '
753
753
  "the configuration.\n"
754
754
  "See https://vortex-nwp.readthedocs.io/en/latest/user-guide/configuration.html#storage"
755
755
  )
756
- logger.error(msg)
757
- raise e
756
+ raise config.ConfigurationError(msg) from e
758
757
  return remote
759
758
 
760
759
  remap_write = remap_read
@@ -813,12 +812,11 @@ class VortexOpBaseArchiveStore(_VortexBaseArchiveStore):
813
812
  except config.ConfigurationError as e:
814
813
  msg = (
815
814
  "Trying to write to operational data archive but location"
816
- 'is not configured.\nMake sure key "rootdir" is defined in '
815
+ ' is not configured. Make sure key "op_rootdir" is defined in '
817
816
  "the storage section of the configuration.\n"
818
817
  "See https://vortex-nwp.readthedocs.io/en/latest/user-guide/configuration.html#storage"
819
818
  )
820
- logger.error(msg)
821
- raise e
819
+ raise config.ConfigurationError(msg) from e
822
820
  xpath = remote["path"].split("/")
823
821
  if len(xpath) >= 5 and re.match(r"^\d{8}T\d{2,4}", xpath[4]):
824
822
  # If a date is detected
@@ -910,16 +908,9 @@ class VortexArchiveStore(MultiStore):
910
908
 
911
909
  def alternates_netloc(self):
912
910
  """Return netlocs describing both base and stacked archives."""
913
- netloc_m = re.match(
914
- r"(?P<base>v.*)\.archive\.(?P<country>\w+)", self.netloc
915
- )
916
911
  return [
917
- "{base:s}.archive-legacy.{country:s}".format(
918
- **netloc_m.groupdict()
919
- ),
920
- "{base:s}.stacked-archive-legacy.{country:s}".format(
921
- **netloc_m.groupdict()
922
- ),
912
+ f"{self.netloc.firstname}.archive-legacy.fr",
913
+ f"{self.netloc.firstname}.stacked-archive-legacy.fr",
923
914
  ]
924
915
 
925
916
  def alternates_fpextras(self):
@@ -1027,18 +1018,16 @@ class VortexCacheOp2ResearchStore(_VortexCacheBaseStore):
1027
1018
 
1028
1019
  def __init__(self, *args, **kw):
1029
1020
  super().__init__(*args, **kw)
1030
- try:
1031
- cachepath = config.from_config(
1032
- section="data-tree",
1033
- key="op_rootdir",
1034
- )
1035
- except config.ConfigurationError as e:
1036
- logger.error(
1037
- "Cannot use special experiment cache without providing",
1038
- "cache location",
1021
+ if not config.is_defined(section="data-tree", key="op_rootdir"):
1022
+ raise config.ConfigurationError(
1023
+ "Using special experiment but corresponding cache location "
1024
+ 'is not configured. Bet sure to set "op_rootdir" in configuration. '
1025
+ "See https://vortex-nwp.readthedocs.io/en/latest/user-guide/oper-dble-data-trees"
1039
1026
  )
1040
- raise e
1041
-
1027
+ cachepath = config.from_config(
1028
+ section="data-tree",
1029
+ key="op_rootdir",
1030
+ )
1042
1031
  self.location = os.path.join(cachepath, "vortex")
1043
1032
 
1044
1033
 
@@ -1343,6 +1332,10 @@ class PromiseCacheStore(VortexCacheMtStore):
1343
1332
  ),
1344
1333
  )
1345
1334
 
1335
+ def __init__(self, *args, **kw):
1336
+ super().__init__(*args, **kw)
1337
+ self.location = os.path.join(get_cache_location(), "promise")
1338
+
1346
1339
  @staticmethod
1347
1340
  def _add_default_options(options):
1348
1341
  options_upd = options.copy()
@@ -12,6 +12,7 @@ from bronx.fancies import loggers
12
12
  from bronx.stdtypes import date
13
13
  from vortex.data.abstractstores import Store
14
14
  from vortex.syntax.stdattrs import compressionpipeline
15
+ from vortex import config
15
16
 
16
17
  #: No automatic export
17
18
  __all__ = []
@@ -109,14 +110,17 @@ class BdpeStore(Store):
109
110
  if s_archive == "True":
110
111
  extraenv["BDPE_LECTURE_ARCHIVE_AUTORISEE"] = "oui"
111
112
 
112
- wsinterpreter = self.system.default_target.get(
113
- "bdpe:wsclient_interpreter", None
114
- )
115
- wscommand = self.system.default_target.get("bdpe:wsclient_path", None)
116
- if wscommand is None:
117
- raise RuntimeError(
118
- "bdpe:wsclient_path has to be set in the target config"
113
+ try:
114
+ wsinterpreter = config.from_config(
115
+ section="bdpe", key="wsclient_interpreter"
119
116
  )
117
+ except config.ConfigurationError:
118
+ wsinterpreter = "bash"
119
+
120
+ try:
121
+ wscommand = config.from_config(section="bdpe", key="wsclient_path")
122
+ except config.ConfigurationError:
123
+ wscommand = "/opt/softs/sopra/bin/lirepe.sh"
120
124
 
121
125
  args.insert(0, wscommand)
122
126
  if wsinterpreter is not None:
@@ -485,15 +485,39 @@ def add_section(section, args, kw):
485
485
 
486
486
  # noinspection PyShadowingBuiltins
487
487
  def input(*args, **kw): # @ReservedAssignment
488
- """Add input :class:`~vortex.layout.dataflow.Section` objects to the current sequence.
488
+ r"""Declare one or more input resources.
489
+
490
+ This function takes an abitrary of keyword arguments forming the resource
491
+ description.
492
+
493
+ :return: A list of :py:class:`Handler <vortex.data.handlers.Handler>` objects.
494
+
495
+ **Example:**
496
+
497
+ The following call to ``input`` returns a list of 6
498
+ :py:class:`Handler <vortex.data.handlers.Handler>` objects, one
499
+ for each date and member:
500
+
501
+ .. code:: python
502
+
503
+ rhandlers = vortex.input(
504
+ kind='gridpoint',
505
+ term=1,
506
+ geometry='eurw1s40',
507
+ nativefmt='grib',
508
+ model='arome',
509
+ cutoff='production',
510
+ date=['2024060121', '2024060122'],
511
+ origin='historic',
512
+ vapp='arome',
513
+ vconf='pefrance',
514
+ member=[1,2,5],
515
+ experiment='myexp',
516
+ block='forecast',
517
+ local='gribfile_[member].grib',
518
+ format='grib',
519
+ )
489
520
 
490
- Relies on the :func:`add_section` function (see its documentation), with:
491
-
492
- * It's ``section`` attribute is automatically set to 'input';
493
- * The ``kw``'s *insitu* item is set to :data:`active_insitu` by default.
494
-
495
- :return: A list of :class:`vortex.data.handlers.Handler` objects (associated
496
- with the newly created class:`~vortex.layout.dataflow.Section` objects).
497
521
  """
498
522
  kw.setdefault("insitu", active_insitu)
499
523
  kw.setdefault("batch", active_batchinputs)
@@ -532,14 +556,39 @@ def show_inputs(context=None):
532
556
 
533
557
 
534
558
  def output(*args, **kw):
535
- """Add output :class:`~vortex.layout.dataflow.Section` objects to the current sequence.
536
-
537
- Relies on the :func:`add_section` function (see its documentation), with:
538
-
539
- * It's ``section`` attribute is automatically set to 'output';
559
+ r"""Declare one or more output resources.
560
+
561
+ This function takes an abitrary of keyword arguments forming the resource
562
+ description.
563
+
564
+ :return: A list of :py:class:`Handler <vortex.data.handlers.Handler>` objects.
565
+
566
+ **Example:**
567
+
568
+ The following call to ``output`` returns a list of 6
569
+ :py:class:`Handler <vortex.data.handlers.Handler>` objects, one
570
+ for each date and member:
571
+
572
+ .. code:: python
573
+
574
+ rhandlers = vortex.output(
575
+ kind='gridpoint',
576
+ term=1,
577
+ geometry='eurw1s40',
578
+ nativefmt='grib',
579
+ model='arome',
580
+ cutoff='production',
581
+ date=['2024060121', '2024060122'],
582
+ origin='historic',
583
+ vapp='arome',
584
+ vconf='pefrance',
585
+ member=[1,2,5],
586
+ experiment='myexp',
587
+ block='forecast',
588
+ local='gribfile_[member].grib',
589
+ format='grib',
590
+ )
540
591
 
541
- :return: A list of :class:`vortex.data.handlers.Handler` objects (associated
542
- with the newly created class:`~vortex.layout.dataflow.Section` objects).
543
592
  """
544
593
  # Strip the metadatacheck option depending on active_metadatacheck
545
594
  if not active_promise:
@@ -607,15 +656,26 @@ def promise(*args, **kw):
607
656
 
608
657
 
609
658
  def executable(*args, **kw):
610
- """Add executable :class:`~vortex.layout.dataflow.Section` objects to the current sequence.
659
+ r"""Declare one or more executable resources.
611
660
 
612
- Relies on the :func:`add_section` function (see its documentation), with:
661
+ This function takes an abitrary of keyword arguments forming the
662
+ executable resource description.
613
663
 
614
- * It's ``section`` attribute is automatically set to 'executable';
615
- * The ``kw``'s *insitu* item is set to :data:`active_insitu` by default.
664
+ :return: A list of :py:class:`Handler <vortex.data.handlers.Handler>` objects.
665
+
666
+ **Example:**
667
+
668
+ The following call to ``input`` returns a list of one
669
+ :py:class:`Handler <vortex.data.handlers.Handler>` object:
670
+
671
+ .. code:: python
672
+
673
+ rhandlers = vortex.executable(
674
+ kind="mfmodel",
675
+ local="ARPEGE",
676
+ remote="/path/to/binaries/ARPEGE.EX",
677
+ )
616
678
 
617
- :return: A list of :class:`vortex.data.handlers.Handler` objects (associated
618
- with the newly created class:`~vortex.layout.dataflow.Section` objects).
619
679
  """
620
680
  kw.setdefault("insitu", active_insitu)
621
681
  return add_section("executable", args, kw)
@@ -567,7 +567,7 @@ class EcGribDecoMixin(AlgoComponentDecoMixin):
567
567
  def _eccodes_envsetup(
568
568
  self,
569
569
  eccodes_lib,
570
- envvar="ECCODES_DEFINITIONS_PATH",
570
+ envvar="ECCODES_DEFINITION_PATH",
571
571
  tgt_path="definitions",
572
572
  ):
573
573
  """Export envirionment variables required by ECCODES
@@ -612,7 +612,7 @@ class EcGribDecoMixin(AlgoComponentDecoMixin):
612
612
  if eccodes_lib is not None:
613
613
  defvar = self._eccodes_envsetup(
614
614
  eccodes_lib,
615
- envvar="ECCODES_DEFINITIONS_PATH",
615
+ envvar="ECCODES_DEFINITION_PATH",
616
616
  tgt_path="definitions",
617
617
  )
618
618
  subdir = Path("ifs_samples") / (