Skip to content

OpcUaServer objects fail serialization because of not JSON serializable LocalDatabaseDriver #5

Description

@simonfeiler-isc

Instances of OpcUaServer fail to serialize to JSON because of the LocalDatabaseDriver reference.

Example:

client = OpcUaServer(...)
print(client.to_json()) # fails

This fails because client.archive_database contains a runtime database driver instance, which is not JSON serializable.

The issue can be avoided by setting archive_database to None before serialization:

client = OpcUaServer(...)
client.archive_database = None # runtime driver, not serializable
print(client.to_json()) # works

The LocalDatabaseDriver should either be excluded from the JSON representation or handled with a custom serialization method.

Traceback (most recent call last):
File "C:\Users\feiler\gitlab\ISC Digital\OPC-UA\Clients\opensematic-lab-client\examples\connect_to_existing_server_as_client_extern_to_tsdb.py", line 134, in
print(client.to_json())
^^^^^^^^^^^^^^^^
File "C:\Users\feiler\gitlab\ISC Digital\OPC-UA\Clients\opensematic-lab-client.venv\Lib\site-packages\oold\model_init_.py", line 1177, in to_json
data = super().to_json(**kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\feiler\gitlab\ISC Digital\OPC-UA\Clients\opensematic-lab-client.venv\Lib\site-packages\oold\model\v1_init_.py", line 903, in to_json
self.json(
File "C:\Users\feiler\gitlab\ISC Digital\OPC-UA\Clients\opensematic-lab-client.venv\Lib\site-packages\oold\model\v1_init_.py", line 791, in json
BaseModel.json(
File "C:\Users\feiler\gitlab\ISC Digital\OPC-UA\Clients\opensematic-lab-client.venv\Lib\site-packages\pydantic\v1\main.py", line 527, in json
return self.config.json_dumps(data, default=encoder, **dumps_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\ProgramData\miniforge3\Lib\json_init_.py", line 238, in dumps
**kw).encode(obj)
^^^^^^^^^^^
File "C:\ProgramData\miniforge3\Lib\json\encoder.py", line 200, in encode
chunks = self.iterencode(o, _one_shot=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\ProgramData\miniforge3\Lib\json\encoder.py", line 258, in iterencode
return _iterencode(o, 0)
^^^^^^^^^^^^^^^^^
File "C:\Users\feiler\gitlab\ISC Digital\OPC-UA\Clients\opensematic-lab-client.venv\Lib\site-packages\pydantic\v1\json.py", line 90, in pydantic_encoder
raise TypeError(f"Object of type '{obj.class.name}' is not JSON serializable")
TypeError: Object of type 'LocalDatabaseDriver' is not JSON serializable

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions