vortex-nwp 2.0.0b1__py3-none-any.whl → 2.0.0b2__py3-none-any.whl
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.
- vortex/__init__.py +59 -45
- vortex/algo/__init__.py +3 -2
- vortex/algo/components.py +940 -614
- vortex/algo/mpitools.py +802 -497
- vortex/algo/serversynctools.py +34 -33
- vortex/config.py +19 -22
- vortex/data/__init__.py +9 -3
- vortex/data/abstractstores.py +593 -655
- vortex/data/containers.py +217 -162
- vortex/data/contents.py +65 -39
- vortex/data/executables.py +93 -102
- vortex/data/flow.py +40 -34
- vortex/data/geometries.py +228 -132
- vortex/data/handlers.py +428 -225
- vortex/data/outflow.py +15 -15
- vortex/data/providers.py +185 -163
- vortex/data/resources.py +48 -42
- vortex/data/stores.py +544 -413
- vortex/gloves.py +114 -87
- vortex/layout/__init__.py +1 -8
- vortex/layout/contexts.py +150 -84
- vortex/layout/dataflow.py +353 -202
- vortex/layout/monitor.py +264 -128
- vortex/nwp/__init__.py +5 -2
- vortex/nwp/algo/__init__.py +14 -5
- vortex/nwp/algo/assim.py +205 -151
- vortex/nwp/algo/clim.py +683 -517
- vortex/nwp/algo/coupling.py +447 -225
- vortex/nwp/algo/eda.py +437 -229
- vortex/nwp/algo/eps.py +403 -231
- vortex/nwp/algo/forecasts.py +420 -271
- vortex/nwp/algo/fpserver.py +683 -307
- vortex/nwp/algo/ifsnaming.py +205 -145
- vortex/nwp/algo/ifsroot.py +210 -122
- vortex/nwp/algo/monitoring.py +132 -76
- vortex/nwp/algo/mpitools.py +321 -191
- vortex/nwp/algo/odbtools.py +617 -353
- vortex/nwp/algo/oopsroot.py +449 -273
- vortex/nwp/algo/oopstests.py +90 -56
- vortex/nwp/algo/request.py +287 -206
- vortex/nwp/algo/stdpost.py +878 -522
- vortex/nwp/data/__init__.py +22 -4
- vortex/nwp/data/assim.py +125 -137
- vortex/nwp/data/boundaries.py +121 -68
- vortex/nwp/data/climfiles.py +193 -211
- vortex/nwp/data/configfiles.py +73 -69
- vortex/nwp/data/consts.py +426 -401
- vortex/nwp/data/ctpini.py +59 -43
- vortex/nwp/data/diagnostics.py +94 -66
- vortex/nwp/data/eda.py +50 -51
- vortex/nwp/data/eps.py +195 -146
- vortex/nwp/data/executables.py +440 -434
- vortex/nwp/data/fields.py +63 -48
- vortex/nwp/data/gridfiles.py +183 -111
- vortex/nwp/data/logs.py +250 -217
- vortex/nwp/data/modelstates.py +180 -151
- vortex/nwp/data/monitoring.py +72 -99
- vortex/nwp/data/namelists.py +254 -202
- vortex/nwp/data/obs.py +400 -308
- vortex/nwp/data/oopsexec.py +22 -20
- vortex/nwp/data/providers.py +90 -65
- vortex/nwp/data/query.py +71 -82
- vortex/nwp/data/stores.py +49 -36
- vortex/nwp/data/surfex.py +136 -137
- vortex/nwp/syntax/__init__.py +1 -1
- vortex/nwp/syntax/stdattrs.py +173 -111
- vortex/nwp/tools/__init__.py +2 -2
- vortex/nwp/tools/addons.py +22 -17
- vortex/nwp/tools/agt.py +24 -12
- vortex/nwp/tools/bdap.py +16 -5
- vortex/nwp/tools/bdcp.py +4 -1
- vortex/nwp/tools/bdm.py +3 -0
- vortex/nwp/tools/bdmp.py +14 -9
- vortex/nwp/tools/conftools.py +728 -378
- vortex/nwp/tools/drhook.py +12 -8
- vortex/nwp/tools/grib.py +65 -39
- vortex/nwp/tools/gribdiff.py +22 -17
- vortex/nwp/tools/ifstools.py +82 -42
- vortex/nwp/tools/igastuff.py +167 -143
- vortex/nwp/tools/mars.py +14 -2
- vortex/nwp/tools/odb.py +234 -125
- vortex/nwp/tools/partitioning.py +61 -37
- vortex/nwp/tools/satrad.py +27 -12
- vortex/nwp/util/async.py +83 -55
- vortex/nwp/util/beacon.py +10 -10
- vortex/nwp/util/diffpygram.py +174 -86
- vortex/nwp/util/ens.py +144 -63
- vortex/nwp/util/hooks.py +30 -19
- vortex/nwp/util/taskdeco.py +28 -24
- vortex/nwp/util/usepygram.py +278 -172
- vortex/nwp/util/usetnt.py +31 -17
- vortex/sessions.py +72 -39
- vortex/syntax/__init__.py +1 -1
- vortex/syntax/stdattrs.py +410 -171
- vortex/syntax/stddeco.py +31 -22
- vortex/toolbox.py +327 -192
- vortex/tools/__init__.py +11 -2
- vortex/tools/actions.py +125 -59
- vortex/tools/addons.py +111 -92
- vortex/tools/arm.py +42 -22
- vortex/tools/compression.py +72 -69
- vortex/tools/date.py +11 -4
- vortex/tools/delayedactions.py +242 -132
- vortex/tools/env.py +75 -47
- vortex/tools/folder.py +342 -171
- vortex/tools/grib.py +311 -149
- vortex/tools/lfi.py +423 -216
- vortex/tools/listings.py +109 -40
- vortex/tools/names.py +218 -156
- vortex/tools/net.py +632 -298
- vortex/tools/parallelism.py +93 -61
- vortex/tools/prestaging.py +55 -31
- vortex/tools/schedulers.py +172 -105
- vortex/tools/services.py +402 -333
- vortex/tools/storage.py +293 -358
- vortex/tools/surfex.py +24 -24
- vortex/tools/systems.py +1211 -631
- vortex/tools/targets.py +156 -100
- vortex/util/__init__.py +1 -1
- vortex/util/config.py +377 -327
- vortex/util/empty.py +2 -2
- vortex/util/helpers.py +56 -24
- vortex/util/introspection.py +18 -12
- vortex/util/iosponge.py +8 -4
- vortex/util/roles.py +4 -6
- vortex/util/storefunctions.py +39 -13
- vortex/util/structs.py +3 -3
- vortex/util/worker.py +29 -17
- vortex_nwp-2.0.0b2.dist-info/METADATA +66 -0
- vortex_nwp-2.0.0b2.dist-info/RECORD +142 -0
- {vortex_nwp-2.0.0b1.dist-info → vortex_nwp-2.0.0b2.dist-info}/WHEEL +1 -1
- vortex/layout/appconf.py +0 -109
- vortex/layout/jobs.py +0 -1276
- vortex/layout/nodes.py +0 -1424
- vortex/layout/subjobs.py +0 -464
- vortex_nwp-2.0.0b1.dist-info/METADATA +0 -50
- vortex_nwp-2.0.0b1.dist-info/RECORD +0 -146
- {vortex_nwp-2.0.0b1.dist-info → vortex_nwp-2.0.0b2.dist-info}/LICENSE +0 -0
- {vortex_nwp-2.0.0b1.dist-info → vortex_nwp-2.0.0b2.dist-info}/top_level.txt +0 -0
vortex/gloves.py
CHANGED
|
@@ -18,45 +18,45 @@ class Glove(footprints.FootprintBase):
|
|
|
18
18
|
"""Base class for GLObal Versatile Environment."""
|
|
19
19
|
|
|
20
20
|
_abstract = True
|
|
21
|
-
_collector = (
|
|
21
|
+
_collector = ("glove",)
|
|
22
22
|
_footprint = dict(
|
|
23
|
-
info
|
|
24
|
-
attr
|
|
25
|
-
email
|
|
26
|
-
alias
|
|
27
|
-
optional
|
|
28
|
-
default
|
|
29
|
-
access
|
|
23
|
+
info="Abstract glove",
|
|
24
|
+
attr=dict(
|
|
25
|
+
email=dict(
|
|
26
|
+
alias=["address"],
|
|
27
|
+
optional=True,
|
|
28
|
+
default=Environment(active=False)["email"],
|
|
29
|
+
access="rwx",
|
|
30
30
|
),
|
|
31
|
-
vapp
|
|
32
|
-
optional
|
|
33
|
-
default
|
|
34
|
-
access
|
|
31
|
+
vapp=dict(
|
|
32
|
+
optional=True,
|
|
33
|
+
default="play",
|
|
34
|
+
access="rwx",
|
|
35
35
|
),
|
|
36
|
-
vconf
|
|
37
|
-
optional
|
|
38
|
-
default
|
|
39
|
-
access
|
|
36
|
+
vconf=dict(
|
|
37
|
+
optional=True,
|
|
38
|
+
default="sandbox",
|
|
39
|
+
access="rwx",
|
|
40
40
|
),
|
|
41
|
-
tag
|
|
42
|
-
optional
|
|
43
|
-
default
|
|
41
|
+
tag=dict(
|
|
42
|
+
optional=True,
|
|
43
|
+
default="default",
|
|
44
44
|
),
|
|
45
|
-
user
|
|
46
|
-
alias
|
|
47
|
-
optional
|
|
48
|
-
default
|
|
45
|
+
user=dict(
|
|
46
|
+
alias=("logname", "username"),
|
|
47
|
+
optional=True,
|
|
48
|
+
default=Environment(active=False)["logname"],
|
|
49
49
|
),
|
|
50
|
-
profile
|
|
51
|
-
alias
|
|
52
|
-
values
|
|
53
|
-
remap
|
|
54
|
-
)
|
|
55
|
-
)
|
|
50
|
+
profile=dict(
|
|
51
|
+
alias=("kind", "membership"),
|
|
52
|
+
values=["oper", "dble", "test", "research", "tourist"],
|
|
53
|
+
remap=dict(tourist="research"),
|
|
54
|
+
),
|
|
55
|
+
),
|
|
56
56
|
)
|
|
57
57
|
|
|
58
58
|
def __init__(self, *args, **kw):
|
|
59
|
-
logger.debug(
|
|
59
|
+
logger.debug("Glove abstract %s init", self.__class__)
|
|
60
60
|
super().__init__(*args, **kw)
|
|
61
61
|
self._rmdepthmin = 3
|
|
62
62
|
self._siteroot = None
|
|
@@ -70,32 +70,32 @@ class Glove(footprints.FootprintBase):
|
|
|
70
70
|
@property
|
|
71
71
|
def realkind(self):
|
|
72
72
|
"""Returns the litteral string identity of the current glove."""
|
|
73
|
-
return
|
|
73
|
+
return "glove"
|
|
74
74
|
|
|
75
75
|
@property
|
|
76
76
|
def configrc(self):
|
|
77
77
|
"""Returns the path of the default directory where ``.ini`` files are stored."""
|
|
78
|
-
return Environment(active=False).HOME +
|
|
78
|
+
return Environment(active=False).HOME + "/.vortexrc"
|
|
79
79
|
|
|
80
80
|
@property
|
|
81
81
|
def siteroot(self):
|
|
82
82
|
"""Returns the path of the vortex install directory."""
|
|
83
83
|
if not self._siteroot:
|
|
84
|
-
self._siteroot =
|
|
84
|
+
self._siteroot = "/".join(__file__.split("/")[0:-3])
|
|
85
85
|
return self._siteroot
|
|
86
86
|
|
|
87
87
|
@property
|
|
88
88
|
def siteconf(self):
|
|
89
89
|
"""Returns the path of the default directory where ``.ini`` files are stored."""
|
|
90
90
|
if not self._siteconf:
|
|
91
|
-
self._siteconf =
|
|
91
|
+
self._siteconf = "/".join((self.siteroot, "conf"))
|
|
92
92
|
return self._siteconf
|
|
93
93
|
|
|
94
94
|
@property
|
|
95
95
|
def sitedoc(self):
|
|
96
96
|
"""Returns the path of the default directory where ``.ini`` files are stored."""
|
|
97
97
|
if not self._sitedoc:
|
|
98
|
-
self._sitedoc =
|
|
98
|
+
self._sitedoc = "/".join((self.siteroot, "sphinx"))
|
|
99
99
|
return self._sitedoc
|
|
100
100
|
|
|
101
101
|
@property
|
|
@@ -103,8 +103,8 @@ class Glove(footprints.FootprintBase):
|
|
|
103
103
|
"""Returns the path of the default directory where ``.ini`` files are stored."""
|
|
104
104
|
if not self._sitesrc:
|
|
105
105
|
self._sitesrc = (
|
|
106
|
-
|
|
107
|
-
|
|
106
|
+
"/".join((self.siteroot, "site")),
|
|
107
|
+
"/".join((self.siteroot, "src")),
|
|
108
108
|
)
|
|
109
109
|
return self._sitesrc
|
|
110
110
|
|
|
@@ -120,8 +120,9 @@ class Glove(footprints.FootprintBase):
|
|
|
120
120
|
"""Refresh actual email with current username and provided ``domain``."""
|
|
121
121
|
if domain is None:
|
|
122
122
|
from vortex import sessions
|
|
123
|
+
|
|
123
124
|
domain = sessions.system().getfqdn()
|
|
124
|
-
return
|
|
125
|
+
return "@".join((self.user, domain))
|
|
125
126
|
|
|
126
127
|
@property
|
|
127
128
|
def xmail(self):
|
|
@@ -156,14 +157,16 @@ class Glove(footprints.FootprintBase):
|
|
|
156
157
|
if self._ftduser:
|
|
157
158
|
return self._ftduser
|
|
158
159
|
else:
|
|
159
|
-
return Environment.current().get(
|
|
160
|
-
|
|
160
|
+
return Environment.current().get(
|
|
161
|
+
"VORTEX_ARCHIVE_USER",
|
|
162
|
+
self.user if defaults_to_user else None,
|
|
163
|
+
)
|
|
161
164
|
|
|
162
165
|
def _get_default_fthost(self):
|
|
163
166
|
if self._ftdhost:
|
|
164
167
|
return self._ftdhost
|
|
165
168
|
else:
|
|
166
|
-
return Environment.current().get(
|
|
169
|
+
return Environment.current().get("VORTEX_ARCHIVE_HOST", None)
|
|
167
170
|
|
|
168
171
|
def _set_default_fthost(self, value):
|
|
169
172
|
self._ftdhost = value
|
|
@@ -171,31 +174,57 @@ class Glove(footprints.FootprintBase):
|
|
|
171
174
|
def _del_default_fthost(self):
|
|
172
175
|
self._ftdhost = None
|
|
173
176
|
|
|
174
|
-
default_fthost = property(
|
|
177
|
+
default_fthost = property(
|
|
178
|
+
_get_default_fthost, _set_default_fthost, _del_default_fthost
|
|
179
|
+
)
|
|
175
180
|
|
|
176
|
-
def describeftsettings(self, indent=
|
|
181
|
+
def describeftsettings(self, indent="+ "):
|
|
177
182
|
"""Returns a printable description of default file transfert usernames."""
|
|
178
183
|
card = "\n".join(
|
|
179
|
-
[
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
184
|
+
[
|
|
185
|
+
"{0}{3:48s} = {4:s}",
|
|
186
|
+
]
|
|
187
|
+
+ [
|
|
188
|
+
"{0}{1:48s} = {2:s}",
|
|
189
|
+
]
|
|
190
|
+
+ (
|
|
191
|
+
[
|
|
192
|
+
"{0}Host specific FT users:",
|
|
193
|
+
]
|
|
194
|
+
if self._ftusers
|
|
195
|
+
else []
|
|
196
|
+
)
|
|
197
|
+
+ [
|
|
198
|
+
"{0}" + " {:46s} = {:s}".format(k, v)
|
|
199
|
+
for k, v in self._ftusers.items()
|
|
200
|
+
if v
|
|
201
|
+
]
|
|
202
|
+
).format(
|
|
203
|
+
indent,
|
|
204
|
+
"Default FT User",
|
|
205
|
+
str(self._ftduser),
|
|
206
|
+
"Default FT Host",
|
|
207
|
+
str(self._ftdhost),
|
|
208
|
+
)
|
|
186
209
|
return card
|
|
187
210
|
|
|
188
|
-
def idcard(self, indent=
|
|
211
|
+
def idcard(self, indent="+ "):
|
|
189
212
|
"""Returns a printable description of the current glove."""
|
|
190
|
-
card = "\n".join(
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
213
|
+
card = "\n".join(
|
|
214
|
+
(
|
|
215
|
+
"{0}User = {1:s}",
|
|
216
|
+
"{0}Profile = {2!s}",
|
|
217
|
+
"{0}Vapp = {3:s}",
|
|
218
|
+
"{0}Vconf = {4:s}",
|
|
219
|
+
"{0}Configrc = {5:s}",
|
|
220
|
+
)
|
|
221
|
+
).format(
|
|
197
222
|
indent,
|
|
198
|
-
self.user,
|
|
223
|
+
self.user,
|
|
224
|
+
self.profile,
|
|
225
|
+
self.vapp,
|
|
226
|
+
self.vconf,
|
|
227
|
+
self.configrc,
|
|
199
228
|
)
|
|
200
229
|
return card
|
|
201
230
|
|
|
@@ -211,19 +240,19 @@ class ResearchGlove(Glove):
|
|
|
211
240
|
|
|
212
241
|
_explicit = False
|
|
213
242
|
_footprint = dict(
|
|
214
|
-
info
|
|
215
|
-
attr
|
|
216
|
-
profile
|
|
217
|
-
optional
|
|
218
|
-
values
|
|
219
|
-
default
|
|
243
|
+
info="Research glove",
|
|
244
|
+
attr=dict(
|
|
245
|
+
profile=dict(
|
|
246
|
+
optional=True,
|
|
247
|
+
values=["research", "tourist"],
|
|
248
|
+
default="research",
|
|
220
249
|
)
|
|
221
|
-
)
|
|
250
|
+
),
|
|
222
251
|
)
|
|
223
252
|
|
|
224
253
|
@property
|
|
225
254
|
def realkind(self):
|
|
226
|
-
return
|
|
255
|
+
return "research"
|
|
227
256
|
|
|
228
257
|
|
|
229
258
|
class OperGlove(Glove):
|
|
@@ -236,40 +265,38 @@ class OperGlove(Glove):
|
|
|
236
265
|
"""
|
|
237
266
|
|
|
238
267
|
_footprint = dict(
|
|
239
|
-
info
|
|
240
|
-
attr
|
|
241
|
-
user
|
|
242
|
-
|
|
268
|
+
info="Operational glove",
|
|
269
|
+
attr=dict(
|
|
270
|
+
user=dict(values=["mxpt001"]),
|
|
271
|
+
profile=dict(
|
|
272
|
+
optional=False,
|
|
273
|
+
values=["oper", "dble", "test", "miroir"],
|
|
243
274
|
),
|
|
244
|
-
|
|
245
|
-
optional = False,
|
|
246
|
-
values = ['oper', 'dble', 'test', 'miroir'],
|
|
247
|
-
)
|
|
248
|
-
)
|
|
275
|
+
),
|
|
249
276
|
)
|
|
250
277
|
|
|
251
278
|
@property
|
|
252
279
|
def realkind(self):
|
|
253
|
-
return
|
|
280
|
+
return "opuser"
|
|
254
281
|
|
|
255
282
|
|
|
256
283
|
class UnitTestGlove(ResearchGlove):
|
|
257
284
|
"""A very special glove for unit-tests."""
|
|
258
285
|
|
|
259
286
|
_footprint = dict(
|
|
260
|
-
info
|
|
261
|
-
attr
|
|
262
|
-
profile
|
|
263
|
-
optional
|
|
264
|
-
values
|
|
287
|
+
info="Unit-Test Glove",
|
|
288
|
+
attr=dict(
|
|
289
|
+
profile=dict(
|
|
290
|
+
optional=False,
|
|
291
|
+
values=["utest"],
|
|
265
292
|
),
|
|
266
|
-
test_configrc
|
|
267
|
-
optional
|
|
293
|
+
test_configrc=dict(
|
|
294
|
+
optional=False,
|
|
268
295
|
),
|
|
269
|
-
test_siteroot
|
|
270
|
-
optional
|
|
296
|
+
test_siteroot=dict(
|
|
297
|
+
optional=False,
|
|
271
298
|
),
|
|
272
|
-
)
|
|
299
|
+
),
|
|
273
300
|
)
|
|
274
301
|
|
|
275
302
|
def __init__(self, *args, **kw):
|
vortex/layout/__init__.py
CHANGED
|
@@ -12,16 +12,9 @@ a VORTEX session:
|
|
|
12
12
|
the list of sections and environment variables ;
|
|
13
13
|
* the :mod:`monitor` module defines utility classes to monitor the state of an
|
|
14
14
|
ensemble of :class:`~dataflow.Section` objects.
|
|
15
|
-
|
|
16
|
-
It also provides modules that allows to create "standard" VORTEX's jobs:
|
|
17
|
-
|
|
18
|
-
* the :mod:`nodes` modules defines a bunch of classes that helps to organise
|
|
19
|
-
VORTEX jobs (creating tasks, families of tasks, ...);
|
|
20
|
-
* the :mod:`jobs` module focuses on the actual job generation and initialisation.
|
|
21
|
-
|
|
22
15
|
"""
|
|
23
16
|
|
|
24
17
|
#: No automatic export
|
|
25
18
|
__all__ = []
|
|
26
19
|
|
|
27
|
-
__tocinfoline__ =
|
|
20
|
+
__tocinfoline__ = "Package that helps organising a VORTEX session."
|