substra
substra copied to clipboard
Pydantic validation error handling in CLI
When using the CLI, validation errors raised by pydantic are not properly displayed. For example:
➜ substra add objective objective.json
Traceback (most recent call last):
File "/Users/jeremy/.pyenv/versions/substra/bin/substra", line 33, in <module>
sys.exit(load_entry_point('substra', 'console_scripts', 'substra')())
File "/Users/jeremy/.pyenv/versions/3.7.7/envs/substra/lib/python3.7/site-packages/click/core.py", line 829, in __call__
return self.main(*args, **kwargs)
File "/Users/jeremy/.pyenv/versions/3.7.7/envs/substra/lib/python3.7/site-packages/click/core.py", line 782, in main
rv = self.invoke(ctx)
File "/Users/jeremy/.pyenv/versions/3.7.7/envs/substra/lib/python3.7/site-packages/click/core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/Users/jeremy/.pyenv/versions/3.7.7/envs/substra/lib/python3.7/site-packages/click/core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/Users/jeremy/.pyenv/versions/3.7.7/envs/substra/lib/python3.7/site-packages/click/core.py", line 1066, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/Users/jeremy/.pyenv/versions/3.7.7/envs/substra/lib/python3.7/site-packages/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/Users/jeremy/.pyenv/versions/3.7.7/envs/substra/lib/python3.7/site-packages/click/decorators.py", line 21, in new_func
return f(get_current_context(), *args, **kwargs)
File "/Users/jeremy/substra/substra/substra/cli/interface.py", line 220, in wrapper
return fn(*args, **kwargs)
File "/Users/jeremy/substra/substra/substra/cli/interface.py", line 453, in add_objective
res = client.add_objective(data)
File "/Users/jeremy/substra/substra/substra/sdk/client.py", line 41, in wrapper
return f(*args, **kwargs)
File "/Users/jeremy/substra/substra/substra/sdk/client.py", line 288, in add_objective
spec = self._get_spec(schemas.ObjectiveSpec, data)
File "/Users/jeremy/substra/substra/substra/sdk/client.py", line 102, in _get_spec
return asset_type(**data)
File "pydantic/main.py", line 346, in pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: 4 validation errors for ObjectiveSpec
metrics_name
field required (type=value_error.missing)
metrics
field required (type=value_error.missing)
data_opener
extra fields not permitted (type=value_error.extra)
type
extra fields not permitted (type=value_error.extra)
It would be better to get
➜ substra add objective objective.json
Error: Could not add objective because of the following errors:
- metrics_name: field required
- metrics: field required
- data_opener: extra fields not permitted
- type: extra fields not permitted