Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Better output when working with lists and annotations #41

Open
jaredoconnell opened this issue Aug 19, 2022 · 0 comments
Open

Better output when working with lists and annotations #41

jaredoconnell opened this issue Aug 19, 2022 · 0 comments
Labels
bug Something isn't working

Comments

@jaredoconnell
Copy link
Contributor

Please describe what you would like to see in this project

The error's cause is unclear in this situation:

(venv) [jaredoconnell@fedora uperf]$ python3 uperf_plugin.py -s uperf --json-schema input > input/uperf.input.schema.json
Traceback (most recent call last):
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 271, in _resolve_class
    return schema.ObjectType(
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/schema.py", line 1139, in __init__
    attribute_annotations = cls_dict["__annotations__"]
KeyError: '__annotations__'

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

Traceback (most recent call last):
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 389, in _resolve_list_annotation
    cls._resolve_abstract_type(args[0], tuple(new_path))
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 117, in _resolve_abstract_type
    result = cls._resolve(t, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 162, in _resolve
    return cls._resolve_annotated(t, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 345, in _resolve_annotated
    underlying_t = cls._resolve(args[0], path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 160, in _resolve
    return cls._resolve_union(t, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 461, in _resolve_union
    f = cls._resolve_field(args[i], tuple(new_path))
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 132, in _resolve_field
    result = cls._resolve(t, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 162, in _resolve
    return cls._resolve_annotated(t, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 345, in _resolve_annotated
    underlying_t = cls._resolve(args[0], path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 142, in _resolve
    return cls._resolve_type(t, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 186, in _resolve_type
    return _Resolver._resolve_class(t, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 276, in _resolve_class
    raise SchemaBuildException(path, "Failed to create object type: {}".format(e.__str__())) from e
arcaflow_plugin_sdk.plugin.SchemaBuildException: Invalid schema definition for UPerfParams -> profile -> groups -> items -> transactions -> items -> flow_ops -> items -> typing.Annotated -> typing.Union -> 0 -> typing.Annotated: Failed to create object type: '__annotations__'

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

Traceback (most recent call last):
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 389, in _resolve_list_annotation
    cls._resolve_abstract_type(args[0], tuple(new_path))
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 117, in _resolve_abstract_type
    result = cls._resolve(t, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 142, in _resolve
    return cls._resolve_type(t, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 186, in _resolve_type
    return _Resolver._resolve_class(t, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 267, in _resolve_class
    name, final_field = cls._resolve_dataclass_field(f, tuple(new_path))
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 199, in _resolve_dataclass_field
    underlying_type = cls._resolve_field(t.type, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 132, in _resolve_field
    result = cls._resolve(t, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 156, in _resolve
    return cls._resolve_list_annotation(t, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 392, in _resolve_list_annotation
    raise SchemaBuildException(path, "Failed to create list type") from e
arcaflow_plugin_sdk.plugin.SchemaBuildException: Invalid schema definition for UPerfParams -> profile -> groups -> items -> transactions -> items -> flow_ops: Failed to create list type

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

Traceback (most recent call last):
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 389, in _resolve_list_annotation
    cls._resolve_abstract_type(args[0], tuple(new_path))
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 117, in _resolve_abstract_type
    result = cls._resolve(t, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 142, in _resolve
    return cls._resolve_type(t, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 186, in _resolve_type
    return _Resolver._resolve_class(t, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 267, in _resolve_class
    name, final_field = cls._resolve_dataclass_field(f, tuple(new_path))
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 199, in _resolve_dataclass_field
    underlying_type = cls._resolve_field(t.type, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 132, in _resolve_field
    result = cls._resolve(t, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 156, in _resolve
    return cls._resolve_list_annotation(t, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 392, in _resolve_list_annotation
    raise SchemaBuildException(path, "Failed to create list type") from e
arcaflow_plugin_sdk.plugin.SchemaBuildException: Invalid schema definition for UPerfParams -> profile -> groups -> items -> transactions: Failed to create list type

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

Traceback (most recent call last):
  File "/home/jaredoconnell/Documents/projects/arcalot/arcaflow-plugins/python/uperf/uperf_plugin.py", line 300, in <module>
    def run_uperf(params: UPerfParams) -> typing.Tuple[str, typing.Union[UPerfResults, UPerfError]]:
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 76, in step_decorator
    input=build_object_schema(input_param.annotation, True),
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 525, in build_object_schema
    r = _Resolver.resolve(t)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 113, in resolve
    return cls._resolve_abstract_type(t, tuple(path))
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 117, in _resolve_abstract_type
    result = cls._resolve(t, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 142, in _resolve
    return cls._resolve_type(t, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 186, in _resolve_type
    return _Resolver._resolve_class(t, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 267, in _resolve_class
    name, final_field = cls._resolve_dataclass_field(f, tuple(new_path))
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 199, in _resolve_dataclass_field
    underlying_type = cls._resolve_field(t.type, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 132, in _resolve_field
    result = cls._resolve(t, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 142, in _resolve
    return cls._resolve_type(t, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 186, in _resolve_type
    return _Resolver._resolve_class(t, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 267, in _resolve_class
    name, final_field = cls._resolve_dataclass_field(f, tuple(new_path))
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 199, in _resolve_dataclass_field
    underlying_type = cls._resolve_field(t.type, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 132, in _resolve_field
    result = cls._resolve(t, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 156, in _resolve
    return cls._resolve_list_annotation(t, path)
  File "/home/jaredoconnell/Documents/projects/arcalot/arcalot-uperf/venv/lib64/python3.10/site-packages/arcaflow_plugin_sdk/plugin.py", line 392, in _resolve_list_annotation
    raise SchemaBuildException(path, "Failed to create list type") from e
arcaflow_plugin_sdk.plugin.SchemaBuildException: Invalid schema definition for UPerfParams -> profile -> groups: Failed to create list type

Relevant parts of the code:

@dataclass
class ProfileTransaction():
    flow_ops: typing.List[
        typing.Annotated[
            typing.Union[
                typing.Annotated[ProfileFlowOpConnect, annotations.discriminator_value("connect")],
                typing.Annotated[ProfileFlowOpAccept,  annotations.discriminator_value("accept")],
                typing.Annotated[ProfileFlowOpDisconnect, annotations.discriminator_value("disconnect")],
                typing.Annotated[ProfileFlowOpRead, annotations.discriminator_value("read")],
                typing.Annotated[ProfileFlowOpWrite, annotations.discriminator_value("write")],
                typing.Annotated[ProfileFlowOpRecv, annotations.discriminator_value("recv")],
                typing.Annotated[ProfileFlowOpSendto, annotations.discriminator_value("sendto")],
                typing.Annotated[ProfileFlowOpSendFile, annotations.discriminator_value("sendfile")],
                typing.Annotated[ProfileFlowOpSendFilev, annotations.discriminator_value("sendfilev")],
                typing.Annotated[ProfileFlowOpNOP, annotations.discriminator_value("NOP")],
                typing.Annotated[ProfileFlowOpThink, annotations.discriminator_value("think")]
            ],
            annotations.discriminator("flowop")
        ]
    ]
    iterations: typing.Optional[int]
    duration: typing.Optional[str] # TODO: Switch to the new time unit once it's added
    rate: typing.Optional[int] # Unit: Default uperf unit

@dataclass
class ProfileGroup():
    transactions: typing.List[ProfileTransaction]
    nthreads: int

@dataclass
class Profile():
    name: str
    groups: typing.List[ProfileGroup]

@dataclass
class UPerfParams:
    """
    This is the data structure for the input parameters of the step defined below.
    """
    server_addr: str
    profile: Profile
    protocol: IProtocol = IProtocol.TCP
    run_duration_ms: int = 5000

It's possible that the profile flow op values caused it, but I don't want to include too much.

@jaredoconnell jaredoconnell added the enhancement New feature or request label Aug 19, 2022
@ghost ghost added bug Something isn't working and removed enhancement New feature or request labels Aug 21, 2022
@dustinblack dustinblack moved this to Backlog in Arcaflow Apr 4, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
No open projects
Status: Backlog
Development

No branches or pull requests

1 participant