Skip to content

Commit 9b02296

Browse files
Include min and max in schema json
1 parent a7c9741 commit 9b02296

File tree

2 files changed

+586
-206
lines changed

2 files changed

+586
-206
lines changed

src/geophires_x_schema_generator/__init__.py

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import os
33
import sys
44
from pathlib import Path
5-
from typing import Tuple
5+
from typing import Tuple, Any
66

77
# Ruff disabled because imports are order-dependent
88
# ruff: noqa: I001
@@ -91,12 +91,15 @@ def generate_json_schema(self) -> dict:
9191
param = input_params[param_name]
9292

9393
units_val = param['CurrentUnits'] if isinstance(param['CurrentUnits'], str) else None
94+
min_val, max_val = _get_min_and_max(param, default_val=None)
9495
properties[param_name] = {
9596
'description': param['ToolTipText'],
9697
'type': param['json_parameter_type'],
9798
'units': units_val,
9899
'category': param['parameter_category'],
99100
'default': param['DefaultValue'],
101+
'minimum': min_val,
102+
'maximum': max_val,
100103
}
101104

102105
if param['Required']:
@@ -146,27 +149,13 @@ def get_input_params_table(category_params, category_name) -> str:
146149
# if param['Required']:
147150
# TODO designate required params
148151

149-
def get_key(k):
150-
if k in param and str(param[k]) != '': # noqa
151-
return param[k] # noqa
152-
else:
153-
return ''
154-
155-
min_val = get_key('Min')
156-
max_val = get_key('Max')
157-
158-
if 'AllowableRange' in param:
159-
# TODO warn if min/max are defined and at odds with allowable range
160-
min_val = min(param['AllowableRange'])
161-
max_val = max(param['AllowableRange'])
162-
163-
# TODO include full AllowableRange in reference (or fully describe if possible using min/max/increment)
152+
min_val, max_val = _get_min_and_max(param)
164153

165154
input_rst += f"""\n * - {param['Name']}
166-
- {get_key('ToolTipText')}
167-
- {get_key('PreferredUnits')}
168-
- {get_key('json_parameter_type')}
169-
- {get_key('DefaultValue')}
155+
- {_get_key(param, 'ToolTipText')}
156+
- {_get_key(param, 'PreferredUnits')}
157+
- {_get_key(param, 'json_parameter_type')}
158+
- {_get_key(param, 'DefaultValue')}
170159
- {min_val}
171160
- {max_val}"""
172161

@@ -219,3 +208,22 @@ def get_key(k):
219208
- {get_key('json_parameter_type')}"""
220209

221210
return output_rst
211+
212+
213+
def _get_key(param: dict[str, Any], k: str, default_val='') -> Any:
214+
if k in param and str(param[k]) != '':
215+
return param[k]
216+
else:
217+
return default_val
218+
219+
220+
def _get_min_and_max(param: dict[str, Any], default_val='') -> Tuple[float, float]:
221+
min_val = _get_key(param, 'Min', default_val=default_val)
222+
max_val = _get_key(param, 'Max', default_val=default_val)
223+
224+
if 'AllowableRange' in param:
225+
# TODO warn if min/max are defined and at odds with allowable range
226+
min_val = min(param['AllowableRange'])
227+
max_val = max(param['AllowableRange'])
228+
229+
return (min_val, max_val)

0 commit comments

Comments
 (0)