diff options
author | John Estabrook <jestabro@vyos.io> | 2022-10-09 08:46:14 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-09 08:46:14 -0500 |
commit | 72c97ec2cb868b6208621566678dd42791e8e5c7 (patch) | |
tree | 6b523604d51b4c16e0c8693353ec57650d163022 /src/services/api/graphql/utils/schema_from_op_mode.py | |
parent | bb4901773df9682b67081dda5baf0cb39c742d1e (diff) | |
parent | 76c9a376c7d4fbb46f8882a1ce42dd7a6c0fa85a (diff) | |
download | vyos-1x-72c97ec2cb868b6208621566678dd42791e8e5c7.tar.gz vyos-1x-72c97ec2cb868b6208621566678dd42791e8e5c7.zip |
Merge pull request #1573 from jestabro/gql-simplify
T4738: generate schema definitions for configsession functions and use single directive/resolver
Diffstat (limited to 'src/services/api/graphql/utils/schema_from_op_mode.py')
-rwxr-xr-x | src/services/api/graphql/utils/schema_from_op_mode.py | 30 |
1 files changed, 4 insertions, 26 deletions
diff --git a/src/services/api/graphql/utils/schema_from_op_mode.py b/src/services/api/graphql/utils/schema_from_op_mode.py index 379d15250..57d63628b 100755 --- a/src/services/api/graphql/utils/schema_from_op_mode.py +++ b/src/services/api/graphql/utils/schema_from_op_mode.py @@ -20,15 +20,16 @@ import os import json -import typing from inspect import signature, getmembers, isfunction, isclass, getmro from jinja2 import Template from vyos.defaults import directories if __package__ is None or __package__ == '': from util import load_as_module, is_op_mode_function_name, is_show_function_name + from util import snake_to_pascal_case, map_type_name else: from . util import load_as_module, is_op_mode_function_name, is_show_function_name + from . util import snake_to_pascal_case, map_type_name OP_MODE_PATH = directories['op_mode'] SCHEMA_PATH = directories['api_schema'] @@ -103,35 +104,12 @@ type {{ name }} implements OpModeError { {%- endfor %} """ -def _snake_to_pascal_case(name: str) -> str: - res = ''.join(map(str.title, name.split('_'))) - return res - -def _map_type_name(type_name: type, optional: bool = False) -> str: - if type_name == str: - return 'String!' if not optional else 'String = null' - if type_name == int: - return 'Int!' if not optional else 'Int = null' - if type_name == bool: - return 'Boolean!' if not optional else 'Boolean = false' - if typing.get_origin(type_name) == list: - if not optional: - return f'[{_map_type_name(typing.get_args(type_name)[0])}]!' - return f'[{_map_type_name(typing.get_args(type_name)[0])}]' - # typing.Optional is typing.Union[_, NoneType] - if (typing.get_origin(type_name) is typing.Union and - typing.get_args(type_name)[1] == type(None)): - return f'{_map_type_name(typing.get_args(type_name)[0], optional=True)}' - - # scalar 'Generic' is defined in schema.graphql - return 'Generic' - def create_schema(func_name: str, base_name: str, func: callable) -> str: sig = signature(func) field_dict = {} for k in sig.parameters: - field_dict[sig.parameters[k].name] = _map_type_name(sig.parameters[k].annotation) + field_dict[sig.parameters[k].name] = map_type_name(sig.parameters[k].annotation) # It is assumed that if one is generating a schema for a 'show_*' # function, that 'get_raw_data' is present and 'raw' is desired. @@ -142,7 +120,7 @@ def create_schema(func_name: str, base_name: str, func: callable) -> str: for k,v in field_dict.items(): schema_fields.append(k+': '+v) - schema_data['schema_name'] = _snake_to_pascal_case(func_name + '_' + base_name) + schema_data['schema_name'] = snake_to_pascal_case(func_name + '_' + base_name) schema_data['schema_fields'] = schema_fields if is_show_function_name(func_name): |