Skip to content

CodecService fails to decode XML in python when referencing namespace prefix  #1071

@ldacol

Description

@ldacol

Issue tracker is ONLY used for reporting bugs. Please use the YDK Community for any support issues.

Expected Behavior

Current Behavior

CodecService.decode fails to decode XML code in python when using idx BGP prefix in the names space

Steps to Reproduce

Attempt to decode below XML code via CodecService

<data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">
  <network-instances xmlns="http://openconfig.net/yang/network-instance">
   <network-instance>
    <name>default</name>
    <protocols>
     <protocol>
      <identifier xmlns:idx="http://openconfig.net/yang/policy-types">idx:BGP</identifier>
      <name>default</name>
      <config>
       <identifier xmlns:idx="http://openconfig.net/yang/policy-types">idx:BGP</identifier>
       <name>default</name>
      </config>
     </protocol>
    </protocols>
    <config>
     <name>default</name>
    </config>
   </network-instance>
  </network-instances>
</data> 

Your Script

CODEC = CodecService()

JSON_PROVIDER_CISCO_IOSXR_762 = CodecServiceProvider(type='json')
XML_PROVIDER_CISCO_IOSXR_762 = CodecServiceProvider(type='xml')
JSON_PROVIDER_CISCO_IOSXR_762.initialize('iosxr-762',
    '/Users/ldacol/ydk_vne/lib/python3.10/site-packages/ydk/models/cisco_ios_xr_762/_yang')
XML_PROVIDER_CISCO_IOSXR_762.initialize('iosxr-762',
    '/Users/ldacol/ydk_vne/lib/python3.10/site-packages/ydk/models/cisco_ios_xr_762/_yang')

JSON_PROVIDER = JSON_PROVIDER_CISCO_IOSXR_762
XML_PROVIDER = XML_PROVIDER_CISCO_IOSXR_762


    with open(xml_file, "rb") as f:
        config_xml = f.read()
    root = etree.fromstring(config_xml) 

    for child in root:
        decoded_xml = CODEC.decode(XML_PROVIDER, etree.tostring(child))
        yang_json = CODEC.encode(JSON_PROVIDER, decoded_xml)

Logs

Enable logging and post the logs below

Traceback (most recent call last):
  File "/Users/ldacol/ydk_vne/lib/python3.10/site-packages/ydk/errors/error_handler.py", line 50, in handle_runtime_error
    yield
  File "/Users/ldacol/ydk_vne/lib/python3.10/site-packages/ydk/services/codec_service.py", line 122, in _encode
    data_node = _get_data_node_from_entity(entity, root_schema)
  File "/Users/ldacol/ydk_vne/lib/python3.10/site-packages/ydk/types/py_types.py", line 231, in has_operation
    for v in value:
  File "/Users/ldacol/ydk_vne/lib/python3.10/site-packages/ydk/types/py_types.py", line 683, in __iter__
    return iter(self.entities())
  File "/Users/ldacol/ydk_vne/lib/python3.10/site-packages/ydk/types/py_types.py", line 781, in entities
    self._flush_cache()
  File "/Users/ldacol/ydk_vne/lib/python3.10/site-packages/ydk/types/py_types.py", line 753, in _flush_cache
    self._entity_map[self._key(entity)] = entity
TypeError: unhashable type: 'BGP'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/ldacol/Code/GNSA/cisco_convert_versions_xr.py", line 237, in <module>
    yang_xml_to_json(ARGS['xml_file'], JSON_PROVIDER, XML_PROVIDER)
  File "/Users/ldacol/Code/GNSA/cisco_convert_versions_xr.py", line 223, in yang_xml_to_json
    yang_json = CODEC.encode(JSON_PROVIDER, decoded_xml)
  File "/Users/ldacol/ydk_vne/lib/python3.10/site-packages/ydk/errors/error_handler.py", line 99, in helper
    return func(self, provider, entity, *args, **kwargs)
  File "/Users/ldacol/ydk_vne/lib/python3.10/site-packages/ydk/services/codec_service.py", line 92, in encode
    return self._encode(provider, entity_holder, pretty, subtree)
  File "/Users/ldacol/ydk_vne/lib/python3.10/site-packages/ydk/services/codec_service.py", line 121, in _encode
    with _handle_error():
  File "/usr/local/Cellar/python@3.10/3.10.8/Frameworks/Python.framework/Versions/3.10/lib/python3.10/contextlib.py", line 153, in __exit__
    self.gen.throw(typ, value, traceback)
  File "/Users/ldacol/ydk_vne/lib/python3.10/site-packages/ydk/errors/error_handler.py", line 69, in handle_runtime_error
    raise _exc
ydk.errors.YServiceError:  'BGP'

System Information

MacOS 12.6.1
Python 3.10.8

ydk @ file:///Users/ldacol/Code/GNSA/ydk-gen/gen-api/python/ydk/dist/ydk-0.8.6.3.tar.gz
ydk-models-cisco-ios-xe-1651 @ file:///Users/ldacol/Code/GNSA/ydk-gen/gen-api/python/cisco_ios_xe_1651-bundle/dist/ydk-models-cisco-ios-xe-1651-16.5.1.tar.gz
ydk-models-cisco-ios-xr-762 @ file:///Users/ldacol/Code/GNSA/ydk-gen/gen-api/python/cisco_ios_xr_762-bundle/dist/ydk-models-cisco-ios-xr-762-7.6.2.tar.gz
ydk-models-ietf==0.1.6
ydk-models-juniper-junos-18-4R3 @ file:///Users/ldacol/Code/GNSA/ydk-gen/gen-api/python/juniper_junos_18_4R3-bundle/dist/ydk-models-juniper-junos-18-4R3-18.4.post3.tar.gz
ydk-models-juniper-qfx-20-2R1 @ file:///Users/ldacol/Code/GNSA/ydk-gen/gen-api/python/juniper_qfx_20_2R1-bundle/dist/ydk-models-juniper-qfx-20-2R1-20.2.post1.tar.gz

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions