hub/venv/lib/python3.7/site-packages/trimesh/schemas.py

46 lines
1.3 KiB
Python

"""
schemas.py
-------------
Tools for dealing with schemas, particularly JSONschema
"""
import json
from .util import decode_text
def resolve(item, resolver):
"""
Given a JSON Schema containing `$ref` keys recursively
evaluate to find and replace referenced files with their
actual values using trimesh.resolvers.Resolver objects.
Parameters
---------------
item : any
JSON schema including `$ref` to other files
resolver : trimesh.visual.resolver.Resolver
Resolver to fetch referenced assets
Returns
----------
result : any
JSONSchema with references replaced
"""
if isinstance(item, list):
# run the resolver on every list item
return [resolve(i, resolver) for i in item]
elif isinstance(item, dict):
if '$ref' in item:
# if we have a reference to a file pop the key
# and update the dict with the reference in-place
raw = decode_text(resolver.get(item.pop('$ref')))
item.update(json.loads(raw))
# run the resolver on the dict again
resolve(item, resolver)
else:
# make sure all keys are evaluated
for i in item.values():
resolve(i, resolver)
return item