vortex-nwp 2.1.0__tar.gz → 2.1.1__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 (186) hide show
  1. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/PKG-INFO +1 -1
  2. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/pyproject.toml +1 -1
  3. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/__init__.py +8 -6
  4. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/config.py +11 -7
  5. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/data/handlers.py +92 -2
  6. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/data/stores.py +4 -6
  7. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/toolbox.py +81 -21
  8. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/tools/storage.py +3 -1
  9. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex_nwp.egg-info/PKG-INFO +1 -1
  10. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/LICENSE +0 -0
  11. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/README.md +0 -0
  12. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/setup.cfg +0 -0
  13. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/algo/__init__.py +0 -0
  14. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/algo/components.py +0 -0
  15. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/algo/mpitools.py +0 -0
  16. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/algo/mpitools_templates/__init__.py +0 -0
  17. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/algo/mpitools_templates/envelope_wrapper_default.tpl +0 -0
  18. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/algo/mpitools_templates/envelope_wrapper_mpiauto.tpl +0 -0
  19. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/algo/mpitools_templates/wrapstd_wrapper_default.tpl +0 -0
  20. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/algo/serversynctools.py +0 -0
  21. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/data/__init__.py +0 -0
  22. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/data/abstractstores.py +0 -0
  23. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/data/containers.py +0 -0
  24. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/data/contents.py +0 -0
  25. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/data/executables.py +0 -0
  26. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/data/flow.py +0 -0
  27. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/data/geometries.ini +0 -0
  28. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/data/geometries.py +0 -0
  29. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/data/outflow.py +0 -0
  30. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/data/providers.py +0 -0
  31. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/data/resources.py +0 -0
  32. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/data/sync_templates/__init__.py +0 -0
  33. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/gloves.py +0 -0
  34. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/layout/__init__.py +0 -0
  35. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/layout/contexts.py +0 -0
  36. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/layout/dataflow.py +0 -0
  37. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/layout/monitor.py +0 -0
  38. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/__init__.py +0 -0
  39. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/algo/__init__.py +0 -0
  40. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/algo/assim.py +0 -0
  41. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/algo/clim.py +0 -0
  42. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/algo/coupling.py +0 -0
  43. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/algo/eda.py +0 -0
  44. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/algo/eps.py +0 -0
  45. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/algo/forecasts.py +0 -0
  46. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/algo/fpserver.py +0 -0
  47. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/algo/ifsnaming.py +0 -0
  48. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/algo/ifsroot.py +0 -0
  49. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/algo/monitoring.py +0 -0
  50. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/algo/mpitools.py +0 -0
  51. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/algo/odbtools.py +0 -0
  52. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/algo/oopsroot.py +0 -0
  53. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/algo/oopstests.py +0 -0
  54. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/algo/request.py +0 -0
  55. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/algo/stdpost.py +0 -0
  56. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/data/__init__.py +0 -0
  57. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/data/assim.py +0 -0
  58. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/data/boundaries.py +0 -0
  59. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/data/climfiles.py +0 -0
  60. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/data/configfiles.py +0 -0
  61. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/data/consts.py +0 -0
  62. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/data/ctpini.py +0 -0
  63. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/data/diagnostics.py +0 -0
  64. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/data/eda.py +0 -0
  65. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/data/eps.py +0 -0
  66. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/data/executables.py +0 -0
  67. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/data/fields.py +0 -0
  68. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/data/gridfiles.py +0 -0
  69. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/data/logs.py +0 -0
  70. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/data/modelstates.py +0 -0
  71. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/data/monitoring.py +0 -0
  72. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/data/namelists.py +0 -0
  73. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/data/obs.py +0 -0
  74. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/data/oopsexec.py +0 -0
  75. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/data/providers.py +0 -0
  76. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/data/query.py +0 -0
  77. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/data/stores.py +0 -0
  78. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/data/surfex.py +0 -0
  79. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/syntax/__init__.py +0 -0
  80. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/syntax/stdattrs.py +0 -0
  81. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/tools/__init__.py +0 -0
  82. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/tools/addons.py +0 -0
  83. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/tools/agt.py +0 -0
  84. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/tools/bdap.py +0 -0
  85. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/tools/bdcp.py +0 -0
  86. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/tools/bdm.py +0 -0
  87. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/tools/bdmp.py +0 -0
  88. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/tools/conftools.py +0 -0
  89. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/tools/drhook.py +0 -0
  90. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/tools/grib.py +0 -0
  91. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/tools/gribdiff.py +0 -0
  92. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/tools/ifstools.py +0 -0
  93. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/tools/igastuff.py +0 -0
  94. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/tools/mars.py +0 -0
  95. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/tools/odb.py +0 -0
  96. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/tools/partitioning.py +0 -0
  97. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/tools/satrad.py +0 -0
  98. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/util/__init__.py +0 -0
  99. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/util/async.py +0 -0
  100. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/util/beacon.py +0 -0
  101. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/util/diffpygram.py +0 -0
  102. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/util/ens.py +0 -0
  103. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/util/hooks.py +0 -0
  104. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/util/taskdeco.py +0 -0
  105. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/util/usepygram.py +0 -0
  106. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/nwp/util/usetnt.py +0 -0
  107. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/proxy.py +0 -0
  108. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/sessions.py +0 -0
  109. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/syntax/__init__.py +0 -0
  110. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/syntax/stdattrs.py +0 -0
  111. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/syntax/stddeco.py +0 -0
  112. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/tools/__init__.py +0 -0
  113. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/tools/actions.py +0 -0
  114. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/tools/addons.py +0 -0
  115. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/tools/arm.py +0 -0
  116. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/tools/compression.py +0 -0
  117. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/tools/date.py +0 -0
  118. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/tools/ddhpack.py +0 -0
  119. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/tools/delayedactions.py +0 -0
  120. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/tools/env.py +0 -0
  121. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/tools/folder.py +0 -0
  122. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/tools/grib.py +0 -0
  123. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/tools/lfi.py +0 -0
  124. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/tools/listings.py +0 -0
  125. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/tools/names.py +0 -0
  126. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/tools/net.py +0 -0
  127. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/tools/odb.py +0 -0
  128. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/tools/parallelism.py +0 -0
  129. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/tools/prestaging.py +0 -0
  130. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/tools/rawfiles.py +0 -0
  131. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/tools/schedulers.py +0 -0
  132. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/tools/services.py +0 -0
  133. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/tools/surfex.py +0 -0
  134. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/tools/systems.py +0 -0
  135. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/tools/targets.py +0 -0
  136. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/util/__init__.py +0 -0
  137. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/util/config.py +0 -0
  138. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/util/empty.py +0 -0
  139. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/util/helpers.py +0 -0
  140. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/util/introspection.py +0 -0
  141. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/util/iosponge.py +0 -0
  142. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/util/roles.py +0 -0
  143. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/util/storefunctions.py +0 -0
  144. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/util/structs.py +0 -0
  145. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex/util/worker.py +0 -0
  146. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex_nwp.egg-info/SOURCES.txt +0 -0
  147. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex_nwp.egg-info/dependency_links.txt +0 -0
  148. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex_nwp.egg-info/requires.txt +0 -0
  149. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/src/vortex_nwp.egg-info/top_level.txt +0 -0
  150. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_algo_server.py +0 -0
  151. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_arpifs_listings_integration.py +0 -0
  152. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_cfgparser.py +0 -0
  153. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_cfgtemplating.py +0 -0
  154. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_compression.py +0 -0
  155. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_config.py +0 -0
  156. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_conftools.py +0 -0
  157. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_containers.py +0 -0
  158. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_doctests.py +0 -0
  159. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_ecmwf_interface.py +0 -0
  160. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_env.py +0 -0
  161. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_epygram.py +0 -0
  162. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_gco.py +0 -0
  163. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_ifstools.py +0 -0
  164. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_import.py +0 -0
  165. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_iosponge.py +0 -0
  166. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_job_examples.py +0 -0
  167. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_layoutappconf.py +0 -0
  168. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_layoutjobs.py +0 -0
  169. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_layoutmonitor.py +0 -0
  170. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_layoutnodes.py +0 -0
  171. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_net_netstat.py +0 -0
  172. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_net_ssh.py +0 -0
  173. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_partitioning.py +0 -0
  174. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_providers.py +0 -0
  175. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_sessions_stuff.py +0 -0
  176. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_simpleworkflow.py +0 -0
  177. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_smartftget.py +0 -0
  178. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_ssh.py +0 -0
  179. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_storage.py +0 -0
  180. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_stores.py +0 -0
  181. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_syntax.py +0 -0
  182. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_targets.py +0 -0
  183. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_templates.py +0 -0
  184. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_toolsodb.py +0 -0
  185. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/tests/test_uget.py +0 -0
  186. {vortex_nwp-2.1.0 → vortex_nwp-2.1.1}/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.1
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.1"
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,7 +53,7 @@ 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.1"
57
57
  __prompt__ = "Vortex v-" + __version__ + ":"
58
58
 
59
59
  __nextversion__ = "2.1.1"
@@ -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
 
@@ -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
 
@@ -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:
@@ -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
@@ -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)
@@ -636,9 +636,11 @@ class Archive(AbstractArchive):
636
636
 
637
637
  def __init__(self, *kargs, **kwargs):
638
638
  super().__init__(*kargs, **kwargs)
639
- self.default_usejeeves = config.from_config(
639
+
640
+ self.default_usejeeves = config.get_from_config_w_default(
640
641
  section="storage",
641
642
  key="usejeeves",
643
+ default=False,
642
644
  )
643
645
 
644
646
  @property
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vortex-nwp
3
- Version: 2.1.0
3
+ Version: 2.1.1
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
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes