mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Script for splitting schema into smaller sections
This commit is contained in:
parent
b214167f98
commit
ad219bf898
98
docs/exctract_schema.py
Normal file
98
docs/exctract_schema.py
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
"""Extract API schema and split into smaller subsections."""
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import os
|
||||||
|
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
OUTPUT_DIR = './docs/api/schema/'
|
||||||
|
|
||||||
|
# General path
|
||||||
|
GENERAL_PATH = 'general'
|
||||||
|
|
||||||
|
# List of special paths we want to split out
|
||||||
|
SPECIAL_PATHS = [
|
||||||
|
'auth',
|
||||||
|
'background-task',
|
||||||
|
'barcode',
|
||||||
|
'bom',
|
||||||
|
'build',
|
||||||
|
'company',
|
||||||
|
'label',
|
||||||
|
'order',
|
||||||
|
'part',
|
||||||
|
'plugins',
|
||||||
|
'report',
|
||||||
|
'settings',
|
||||||
|
'stock',
|
||||||
|
'user',
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def top_level_path(path: str) -> str:
|
||||||
|
"""Return the top level path of the input path."""
|
||||||
|
path = path.strip()
|
||||||
|
|
||||||
|
if path.startswith('/'):
|
||||||
|
path = path[1:]
|
||||||
|
|
||||||
|
if path.endswith('/'):
|
||||||
|
path = path[:-1]
|
||||||
|
|
||||||
|
path = path.strip()
|
||||||
|
|
||||||
|
key = path.split('/')[1]
|
||||||
|
|
||||||
|
if key in SPECIAL_PATHS:
|
||||||
|
return key
|
||||||
|
|
||||||
|
return GENERAL_PATH
|
||||||
|
|
||||||
|
|
||||||
|
def parse_api_file(filename: str):
|
||||||
|
"""Parse the input API file, and split into smaller sections.
|
||||||
|
|
||||||
|
The intent is to make the API schema easier to peruse on the documentation.
|
||||||
|
"""
|
||||||
|
with open(filename, 'r') as f:
|
||||||
|
data = yaml.safe_load(f)
|
||||||
|
|
||||||
|
paths = data['paths']
|
||||||
|
|
||||||
|
top_level_paths = {}
|
||||||
|
|
||||||
|
for path, methods in paths.items():
|
||||||
|
tlp = top_level_path(path)
|
||||||
|
|
||||||
|
if tlp not in top_level_paths:
|
||||||
|
top_level_paths[tlp] = {}
|
||||||
|
|
||||||
|
top_level_paths[tlp][path] = methods
|
||||||
|
|
||||||
|
# Generate output files
|
||||||
|
for key, value in top_level_paths.items():
|
||||||
|
output_file = os.path.join(os.path.dirname(__file__), OUTPUT_DIR, f'{key}.yml')
|
||||||
|
|
||||||
|
output = {}
|
||||||
|
|
||||||
|
output['paths'] = value
|
||||||
|
|
||||||
|
for k, v in data.items():
|
||||||
|
if k != 'paths':
|
||||||
|
output[k] = v
|
||||||
|
|
||||||
|
print(f'Writing schema file to {output_file}...')
|
||||||
|
|
||||||
|
output_file = os.path.abspath(output_file)
|
||||||
|
|
||||||
|
with open(output_file, 'w') as f:
|
||||||
|
yaml.dump(output, f)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
parser = argparse.ArgumentParser(description=__doc__)
|
||||||
|
parser.add_argument('input', help='Input API schema file (.yml)')
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
parse_api_file(args.input)
|
Loading…
Reference in New Issue
Block a user