|
from core.app.app_config.entities import AppConfig, VariableEntity
|
|
|
|
|
|
class BaseAppGenerator:
|
|
def _get_cleaned_inputs(self, user_inputs: dict, app_config: AppConfig):
|
|
if user_inputs is None:
|
|
user_inputs = {}
|
|
|
|
filtered_inputs = {}
|
|
|
|
|
|
variables = app_config.variables
|
|
for variable_config in variables:
|
|
variable = variable_config.variable
|
|
|
|
if (variable not in user_inputs
|
|
or user_inputs[variable] is None
|
|
or (isinstance(user_inputs[variable], str) and user_inputs[variable] == '')):
|
|
if variable_config.required:
|
|
raise ValueError(f"{variable} is required in input form")
|
|
else:
|
|
filtered_inputs[variable] = variable_config.default if variable_config.default is not None else ""
|
|
continue
|
|
|
|
value = user_inputs[variable]
|
|
|
|
if value is not None:
|
|
if variable_config.type != VariableEntity.Type.NUMBER and not isinstance(value, str):
|
|
raise ValueError(f"{variable} in input form must be a string")
|
|
elif variable_config.type == VariableEntity.Type.NUMBER and isinstance(value, str):
|
|
if '.' in value:
|
|
value = float(value)
|
|
else:
|
|
value = int(value)
|
|
|
|
if variable_config.type == VariableEntity.Type.SELECT:
|
|
options = variable_config.options if variable_config.options is not None else []
|
|
if value not in options:
|
|
raise ValueError(f"{variable} in input form must be one of the following: {options}")
|
|
elif variable_config.type in [VariableEntity.Type.TEXT_INPUT, VariableEntity.Type.PARAGRAPH]:
|
|
if variable_config.max_length is not None:
|
|
max_length = variable_config.max_length
|
|
if len(value) > max_length:
|
|
raise ValueError(f'{variable} in input form must be less than {max_length} characters')
|
|
|
|
if value and isinstance(value, str):
|
|
filtered_inputs[variable] = value.replace('\x00', '')
|
|
else:
|
|
filtered_inputs[variable] = value if value is not None else None
|
|
|
|
return filtered_inputs
|
|
|
|
|