summaryrefslogtreecommitdiff
path: root/python/vyos/opmode.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/vyos/opmode.py')
-rw-r--r--python/vyos/opmode.py20
1 files changed, 16 insertions, 4 deletions
diff --git a/python/vyos/opmode.py b/python/vyos/opmode.py
index 5f9c2c1ce..2e896c8e6 100644
--- a/python/vyos/opmode.py
+++ b/python/vyos/opmode.py
@@ -16,6 +16,7 @@
import re
import sys
import typing
+from humps import decamelize
class Error(Exception):
@@ -101,6 +102,10 @@ def _get_arg_type(t):
return t
def _normalize_field_name(name):
+ # Convert the name to string if it is not
+ # (in some cases they may be numbers)
+ name = str(name)
+
# Replace all separators with underscores
name = re.sub(r'(\s|[\(\)\[\]\{\}\-\.\,:\"\'\`])+', '_', name)
@@ -120,12 +125,12 @@ def _normalize_field_name(name):
return name
-def _normalize_field_names(old_dict):
+def _normalize_dict_field_names(old_dict):
new_dict = {}
for key in old_dict:
new_key = _normalize_field_name(key)
- new_dict[new_key] = old_dict[key]
+ new_dict[new_key] = _normalize_field_names(old_dict[key])
# Sanity check
if len(old_dict) != len(new_dict):
@@ -133,6 +138,14 @@ def _normalize_field_names(old_dict):
else:
return new_dict
+def _normalize_field_names(value):
+ if isinstance(value, dict):
+ return _normalize_dict_field_names(value)
+ elif isinstance(value, list):
+ return list(map(lambda v: _normalize_field_names(v), value))
+ else:
+ return value
+
def run(module):
from argparse import ArgumentParser
@@ -188,8 +201,7 @@ def run(module):
if not args["raw"]:
return res
else:
- if not isinstance(res, dict):
- raise InternalError("'raw' output of 'show_*' command must be a dict")
+ res = decamelize(res)
res = _normalize_field_names(res)
from json import dumps
return dumps(res, indent=4)