Comments (2)
Please consider this piece of code before the actual decode as a workaround:
acl = xe_native.Native.Ip.AccessList.Extended()
acl.name = "TEST_TEST"
native = xe_native.Native()
native.ip.access_list.extended.append(acl)
json = codec.encode(codec_provider, native)
from ydk-gen.
Built test case in C++ and reproduced the issue:
#include <iostream>
#include <spdlog/spdlog.h>
#include <ydk/codec_service.hpp>
#include <ydk/codec_provider.hpp>
#include <ydk_cisco_iosxe_demo/Cisco_IOS_XE_native.hpp>
using namespace ydk;
using namespace std;
string json_payload = R"(
{
"Cisco-IOS-XE-native:native":
{
"ip":
{
"access-list":
{
"Cisco-IOS-XE-acl:extended":
[
{
"name": "TEST_TEST",
"access-list-seq-rule":
[
{
"sequence": "10",
"ace-rule": {
"action": "permit",
"protocol": "tcp"
}
}
]
}
]
}
}
}
}
)";
int main(int argc, char* argv[])
{
auto logger = spdlog::stdout_color_mt("ydk");
logger->set_level(spdlog::level::debug);
CodecService codec{};
CodecServiceProvider xml_provider(EncodingFormat::XML);
CodecServiceProvider json_provider(EncodingFormat::JSON);
auto top = make_shared<cisco_iosxe_demo::Cisco_IOS_XE_native::Native>();
auto model = codec.decode(json_provider, json_payload, top);
auto xml = codec.encode(xml_provider, *model, true);
cout << json << endl;
return 0;
}
Found and fixed the bug. After the fix applied getting expected result:
[2023-09-07 08:23:32.134] [ydk] [info] Performing encode operation, resulting in <native xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-native">
<ip>
<access-list>
<extended xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-acl">
<name>TEST_TEST</name>
<access-list-seq-rule>
<sequence>10</sequence>
<ace-rule>
<action>permit</action>
<protocol>tcp</protocol>
</ace-rule>
</access-list-seq-rule>
</extended>
</access-list>
</ip>
</native>
Got the same result in Python API with original script (slightly modified):
from ydk.services import CodecService
from ydk.providers import CodecServiceProvider
import logging
import os
if __name__ == "__main__":
logger = logging.getLogger("ydk")
logger.setLevel(logging.INFO)
handler = logging.StreamHandler()
formatter = logging.Formatter("%(asctime)s - %(name)s - "
"%(levelname)s - %(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)
if os.path.exists('ydk.log'):
with open('ydk.log', 'w'):
pass
codec_provider = CodecServiceProvider(type='json')
codec = CodecService()
json = '''
{
"Cisco-IOS-XE-native:native":
{
"ip":
{
"access-list":
{
"Cisco-IOS-XE-acl:extended":
[
{
"name": "TEST_TEST",
"access-list-seq-rule":
[
{
"sequence": "10",
"ace-rule": {
"action": "permit",
"protocol": "tcp"
}
}
]
}
]
}
}
}
}
'''
decoded = codec.decode(codec_provider, json)
print(codec.encode(codec_provider, decoded))
Result:
/Users/ygorelik/venv3.10/bin/python3 /Users/ygorelik/ydk-gen/scripts/issues/1089/xe-native-access-list.py
{
"Cisco-IOS-XE-native:native": {
"ip": {
"access-list": {
"Cisco-IOS-XE-acl:extended": [
{
"name": "TEST_TEST",
"access-list-seq-rule": [
{
"sequence": "10",
"ace-rule": {
"action": "permit",
"protocol": "tcp"
}
}
]
}
]
}
}
}
}
Process finished with exit code 0
Hence closing the issue.
from ydk-gen.
Related Issues (20)
- CodecService fails to decode XML in python when referencing namespace prefix HOT 1
- CodecService fails to decode XML for Cisco XR Yang models when BGP and SNMP-IFMIB are present in the payload HOT 1
- ydk-py -- error: ‘get_capabilities’ is not a member of ‘ydk::path::Session’ HOT 1
- Segmentaion fault with pybind11::error_already_set HOT 2
- YDK C++ core library install fails on CentOS 8 stream HOT 2
- CiscoDevNet YDK C++ README needs Documentation & Support links updated
- Error in ydk-gen-master/test/dependencies_centos.sh version check
- Wrong RPC for reading entire list with CRUD Service HOT 1
- not_eq is a c++ keyword HOT 1
- libyang issue with arguments that are swapped HOT 1
- YDK not working 17.06.04 - Path is invalid: Cisco-IOS-XE-native:native HOT 1
- ydk 0.5.5 - Secondary mechanism failed more than one identity with name <identity-name> found HOT 1
- How to write a netconf server HOT 1
- config false deviation not working when leaf did not mention config true explicitly HOT 1
- ydk.io and ciscodevnet.github.io/ydk-py/ not working correctly HOT 6
- Installation crashes HOT 2
- Incorrect bundle model reference HOT 2
- Invalid keyword "+" - fails to use get_config HOT 1
- Incorrect loading of submodules into YANG repository HOT 10
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ydk-gen.