1
0
This repository has been archived on 2025-03-06. You can view files and clone it, but cannot push or open issues or pull requests.

40 lines
1.6 KiB
Python

import json, copy
######################## Methods to store program config in JSON ########
######################## Config can be incrementable, see mergeJSON #####
########################### JSON CONFIG & STUFF #########################
n_JSON_Indent = 4
s_AddKey = "ADD_KEY::" ## The prefix for keys to be added in new backend definitions
## The prefix itself is not added
## TODO: remove in lvalue
s_CommentKey = "///COMMENT" ## The key for comments in JSON config dictionaries
## Returns a merge of j2 into j1.
def mergeJSON( j1, j2 ):
jNew = None
if dict==type(j1) and dict==type(j2):
jNew = copy.deepcopy( j1, {} )
for key in j2:
if key in j1:
jNew[key] = mergeJSON( j1[key], j2[key] )
else:
assert key.startswith( s_AddKey ), "Adding key %s: does not start with the prefix %s, j1: %s" % (key, s_AddKey, j1.__str__())
jNew[key[len(s_AddKey):]] = j2[key]
elif list==type(j1) and list==type(j2):
jNew = []
for i in range( 0, len(j2) ): ## Can assign a shorter list this way
if i<len(j1):
jNew.append( mergeJSON( j1[i], j2[i] ) )
else:
jNew.append( j2[i] )
elif type(j1)==type(j2):
jNew = j2
else:
print( "\n\n ERROR: Could not merge JSON objects:" );
print( json.dumps( j1 ) )
print( "\n -- TO BE MERGED BY --\n" )
print( json.dumps( j2 ) )
sys.quit()
return jNew