arcalot/arcaflow-plugin-sdk-python

Clearer error message for unsupported types

Closed this issue · 0 comments

Concise and helpful error messages for unsupported types will be useful. For example, I tried using boolean type (before boolean was supported) and I get the following error message which is too long and doesn't exactly talk about the actual issue

Traceback (most recent call last):
  File "/usr/lib/python3.9/dataclasses.py", line 1033, in fields
    fields = getattr(class_or_instance, _FIELDS)
AttributeError: type object 'bool' has no attribute '__dataclass_fields__'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/sanantha/arcaflow_tets/venv/lib/python3.9/site-packages/arcaflow_plugin_sdk/plugin.py", line 214, in _resolve_class
    fields_list = fields(t)
  File "/usr/lib/python3.9/dataclasses.py", line 1035, in fields
    raise TypeError('must be called with a dataclass type or instance')
TypeError: must be called with a dataclass type or instance

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/sanantha/fix_krkn/krkn/kraken/plugins/vmware/test_vmware_plugin.py", line 13, in <module>
    from kraken.plugins.vmware import vmware_plugin 
  File "/home/sanantha/fix_krkn/krkn/kraken/plugins/__init__.py", line 8, in <module>
    import kraken.plugins.vmware.vmware_plugin as vmware_plugin
  File "/home/sanantha/fix_krkn/krkn/kraken/plugins/vmware/vmware_plugin.py", line 441, in <module>
    def node_start(cfg: NodeScenarioConfig) -> typing.Tuple[str, typing.Union[NodeScenarioSuccessOutput, NodeScenarioErrorOutput]]:
  File "/home/sanantha/arcaflow_tets/venv/lib/python3.9/site-packages/arcaflow_plugin_sdk/plugin.py", line 71, in step_decorator
    input=build_object_schema(input_param.annotation),
  File "/home/sanantha/arcaflow_tets/venv/lib/python3.9/site-packages/arcaflow_plugin_sdk/plugin.py", line 393, in build_object_schema
    r = _Resolver.resolve(t)
  File "/home/sanantha/arcaflow_tets/venv/lib/python3.9/site-packages/arcaflow_plugin_sdk/plugin.py", line 108, in resolve
    return cls._resolve_abstract_type(t, tuple(path))
  File "/home/sanantha/arcaflow_tets/venv/lib/python3.9/site-packages/arcaflow_plugin_sdk/plugin.py", line 112, in _resolve_abstract_type
    result = cls._resolve(t, path)
  File "/home/sanantha/arcaflow_tets/venv/lib/python3.9/site-packages/arcaflow_plugin_sdk/plugin.py", line 137, in _resolve
    return cls._resolve_type(t, path)
  File "/home/sanantha/arcaflow_tets/venv/lib/python3.9/site-packages/arcaflow_plugin_sdk/plugin.py", line 171, in _resolve_type
    return _Resolver._resolve_class(t, path)
  File "/home/sanantha/arcaflow_tets/venv/lib/python3.9/site-packages/arcaflow_plugin_sdk/plugin.py", line 224, in _resolve_class
    name, final_field = cls._resolve_dataclass_field(f, tuple(new_path))
  File "/home/sanantha/arcaflow_tets/venv/lib/python3.9/site-packages/arcaflow_plugin_sdk/plugin.py", line 184, in _resolve_dataclass_field
    underlying_type = cls._resolve_field(t.type, path)
  File "/home/sanantha/arcaflow_tets/venv/lib/python3.9/site-packages/arcaflow_plugin_sdk/plugin.py", line 127, in _resolve_field
    result = cls._resolve(t, path)
  File "/home/sanantha/arcaflow_tets/venv/lib/python3.9/site-packages/arcaflow_plugin_sdk/plugin.py", line 151, in _resolve
    return cls._resolve_union(t, path)
  File "/home/sanantha/arcaflow_tets/venv/lib/python3.9/site-packages/arcaflow_plugin_sdk/plugin.py", line 375, in _resolve_union
    result = cls._resolve_field(args[0], tuple(path))
  File "/home/sanantha/arcaflow_tets/venv/lib/python3.9/site-packages/arcaflow_plugin_sdk/plugin.py", line 127, in _resolve_field
    result = cls._resolve(t, path)
  File "/home/sanantha/arcaflow_tets/venv/lib/python3.9/site-packages/arcaflow_plugin_sdk/plugin.py", line 137, in _resolve
    return cls._resolve_type(t, path)
  File "/home/sanantha/arcaflow_tets/venv/lib/python3.9/site-packages/arcaflow_plugin_sdk/plugin.py", line 171, in _resolve_type
    return _Resolver._resolve_class(t, path)
  File "/home/sanantha/arcaflow_tets/venv/lib/python3.9/site-packages/arcaflow_plugin_sdk/plugin.py", line 216, in _resolve_class
    raise SchemaBuildException(
arcaflow_plugin_sdk.plugin.SchemaBuildException: Invalid schema definition for NodeScenarioConfig -> skip_openshift_checks: The passed class is not a dataclass. Please use the @dataclasses.dataclass decorator on your class.