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