Substra / substra

Low-level Python library used to interact with a Substra network

Home Page:https://docs.substra.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Pydantic validation error handling in CLI

jmorel opened this issue · comments

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

Closing as stale