This commit is contained in:
cjw
2026-02-12 23:22:11 +08:00
parent 7b09eb3d89
commit 89660bba4e
5988 changed files with 2517516 additions and 0 deletions
@@ -0,0 +1,46 @@
"""
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