Skip to content

Commit

Permalink
[sonic-config-engine][portconfig] Do not parse JSON as Python AST (#1…
Browse files Browse the repository at this point in the history
…0224)

#### Why I did it
To fix #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
  • Loading branch information
vboykox authored Mar 21, 2022
1 parent 42ab5b8 commit 24397ea
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 6 deletions.
21 changes: 15 additions & 6 deletions src/sonic-config-engine/portconfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,16 +45,25 @@
#
# 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
Expand Down
12 changes: 12 additions & 0 deletions src/sonic-config-engine/tests/sample_platform.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,16 @@
{
"chassis": {
"psus": [
{
"name": "PSU 1",
"temperature": false
},
{
"name": "PSU 2",
"temperature": false
}
]
},
"interfaces": {
"Ethernet0": {
"index": "1,1,1,1",
Expand Down

0 comments on commit 24397ea

Please sign in to comment.