Skip to content

Python schema doesn't accept optional attributes of types List and Set #407

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

Open
micgor32 opened this issue Jun 26, 2023 · 3 comments
Open
Labels
area: python client relevant to python client bug Something isn't working triage issue to be triage

Comments

@micgor32
Copy link

Describe the bug
The Python schema.py does not allow attributes to be the type of List or Set, when they are meant to be optional.

To Reproduce
When I try to commit the following code using tdbpy commit:

class Organization(DocumentTemplate):
    name: Optional[str]
    id: Optional[str]
    identifier: Optional[Identifier]
    additionalIdentifiers: Optional[Identifier]
    address: Optional[Address]
    contactPoint: Optional[ContactPoint]
    roles: Optional[List[str]]

I get the following error message:

Error logs

Traceback (most recent call last):
  File "/home/micgor32/.local/bin/tdbpy", line 8, in <module>
    sys.exit(tdbpy())
             ^^^^^^^
  File "/home/micgor32/.local/pipx/venvs/terminusdb-client/lib/python3.11/site-packages/click/core.py", line 1130, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/micgor32/.local/pipx/venvs/terminusdb-client/lib/python3.11/site-packages/click/core.py", line 1055, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "/home/micgor32/.local/pipx/venvs/terminusdb-client/lib/python3.11/site-packages/click/core.py", line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/micgor32/.local/pipx/venvs/terminusdb-client/lib/python3.11/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/micgor32/.local/pipx/venvs/terminusdb-client/lib/python3.11/site-packages/click/core.py", line 760, in invoke
    return __callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/micgor32/.local/pipx/venvs/terminusdb-client/lib/python3.11/site-packages/terminusdb_client/scripts/scripts.py", line 361, in commit
    schema_obj.commit(client, commit_msg=message, full_replace=True)
  File "/home/micgor32/.local/pipx/venvs/terminusdb-client/lib/python3.11/site-packages/terminusdb_client/schema/schema.py", line 676, in commit
    client.insert_document(
  File "/home/micgor32/.local/pipx/venvs/terminusdb-client/lib/python3.11/site-packages/terminusdb_client/client/Client.py", line 1248, in insert_document
    result = json.loads(_finish_response(result))
                        ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/micgor32/.local/pipx/venvs/terminusdb-client/lib/python3.11/site-packages/terminusdb_client/woql_utils.py", line 52, in _finish_response
    raise DatabaseError(request_response)
terminusdb_client.errors.DatabaseError: Type error for json{'@class':"xsd:string",'@type':"List"} which should be text
{
    "api:message": "Type error for json{'@class':\"xsd:string\",'@type':\"List\"} which should be text",
    "api:status": "api:failure",
    "system:witnesses": [
        {
            "@type": "vio:ViolationWithDatatypeObject",
            "vio:literal": "json{'@class':\"xsd:string\",'@type':\"List\"}",
            "vio:message": "Type error for json{'@class':\"xsd:string\",'@type':\"List\"} which should be text",
            "vio:type": "text"
        }
    ]
}

Same happens when roles: Optional[List[str]] is changed to roles: Optional[Set[str]].

Expected behavior
I would expect the changes to be accepted and added to the schema.

System information (please complete the following information):

  • OS: Docker
  • terminus-client-python 10.2.3
@micgor32 micgor32 added the bug Something isn't working label Jun 26, 2023
@github-actions github-actions bot added area: python client relevant to python client triage issue to be triage labels Jun 26, 2023
@GavinMendelGleason
Copy link
Member

I'll take a look at this now. The Set is always optional, so it should allow this, and for List it is never optional, so you probably need to use an Array if it is.

@GavinMendelGleason
Copy link
Member

This error needs to be more informative too.

@GavinMendelGleason
Copy link
Member

We can have a work around for this where Optional[List[...]] is converted to and from Array potentially. Not sure what the best behaviour is.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area: python client relevant to python client bug Something isn't working triage issue to be triage
Projects
None yet
Development

No branches or pull requests

2 participants