terminusdb / terminusdb/terminusdb-client-python

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

Aperta
#407 3 commenti 1 reazione 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

area: python client bug triage
Lingua principale
Python
Stelle
80
Fork
62
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

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

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia dal percorso Python schema.py utilizzato da tdbpy commit e traccia come Optional[List[str]] e Optional[Set[str]] vengono convertiti prima dell’inserimento. Riproduci il DatabaseError segnalato con l’esempio Organization, quindi verifica che entrambi gli attributi di raccolta opzionali siano accettati e aggiunti allo schema.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
backend-api-design
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
45/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.