unwrap is optional but looks better.
def unwrap(value):
if isinstance(value, list) and len(value) == 2:
if isinstance(value[0], str) and value[0] in ("ShallowReactive", "Reactive"):
return value[1]
return value
def expand(value, data):
if isinstance(value, dict):
return {
key: expand(val, data)
for key, val in value.items()
}
if isinstance(value, list):
return unwrap([
expand(item, data)
for item in value
])
if isinstance(value, int):
if isinstance(data[value], (dict,list)):
return expand(data[value], data)
else:
return data[value]
return value