[sonic-config-engine][portconfig] Do not parse JSON as Python AST (#10224)
#### Why I did it To fix https://github.com/Azure/sonic-buildimage/issues/9643 #### How I did it Instead of ast.literal_eval added python2 compat code for json strings unicode -> str convertion. We need python2 compatibility since py2 sonic config engine (buster/sonic_config_engine-1.0-py2-none-any.whl target) is still included into the build (ENABLE_PY2_MODULES flag is set for buster). Once we abandon buster and python2, this compat and ast.literal_eval could be cleaned up all through the code base. #### How to verify it run steps from the linked issue
This commit is contained in:
parent
3402094fd0
commit
d2195aa722
@ -45,16 +45,25 @@ BRKOUT_PATTERN = r'(\d{1,3})x(\d{1,3}G)(\[\d{1,3}G\])?(\((\d{1,3})\))?'
|
||||
#
|
||||
# Helper Functions
|
||||
#
|
||||
|
||||
# For python2 compatibility
|
||||
def py2JsonStrHook(j):
|
||||
if isinstance(j, unicode):
|
||||
return j.encode('utf-8', 'backslashreplace')
|
||||
if isinstance(j, list):
|
||||
return [py2JsonStrHook(item) for item in j]
|
||||
if isinstance(j, dict):
|
||||
return {py2JsonStrHook(key): py2JsonStrHook(value)
|
||||
for key, value in j.iteritems()}
|
||||
return j
|
||||
|
||||
def readJson(filename):
|
||||
# Read 'platform.json' or 'hwsku.json' file
|
||||
try:
|
||||
with open(filename) as fp:
|
||||
try:
|
||||
data = json.load(fp)
|
||||
except json.JSONDecodeError:
|
||||
print("Json file does not exist")
|
||||
data_dict = ast.literal_eval(json.dumps(data))
|
||||
return data_dict
|
||||
if sys.version_info.major == 2:
|
||||
return json.load(fp, object_hook=py2JsonStrHook)
|
||||
return json.load(fp)
|
||||
except Exception as e:
|
||||
print("error occurred while parsing json: {}".format(sys.exc_info()[1]))
|
||||
return None
|
||||
|
@ -1,4 +1,16 @@
|
||||
{
|
||||
"chassis": {
|
||||
"psus": [
|
||||
{
|
||||
"name": "PSU 1",
|
||||
"temperature": false
|
||||
},
|
||||
{
|
||||
"name": "PSU 2",
|
||||
"temperature": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"interfaces": {
|
||||
"Ethernet0": {
|
||||
"index": "1,1,1,1",
|
||||
|
Loading…
Reference in New Issue
Block a user