vortex-nwp 2.0.0b1__py3-none-any.whl → 2.1.0__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.
Files changed (141) hide show
  1. vortex/__init__.py +75 -47
  2. vortex/algo/__init__.py +3 -2
  3. vortex/algo/components.py +944 -618
  4. vortex/algo/mpitools.py +802 -497
  5. vortex/algo/mpitools_templates/__init__.py +1 -0
  6. vortex/algo/serversynctools.py +34 -33
  7. vortex/config.py +19 -22
  8. vortex/data/__init__.py +9 -3
  9. vortex/data/abstractstores.py +593 -655
  10. vortex/data/containers.py +217 -162
  11. vortex/data/contents.py +65 -39
  12. vortex/data/executables.py +93 -102
  13. vortex/data/flow.py +40 -34
  14. vortex/data/geometries.py +228 -132
  15. vortex/data/handlers.py +436 -227
  16. vortex/data/outflow.py +15 -15
  17. vortex/data/providers.py +185 -163
  18. vortex/data/resources.py +48 -42
  19. vortex/data/stores.py +540 -417
  20. vortex/data/sync_templates/__init__.py +0 -0
  21. vortex/gloves.py +114 -87
  22. vortex/layout/__init__.py +1 -8
  23. vortex/layout/contexts.py +150 -84
  24. vortex/layout/dataflow.py +353 -202
  25. vortex/layout/monitor.py +264 -128
  26. vortex/nwp/__init__.py +5 -2
  27. vortex/nwp/algo/__init__.py +14 -5
  28. vortex/nwp/algo/assim.py +205 -151
  29. vortex/nwp/algo/clim.py +683 -517
  30. vortex/nwp/algo/coupling.py +447 -225
  31. vortex/nwp/algo/eda.py +437 -229
  32. vortex/nwp/algo/eps.py +403 -231
  33. vortex/nwp/algo/forecasts.py +416 -275
  34. vortex/nwp/algo/fpserver.py +683 -307
  35. vortex/nwp/algo/ifsnaming.py +205 -145
  36. vortex/nwp/algo/ifsroot.py +215 -122
  37. vortex/nwp/algo/monitoring.py +137 -76
  38. vortex/nwp/algo/mpitools.py +330 -190
  39. vortex/nwp/algo/odbtools.py +637 -353
  40. vortex/nwp/algo/oopsroot.py +454 -273
  41. vortex/nwp/algo/oopstests.py +90 -56
  42. vortex/nwp/algo/request.py +287 -206
  43. vortex/nwp/algo/stdpost.py +878 -522
  44. vortex/nwp/data/__init__.py +22 -4
  45. vortex/nwp/data/assim.py +125 -137
  46. vortex/nwp/data/boundaries.py +121 -68
  47. vortex/nwp/data/climfiles.py +193 -211
  48. vortex/nwp/data/configfiles.py +73 -69
  49. vortex/nwp/data/consts.py +426 -401
  50. vortex/nwp/data/ctpini.py +59 -43
  51. vortex/nwp/data/diagnostics.py +94 -66
  52. vortex/nwp/data/eda.py +50 -51
  53. vortex/nwp/data/eps.py +195 -146
  54. vortex/nwp/data/executables.py +440 -434
  55. vortex/nwp/data/fields.py +63 -48
  56. vortex/nwp/data/gridfiles.py +183 -111
  57. vortex/nwp/data/logs.py +250 -217
  58. vortex/nwp/data/modelstates.py +180 -151
  59. vortex/nwp/data/monitoring.py +72 -99
  60. vortex/nwp/data/namelists.py +254 -202
  61. vortex/nwp/data/obs.py +400 -308
  62. vortex/nwp/data/oopsexec.py +22 -20
  63. vortex/nwp/data/providers.py +90 -65
  64. vortex/nwp/data/query.py +71 -82
  65. vortex/nwp/data/stores.py +49 -36
  66. vortex/nwp/data/surfex.py +136 -137
  67. vortex/nwp/syntax/__init__.py +1 -1
  68. vortex/nwp/syntax/stdattrs.py +173 -111
  69. vortex/nwp/tools/__init__.py +2 -2
  70. vortex/nwp/tools/addons.py +22 -17
  71. vortex/nwp/tools/agt.py +24 -12
  72. vortex/nwp/tools/bdap.py +16 -5
  73. vortex/nwp/tools/bdcp.py +4 -1
  74. vortex/nwp/tools/bdm.py +3 -0
  75. vortex/nwp/tools/bdmp.py +14 -9
  76. vortex/nwp/tools/conftools.py +728 -378
  77. vortex/nwp/tools/drhook.py +12 -8
  78. vortex/nwp/tools/grib.py +65 -39
  79. vortex/nwp/tools/gribdiff.py +22 -17
  80. vortex/nwp/tools/ifstools.py +82 -42
  81. vortex/nwp/tools/igastuff.py +167 -143
  82. vortex/nwp/tools/mars.py +14 -2
  83. vortex/nwp/tools/odb.py +234 -125
  84. vortex/nwp/tools/partitioning.py +61 -37
  85. vortex/nwp/tools/satrad.py +27 -12
  86. vortex/nwp/util/async.py +83 -55
  87. vortex/nwp/util/beacon.py +10 -10
  88. vortex/nwp/util/diffpygram.py +174 -86
  89. vortex/nwp/util/ens.py +144 -63
  90. vortex/nwp/util/hooks.py +30 -19
  91. vortex/nwp/util/taskdeco.py +28 -24
  92. vortex/nwp/util/usepygram.py +278 -172
  93. vortex/nwp/util/usetnt.py +31 -17
  94. vortex/sessions.py +72 -39
  95. vortex/syntax/__init__.py +1 -1
  96. vortex/syntax/stdattrs.py +410 -171
  97. vortex/syntax/stddeco.py +31 -22
  98. vortex/toolbox.py +327 -192
  99. vortex/tools/__init__.py +11 -2
  100. vortex/tools/actions.py +110 -121
  101. vortex/tools/addons.py +111 -92
  102. vortex/tools/arm.py +42 -22
  103. vortex/tools/compression.py +72 -69
  104. vortex/tools/date.py +11 -4
  105. vortex/tools/delayedactions.py +242 -132
  106. vortex/tools/env.py +75 -47
  107. vortex/tools/folder.py +342 -171
  108. vortex/tools/grib.py +341 -162
  109. vortex/tools/lfi.py +423 -216
  110. vortex/tools/listings.py +109 -40
  111. vortex/tools/names.py +218 -156
  112. vortex/tools/net.py +655 -299
  113. vortex/tools/parallelism.py +93 -61
  114. vortex/tools/prestaging.py +55 -31
  115. vortex/tools/schedulers.py +172 -105
  116. vortex/tools/services.py +403 -334
  117. vortex/tools/storage.py +293 -358
  118. vortex/tools/surfex.py +24 -24
  119. vortex/tools/systems.py +1234 -643
  120. vortex/tools/targets.py +156 -100
  121. vortex/util/__init__.py +1 -1
  122. vortex/util/config.py +378 -327
  123. vortex/util/empty.py +2 -2
  124. vortex/util/helpers.py +56 -24
  125. vortex/util/introspection.py +18 -12
  126. vortex/util/iosponge.py +8 -4
  127. vortex/util/roles.py +4 -6
  128. vortex/util/storefunctions.py +39 -13
  129. vortex/util/structs.py +3 -3
  130. vortex/util/worker.py +29 -17
  131. vortex_nwp-2.1.0.dist-info/METADATA +67 -0
  132. vortex_nwp-2.1.0.dist-info/RECORD +144 -0
  133. {vortex_nwp-2.0.0b1.dist-info → vortex_nwp-2.1.0.dist-info}/WHEEL +1 -1
  134. vortex/layout/appconf.py +0 -109
  135. vortex/layout/jobs.py +0 -1276
  136. vortex/layout/nodes.py +0 -1424
  137. vortex/layout/subjobs.py +0 -464
  138. vortex_nwp-2.0.0b1.dist-info/METADATA +0 -50
  139. vortex_nwp-2.0.0b1.dist-info/RECORD +0 -146
  140. {vortex_nwp-2.0.0b1.dist-info → vortex_nwp-2.1.0.dist-info/licenses}/LICENSE +0 -0
  141. {vortex_nwp-2.0.0b1.dist-info → vortex_nwp-2.1.0.dist-info}/top_level.txt +0 -0
vortex/nwp/data/stores.py CHANGED
@@ -25,31 +25,29 @@ class BdpeStore(Store):
25
25
  _footprint = [
26
26
  compressionpipeline,
27
27
  dict(
28
- info = 'Access the BDPE database',
29
- attr = dict(
30
- scheme = dict(
31
- values = ['bdpe'],
28
+ info="Access the BDPE database",
29
+ attr=dict(
30
+ scheme=dict(
31
+ values=["bdpe"],
32
32
  ),
33
- netloc = dict(
34
- values = ['bdpe.archive.fr'],
33
+ netloc=dict(
34
+ values=["bdpe.archive.fr"],
35
35
  ),
36
36
  ),
37
- priority = dict(
38
- level = footprints.priorities.top.DEFAULT
39
- ),
37
+ priority=dict(level=footprints.priorities.top.DEFAULT),
40
38
  ),
41
39
  ]
42
40
 
43
41
  @property
44
42
  def realkind(self):
45
- return 'bdpe'
43
+ return "bdpe"
46
44
 
47
45
  def bdpelocate(self, remote, options):
48
46
  """Reasonably close to whatever 'remote location' could mean.
49
47
 
50
48
  e.g.: ``bdpe://bdpe.archive.fr/EXPE/date/BDPE_num+term``
51
49
  """
52
- return self.scheme + '://' + self.netloc + remote['path']
50
+ return self.scheme + "://" + self.netloc + remote["path"]
53
51
 
54
52
  def bdpecheck(self, remote, options):
55
53
  """Cannot check a BDPE call a priori."""
@@ -71,21 +69,27 @@ class BdpeStore(Store):
71
69
 
72
70
  # Check that local is a file (i.e not a virtual container)
73
71
  if not isinstance(local, str):
74
- raise TypeError('The BDPE provider can not deal with virtual containers')
72
+ raise TypeError(
73
+ "The BDPE provider can not deal with virtual containers"
74
+ )
75
75
 
76
76
  # remote['path'] looks like '/OPER_SEC_DEV_True_10_3/20151105T0000P/BDPE_42+06:00'
77
- _, targetmix, str_date, more = remote['path'].split('/')
78
- p_target, f_target, domain, s_archive, timeout, retries = targetmix.split('_')
79
- productid, str_term = more[5:].split('+')
77
+ _, targetmix, str_date, more = remote["path"].split("/")
78
+ p_target, f_target, domain, s_archive, timeout, retries = (
79
+ targetmix.split("_")
80
+ )
81
+ productid, str_term = more[5:].split("+")
80
82
 
81
83
  # the 'oper' domain is allowed only to the operational suite
82
- if domain == 'oper':
83
- if not vortex.ticket().glove.profile == 'oper':
84
- logger.warning("Only profile 'oper' can use 'soprano_domain=oper'. Using 'dev' instead.")
85
- domain = 'dev'
86
-
87
- if str_date == 'most_recent':
88
- bdpe_date = '/'
84
+ if domain == "oper":
85
+ if not vortex.ticket().glove.profile == "oper":
86
+ logger.warning(
87
+ "Only profile 'oper' can use 'soprano_domain=oper'. Using 'dev' instead."
88
+ )
89
+ domain = "dev"
90
+
91
+ if str_date == "most_recent":
92
+ bdpe_date = "/"
89
93
  else:
90
94
  bdpe_date = date.Date(str_date).ymdhms
91
95
  bdpe_term = date.Time(str_term).fmtraw
@@ -93,7 +97,7 @@ class BdpeStore(Store):
93
97
  productid, # id
94
98
  bdpe_date, # date: yyyymmddhhmmss
95
99
  bdpe_term, # term: HHHHmm
96
- local, # local filename
100
+ local, # local filename
97
101
  ]
98
102
  extraenv = dict(
99
103
  BDPE_CIBLE_PREFEREE=p_target,
@@ -102,31 +106,37 @@ class BdpeStore(Store):
102
106
  BDPE_TIMEOUT=timeout,
103
107
  BDPE_RETRYS=retries,
104
108
  )
105
- if s_archive == 'True':
106
- extraenv['BDPE_LECTURE_ARCHIVE_AUTORISEE'] = 'oui'
109
+ if s_archive == "True":
110
+ extraenv["BDPE_LECTURE_ARCHIVE_AUTORISEE"] = "oui"
107
111
 
108
- wsinterpreter = self.system.default_target.get('bdpe:wsclient_interpreter', None)
109
- wscommand = self.system.default_target.get('bdpe:wsclient_path', None)
112
+ wsinterpreter = self.system.default_target.get(
113
+ "bdpe:wsclient_interpreter", None
114
+ )
115
+ wscommand = self.system.default_target.get("bdpe:wsclient_path", None)
110
116
  if wscommand is None:
111
- raise RuntimeError('bdpe:wsclient_path has to be set in the target config')
117
+ raise RuntimeError(
118
+ "bdpe:wsclient_path has to be set in the target config"
119
+ )
112
120
 
113
121
  args.insert(0, wscommand)
114
122
  if wsinterpreter is not None:
115
123
  args.insert(0, wsinterpreter)
116
124
 
117
- logger.debug('lirepe_cmd: %s', " ".join(args))
125
+ logger.debug("lirepe_cmd: %s", " ".join(args))
118
126
 
119
127
  with self.system.env.delta_context(**extraenv):
120
128
  rc = self.system.spawn(args, output=False, fatal=False)
121
129
  rc = rc and self.system.path.exists(local)
122
130
 
123
- diagfile = local + '.diag'
131
+ diagfile = local + ".diag"
124
132
  if not rc:
125
- logger.warning('Something went wrong with the following command: %s',
126
- " ".join(args))
127
- if not rc or bdpe_date == '/':
133
+ logger.warning(
134
+ "Something went wrong with the following command: %s",
135
+ " ".join(args),
136
+ )
137
+ if not rc or bdpe_date == "/":
128
138
  if self.system.path.exists(diagfile):
129
- logger.warning('The %s file is:', diagfile)
139
+ logger.warning("The %s file is:", diagfile)
130
140
  self.system.cat(diagfile)
131
141
  if rc and self._actual_cpipeline:
132
142
  # Deal with compressed files in the BDPE using the optional attribute
@@ -136,10 +146,13 @@ class BdpeStore(Store):
136
146
  self._actual_cpipeline.file2uncompress(tempfile, local)
137
147
  rc = rc and self.system.path.exists(local)
138
148
  if not rc:
139
- logger.warning('Something went wrong while uncompressing the file %s.', tempfile)
149
+ logger.warning(
150
+ "Something went wrong while uncompressing the file %s.",
151
+ tempfile,
152
+ )
140
153
 
141
154
  # Final step : deal with format specific packing
142
- rc = rc and self.system.forceunpack(local, fmt=options.get('fmt'))
155
+ rc = rc and self.system.forceunpack(local, fmt=options.get("fmt"))
143
156
 
144
157
  if self.system.path.exists(diagfile):
145
158
  self.system.remove(diagfile)
vortex/nwp/data/surfex.py CHANGED
@@ -10,7 +10,7 @@ from ..syntax.stdattrs import gvar
10
10
  __all__ = []
11
11
 
12
12
 
13
- @namebuilding_delete('src')
13
+ @namebuilding_delete("src")
14
14
  class PGDRaw(ModelGeoResource):
15
15
  """
16
16
  SURFEX climatological resource.
@@ -18,34 +18,39 @@ class PGDRaw(ModelGeoResource):
18
18
 
19
19
  :note: OBSOLETE classes do not use.
20
20
  """
21
+
21
22
  _abstract = True
22
23
  _footprint = [
23
24
  gvar,
24
25
  dict(
25
- info = 'Surfex climatological file',
26
- attr = dict(
27
- gvar = dict(
28
- default = 'pgd_[nativefmt]',
26
+ info="Surfex climatological file",
27
+ attr=dict(
28
+ gvar=dict(
29
+ default="pgd_[nativefmt]",
29
30
  ),
30
- )
31
- )
31
+ ),
32
+ ),
32
33
  ]
33
- _extension_remap = dict(netcdf='nc')
34
+ _extension_remap = dict(netcdf="nc")
34
35
 
35
36
  @property
36
37
  def realkind(self):
37
- return 'pgd'
38
+ return "pgd"
38
39
 
39
40
  def olive_basename(self):
40
41
  """OLIVE specific naming convention."""
41
- return 'PGDFILE-' + self.geometry.area + '.' + self.nativefmt
42
+ return "PGDFILE-" + self.geometry.area + "." + self.nativefmt
42
43
 
43
44
  def namebuilding_info(self):
44
45
  nbi = super().namebuilding_info()
45
46
  nbi.update(
46
47
  # will work only with the @cen namebuilder:
47
- cen_rawbasename=('PGD_' + self.geometry.area + '.' +
48
- self._extension_remap.get(self.nativefmt, self.nativefmt))
48
+ cen_rawbasename=(
49
+ "PGD_"
50
+ + self.geometry.area
51
+ + "."
52
+ + self._extension_remap.get(self.nativefmt, self.nativefmt)
53
+ )
49
54
  # With the standard provider, the usual keys will be used...
50
55
  )
51
56
  return nbi
@@ -58,16 +63,17 @@ class PGDLFI(PGDRaw):
58
63
 
59
64
  :note: OBSOLETE classes do not use.
60
65
  """
66
+
61
67
  _footprint = dict(
62
- info = 'Grid-point data consts',
63
- attr = dict(
64
- kind = dict(
65
- values = ['pgdlfi'],
68
+ info="Grid-point data consts",
69
+ attr=dict(
70
+ kind=dict(
71
+ values=["pgdlfi"],
66
72
  ),
67
- nativefmt = dict(
68
- default = 'lfi',
69
- )
70
- )
73
+ nativefmt=dict(
74
+ default="lfi",
75
+ ),
76
+ ),
71
77
  )
72
78
 
73
79
 
@@ -78,16 +84,17 @@ class PGDFA(PGDRaw):
78
84
 
79
85
  :note: OBSOLETE classes do not use.
80
86
  """
87
+
81
88
  _footprint = dict(
82
- info = 'Grid-point data consts',
83
- attr = dict(
84
- kind = dict(
85
- values = ['pgdfa'],
89
+ info="Grid-point data consts",
90
+ attr=dict(
91
+ kind=dict(
92
+ values=["pgdfa"],
86
93
  ),
87
- nativefmt = dict(
88
- default = 'fa',
89
- )
90
- )
94
+ nativefmt=dict(
95
+ default="fa",
96
+ ),
97
+ ),
91
98
  )
92
99
 
93
100
 
@@ -98,52 +105,56 @@ class PGDNC(PGDRaw):
98
105
 
99
106
  :note: OBSOLETE classes do not use.
100
107
  """
108
+
101
109
  _footprint = dict(
102
- info = 'Grid-point data consts',
103
- attr = dict(
104
- kind = dict(
105
- values = ['pgdnc'],
110
+ info="Grid-point data consts",
111
+ attr=dict(
112
+ kind=dict(
113
+ values=["pgdnc"],
106
114
  ),
107
- nativefmt = dict(
108
- default = 'netcdf',
109
- )
110
- )
115
+ nativefmt=dict(
116
+ default="netcdf",
117
+ ),
118
+ ),
111
119
  )
112
120
 
113
121
 
114
- @namebuilding_delete('src')
122
+ @namebuilding_delete("src")
115
123
  class PGDWithGeo(ModelGeoResource):
116
124
  """
117
125
  SURFEX climatological resource.
118
126
  A Genvkey can be provided.
119
127
  """
128
+
120
129
  _footprint = [
121
130
  gvar,
122
131
  dict(
123
- info = 'Surfex climatological file',
124
- attr = dict(
125
- kind = dict(
126
- values = ['pgd', ],
132
+ info="Surfex climatological file",
133
+ attr=dict(
134
+ kind=dict(
135
+ values=[
136
+ "pgd",
137
+ ],
127
138
  ),
128
- nativefmt = dict(
129
- values = ['fa', 'lfi', 'netcdf', 'txt'],
130
- default = 'fa',
139
+ nativefmt=dict(
140
+ values=["fa", "lfi", "netcdf", "txt"],
141
+ default="fa",
131
142
  ),
132
- gvar = dict(
133
- default = 'pgd_[geometry::gco_grid_def]_[nativefmt]',
143
+ gvar=dict(
144
+ default="pgd_[geometry::gco_grid_def]_[nativefmt]",
134
145
  ),
135
- )
136
- )
146
+ ),
147
+ ),
137
148
  ]
138
- _extension_remap = dict(netcdf='nc')
149
+ _extension_remap = dict(netcdf="nc")
139
150
 
140
151
  @property
141
152
  def realkind(self):
142
- return 'pgd'
153
+ return "pgd"
143
154
 
144
155
  def olive_basename(self):
145
156
  """OLIVE specific naming convention."""
146
- return 'PGDFILE-' + self.geometry.area + '.' + self.nativefmt
157
+ return "PGDFILE-" + self.geometry.area + "." + self.nativefmt
147
158
 
148
159
 
149
160
  class CoverParams(ModelGeoResource):
@@ -151,30 +162,29 @@ class CoverParams(ModelGeoResource):
151
162
  Class of a tar-zip set of coefficients for radiative transfers computations.
152
163
  A Genvkey can be given.
153
164
  """
165
+
154
166
  _footprint = [
155
167
  gvar,
156
168
  dict(
157
- info = 'Coefficients of RRTM scheme',
158
- attr = dict(
159
- kind = dict(
160
- values = ['coverparams', 'surfexcover'],
161
- remap = dict(surfexcover = 'coverparams'),
169
+ info="Coefficients of RRTM scheme",
170
+ attr=dict(
171
+ kind=dict(
172
+ values=["coverparams", "surfexcover"],
173
+ remap=dict(surfexcover="coverparams"),
162
174
  ),
163
- source = dict(
164
- optional = True,
165
- default = 'ecoclimap',
166
- values = ['ecoclimap', 'ecoclimap1', 'ecoclimap2'],
175
+ source=dict(
176
+ optional=True,
177
+ default="ecoclimap",
178
+ values=["ecoclimap", "ecoclimap1", "ecoclimap2"],
167
179
  ),
168
- gvar = dict(
169
- default = '[source]_covers_param'
170
- ),
171
- )
172
- )
180
+ gvar=dict(default="[source]_covers_param"),
181
+ ),
182
+ ),
173
183
  ]
174
184
 
175
185
  @property
176
186
  def realkind(self):
177
- return 'coverparams'
187
+ return "coverparams"
178
188
 
179
189
 
180
190
  class IsbaParams(ModelGeoResource):
@@ -182,25 +192,24 @@ class IsbaParams(ModelGeoResource):
182
192
  Class of surface (vegetations, etc.) coefficients.
183
193
  A Genvkey can be given.
184
194
  """
195
+
185
196
  _footprint = [
186
197
  gvar,
187
198
  dict(
188
- info = 'ISBA parameters',
189
- attr = dict(
190
- kind = dict(
191
- values = ['isba', 'isbaan'],
192
- remap = dict(isbaan = 'isba'),
193
- ),
194
- gvar = dict(
195
- default = 'analyse_isba'
199
+ info="ISBA parameters",
200
+ attr=dict(
201
+ kind=dict(
202
+ values=["isba", "isbaan"],
203
+ remap=dict(isbaan="isba"),
196
204
  ),
197
- )
198
- )
205
+ gvar=dict(default="analyse_isba"),
206
+ ),
207
+ ),
199
208
  ]
200
209
 
201
210
  @property
202
211
  def realkind(self):
203
- return 'isba'
212
+ return "isba"
204
213
 
205
214
 
206
215
  class SandDB(ModelGeoResource):
@@ -208,26 +217,24 @@ class SandDB(ModelGeoResource):
208
217
  Class of a tar-zip (.dir/.hdr) file containing surface sand database.
209
218
  A Genvkey can be given.
210
219
  """
220
+
211
221
  _footprint = [
212
222
  gvar,
213
223
  dict(
214
- info = 'Database for quantity of sand in soil',
215
- attr = dict(
216
- kind = dict(
217
- values = ['sand'],
218
- ),
219
- source = dict(
224
+ info="Database for quantity of sand in soil",
225
+ attr=dict(
226
+ kind=dict(
227
+ values=["sand"],
220
228
  ),
221
- gvar = dict(
222
- default = '[source]_[kind]'
223
- ),
224
- )
225
- )
229
+ source=dict(),
230
+ gvar=dict(default="[source]_[kind]"),
231
+ ),
232
+ ),
226
233
  ]
227
234
 
228
235
  @property
229
236
  def realkind(self):
230
- return 'sand'
237
+ return "sand"
231
238
 
232
239
 
233
240
  class ClayDB(ModelGeoResource):
@@ -235,26 +242,24 @@ class ClayDB(ModelGeoResource):
235
242
  Class of a tar-zip (.dir/.hdr) file containing surface clay database.
236
243
  A Genvkey can be given.
237
244
  """
245
+
238
246
  _footprint = [
239
247
  gvar,
240
248
  dict(
241
- info = 'Database for quantity of clay in soil',
242
- attr = dict(
243
- kind = dict(
244
- values = ['clay'],
245
- ),
246
- source = dict(
249
+ info="Database for quantity of clay in soil",
250
+ attr=dict(
251
+ kind=dict(
252
+ values=["clay"],
247
253
  ),
248
- gvar = dict(
249
- default = '[source]_[kind]'
250
- ),
251
- )
252
- )
254
+ source=dict(),
255
+ gvar=dict(default="[source]_[kind]"),
256
+ ),
257
+ ),
253
258
  ]
254
259
 
255
260
  @property
256
261
  def realkind(self):
257
- return 'clay'
262
+ return "clay"
258
263
 
259
264
 
260
265
  class OrographyDB(ModelGeoResource):
@@ -262,26 +267,24 @@ class OrographyDB(ModelGeoResource):
262
267
  Class of a tar-zip (.dir/.hdr) file containing orography database.
263
268
  A Genvkey can be given.
264
269
  """
270
+
265
271
  _footprint = [
266
272
  gvar,
267
273
  dict(
268
- info = 'Database for orography',
269
- attr = dict(
270
- kind = dict(
271
- values = ['orography'],
272
- ),
273
- source = dict(
274
- ),
275
- gvar = dict(
276
- default = '[source]_[kind]_[geometry::rnice_u]'
274
+ info="Database for orography",
275
+ attr=dict(
276
+ kind=dict(
277
+ values=["orography"],
277
278
  ),
278
- )
279
- )
279
+ source=dict(),
280
+ gvar=dict(default="[source]_[kind]_[geometry::rnice_u]"),
281
+ ),
282
+ ),
280
283
  ]
281
284
 
282
285
  @property
283
286
  def realkind(self):
284
- return 'orography'
287
+ return "orography"
285
288
 
286
289
 
287
290
  class SurfaceTypeDB(ModelGeoResource):
@@ -289,26 +292,24 @@ class SurfaceTypeDB(ModelGeoResource):
289
292
  Class of a tar-zip (.dir/.hdr) file containing surface type database.
290
293
  A Genvkey can be given.
291
294
  """
295
+
292
296
  _footprint = [
293
297
  gvar,
294
298
  dict(
295
- info = 'Database for surface type',
296
- attr = dict(
297
- kind = dict(
298
- values = ['surface_type'],
299
+ info="Database for surface type",
300
+ attr=dict(
301
+ kind=dict(
302
+ values=["surface_type"],
299
303
  ),
300
- source = dict(
301
- ),
302
- gvar = dict(
303
- default = '[source]_[kind]'
304
- ),
305
- )
306
- )
304
+ source=dict(),
305
+ gvar=dict(default="[source]_[kind]"),
306
+ ),
307
+ ),
307
308
  ]
308
309
 
309
310
  @property
310
311
  def realkind(self):
311
- return 'surface_type'
312
+ return "surface_type"
312
313
 
313
314
 
314
315
  class BathymetryDB(ModelGeoResource):
@@ -316,23 +317,21 @@ class BathymetryDB(ModelGeoResource):
316
317
  Class of file containing bathymetry database.
317
318
  A Genvkey can be given.
318
319
  """
320
+
319
321
  _footprint = [
320
322
  gvar,
321
323
  dict(
322
- info = 'Database for bathymetry',
323
- attr = dict(
324
- kind = dict(
325
- values = ['bathymetry'],
326
- ),
327
- source = dict(
328
- ),
329
- gvar = dict(
330
- default = '[source]_[kind]_[geometry::rnice_u]'
324
+ info="Database for bathymetry",
325
+ attr=dict(
326
+ kind=dict(
327
+ values=["bathymetry"],
331
328
  ),
332
- )
333
- )
329
+ source=dict(),
330
+ gvar=dict(default="[source]_[kind]_[geometry::rnice_u]"),
331
+ ),
332
+ ),
334
333
  ]
335
334
 
336
335
  @property
337
336
  def realkind(self):
338
- return 'bathymetry'
337
+ return "bathymetry"
@@ -6,4 +6,4 @@ The most important usage is done by :class:`FootprintBase` derivated objects.
6
6
  #: No automatic export
7
7
  __all__ = []
8
8
 
9
- __tocinfoline__ = 'nwp module where standard attributes are defined.'
9
+ __tocinfoline__ = "nwp module where standard attributes are defined."