opcua-asyncio
opcua-asyncio copied to clipboard
issue: Custom Structures fail with import_xml
Describe the bug
If user creates custom structures with structure104 and one of fields has dimensions, than it works as expected. However, if one exports XML and starts a new server that imports that custom structure, client cannot write lists and has following error:
File "/home/ukrman/.pyenv/versions/3.9.5/envs/optipal/lib/python3.9/site-packages/asyncua/ua/ua_binary.py", line 288, in list_to_binary
pack = [to_binary(uatype, el) for el in val]
File "/home/ukrman/.pyenv/versions/3.9.5/envs/optipal/lib/python3.9/site-packages/asyncua/ua/ua_binary.py", line 288, in <listcomp>
pack = [to_binary(uatype, el) for el in val]
File "/home/ukrman/.pyenv/versions/3.9.5/envs/optipal/lib/python3.9/site-packages/asyncua/ua/ua_binary.py", line 277, in to_binary
return struct_to_binary(val)
File "/home/ukrman/.pyenv/versions/3.9.5/envs/optipal/lib/python3.9/site-packages/asyncua/ua/ua_binary.py", line 253, in struct_to_binary
packet.append(to_binary(uatype, val))
File "/home/ukrman/.pyenv/versions/3.9.5/envs/optipal/lib/python3.9/site-packages/asyncua/ua/ua_binary.py", line 271, in to_binary
return pack_uatype(vtype, val)
File "/home/ukrman/.pyenv/versions/3.9.5/envs/optipal/lib/python3.9/site-packages/asyncua/ua/ua_binary.py", line 177, in pack_uatype
return extensionobject_to_binary(value)
File "/home/ukrman/.pyenv/versions/3.9.5/envs/optipal/lib/python3.9/site-packages/asyncua/ua/ua_binary.py", line 457, in extensionobject_to_binary
body = struct_to_binary(obj)
File "/home/ukrman/.pyenv/versions/3.9.5/envs/optipal/lib/python3.9/site-packages/asyncua/ua/ua_binary.py", line 253, in struct_to_binary
packet.append(to_binary(uatype, val))
File "/home/ukrman/.pyenv/versions/3.9.5/envs/optipal/lib/python3.9/site-packages/asyncua/ua/ua_binary.py", line 271, in to_binary
return pack_uatype(vtype, val)
File "/home/ukrman/.pyenv/versions/3.9.5/envs/optipal/lib/python3.9/site-packages/asyncua/ua/ua_binary.py", line 181, in pack_uatype
return variant_to_binary(value)
File "/home/ukrman/.pyenv/versions/3.9.5/envs/optipal/lib/python3.9/site-packages/asyncua/ua/ua_binary.py", line 372, in variant_to_binary
b.append(pack_uatype(var.VariantType, var.Value))
File "/home/ukrman/.pyenv/versions/3.9.5/envs/optipal/lib/python3.9/site-packages/asyncua/ua/ua_binary.py", line 177, in pack_uatype
return extensionobject_to_binary(value)
File "/home/ukrman/.pyenv/versions/3.9.5/envs/optipal/lib/python3.9/site-packages/asyncua/ua/ua_binary.py", line 457, in extensionobject_to_binary
body = struct_to_binary(obj)
File "/home/ukrman/.pyenv/versions/3.9.5/envs/optipal/lib/python3.9/site-packages/asyncua/ua/ua_binary.py", line 253, in struct_to_binary
packet.append(to_binary(uatype, val))
File "/home/ukrman/.pyenv/versions/3.9.5/envs/optipal/lib/python3.9/site-packages/asyncua/ua/ua_binary.py", line 264, in to_binary
return getattr(Primitives, uatype.__name__).pack(val)
File "/home/ukrman/.pyenv/versions/3.9.5/envs/optipal/lib/python3.9/site-packages/asyncua/ua/ua_binary.py", line 124, in pack
return struct.pack(self.format, data)
struct.error: required argument is not an integer
Interestingly enough, on a server side this error happens:
WARNING:__name__:ua_binary.py > _Primitive1 > pack_array > data: 1 is not a instance of "list"!
To Reproduce
Use these files: https://gist.github.com/kozachynskyi/705504c9636788045c775cf037639866
- Start server_export.py. Let it run, connect with client_issue.py. Everything works
- Start server_import.py. Let it run, connect with client_issue.py. Fail
Version
Python-Version: 3.9.5
opcua-asyncio Version 0.9.90 (e.g. master branch, 0.9):
Proposed change https://github.com/FreeOpcUa/opcua-asyncio/pull/775