in modular_api/commands_generator.py [0:0]
def extract(self, subgroup):
definitions = {}
for entity in dir(self._module):
click_command = getattr(self._module, entity)
if not isinstance(click_command, self._Command) or \
click_command.name == self._group_name or \
isinstance(click_command, Group):
continue
parameters = []
for param in click_command.params:
required = (param.callback and param.callback.__name__
in REQUIRED_PARAM_CALLBACKS) or param.required
param_help = param.help.replace('* ', '') if param.help else ''
param_meta = {
'name': param.human_readable_name,
'alias': self._get_alias(param.opts),
'required': required,
'description': param_help,
'type': self.click_to_our_types_mapping.get(
param.type.name, param.type.name)
}
if isinstance(param.type, (Choice)):
# TODO refactor asap
choices = param.type.choices
param_meta['description'] += f' {"|".join(choices)}'
if isinstance(param.type, (IntRange, FloatRange)):
# TODO update click and use get_metavar
param_meta['description'] += f' {param.type.min or ""}<=x<={param.type.max or ""}'
parameters.append(param_meta)
definitions.update({
click_command.name: {
'body': {
'description': click_command.help,
'parameters': parameters,
'handler': entity,
'parent': self._group_name
}
}
})
routes_and_secured_params = (
self._get_api_route_flag_and_secured_params(subgroup))
for name, body in definitions.items():
command_config = routes_and_secured_params.get(name, {})
files_parameters = command_config.pop('files_parameters', None)
if files_parameters:
command_params = body['body']['parameters']
for param in command_params:
param_name = param.get('name')
if param_name in files_parameters:
param.update(files_parameters[param_name])
body['body'].update(routes_and_secured_params.get(name, {}))
definitions_copy = copy.deepcopy(definitions)
for name, body in definitions.items():
command_config = routes_and_secured_params.get(name, {})
flag_parameters = command_config.get('flag_parameters')
if flag_parameters:
for idx, param in enumerate(body['body']['parameters']):
if param['name'] in flag_parameters:
definitions_copy[name]['body']['parameters'][idx][
'is_flag'] = True
definitions_copy[name]['body'].pop('flag_parameters', None)
is_command_hidden = command_config.pop('is_command_hidden', None)
if is_command_hidden:
definitions_copy.pop(name)
return definitions_copy