in analysis/webservice/algorithms/Tomogram.py [0:0]
def parse_args(self, compute_options):
ds, parameter = super().parse_args(compute_options)
def get_required_int(name):
val = compute_options.get_int_arg(name, None)
if val is None:
raise NexusProcessingException(reason=f'Missing required parameter: {name}', code=400)
return val
def get_required_point(name):
val = compute_options.get_argument(name, None)
if val is None:
raise NexusProcessingException(reason=f'Missing required parameter: {name}', code=400)
val = val.split(',')
if len(val) != 2:
raise NexusProcessingException(reason=f'Invalid parameter: {name}={val}. Incorrect number of fields, '
f'need 2', code=400)
try:
longitude = float(val[0])
except ValueError:
raise NexusProcessingException(reason='Longitude must be numeric', code=400)
try:
latitude = float(val[1])
except ValueError:
raise NexusProcessingException(reason='Latitude must be numeric', code=400)
if longitude < -180 or longitude > 180 or isnan(longitude):
raise NexusProcessingException(
reason='Longitude must be non-nan and between -180 and 180', code=400
)
if latitude < -90 or latitude > 90 or isnan(latitude):
raise NexusProcessingException(
reason='Latitude must be non-nan and between -90 and 90', code=400
)
return Point(longitude, latitude)
start_point = get_required_point('p1')
end_point = get_required_point('p2')
min_elevation = get_required_int('minElevation')
max_elevation = get_required_int('maxElevation')
if min_elevation >= max_elevation:
raise NexusProcessingException(
reason='Min elevation must be less than max elevation', code=400
)
horizontal_margin = compute_options.get_float_arg('horizontalMargin', 0.001)
ch_ds = compute_options.get_argument('canopy_ds', None)
g_ds = compute_options.get_argument('ground_ds', None)
if ch_ds is not None:
ch_ds = [v.strip() for v in ch_ds.split(',')]
else:
ch_ds = []
if len(ch_ds) > 2:
raise NexusProcessingException(
reason='Too many datasets provided for canopy_ds', code=400
)
if g_ds is not None:
g_ds = [v.strip() for v in g_ds.split(',')]
else:
g_ds = []
if len(g_ds) > 2:
raise NexusProcessingException(
reason='Too many datasets provided for ground_ds', code=400
)
output = compute_options.get_content_type().lower()
if output in ['csv', 'zip']:
raise NexusProcessingException(reason=f'Output {output} unsupported', code=400)
percentiles = compute_options.get_boolean_arg('elevPercentiles')
if percentiles and (ch_ds is None or g_ds is None):
raise NexusProcessingException(
code=400,
reason='\'elevPercentiles\' argument requires \'canopy_ds\' and \'ground_ds\' be set'
)
peaks = compute_options.get_boolean_arg('peaks') and not percentiles
cmap = mpl.colormaps.get(
compute_options.get_argument('cmap', 'viridis'),
mpl.colormaps['viridis']
)
return (ds, parameter, start_point, end_point, min_elevation, max_elevation,horizontal_margin, peaks, ch_ds,
g_ds, percentiles, cmap)