-
Notifications
You must be signed in to change notification settings - Fork 12
/
resolve-references.py
31 lines (24 loc) · 1.14 KB
/
resolve-references.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
"""
Import namespaced type definitions into a base package.
Search all packages in SCHEMA_DIR for referenced definitions, put resolved base file in OUTPUT_DIR.
"""
import fire
import jadn
import os
SCHEMA_DIR = 'Schemas'
OUTPUT_DIR = 'Out'
def resolve(schema: str, reference_dir: str = SCHEMA_DIR, output_dir: str = OUTPUT_DIR, merge_ns: str = '') -> None:
print(f'Installed JADN version: {jadn.__version__}\n')
print(f'{reference_dir}/{schema} -> {output_dir}: merge={merge_ns}')
os.makedirs(output_dir, exist_ok=True)
filename, ext = os.path.splitext(schema)
with open(os.path.join(reference_dir, schema), encoding='utf-8') as fp:
sc = jadn.load_any(fp) # Load base package
sc2 = jadn.transform.resolve_imports(sc, reference_dir, (merge_ns,)) # Resolve referenced definitions
jadn.dump(sc2, os.path.join(output_dir, filename + '-resolved.jadn')) # Save resolved base package
print(f'{schema}:\n' + '\n'.join([f'{k:>14}: {v}' for k, v in jadn.analyze(jadn.check(sc2)).items()]))
if __name__ == '__main__':
try:
fire.Fire(resolve)
except FileNotFoundError as e:
print(e)