terminusdb / terminusdb/terminusdb-client-python
Python schema doesn't accept optional attributes of types ```List``` and ```Set```
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 80
- Forks
- 62
- PR merge metrics
- No merged PRs in 30d
Description
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
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start in the Python schema.py path used by tdbpy commit and trace how Optional[List[str]] and Optional[Set[str]] are converted before insertion. Reproduce the reported DatabaseError with the Organization example, then verify that both optional collection attributes are accepted and added to the schema.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- backend-api-design
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100