in syndicate/core/generators/lambda_function.py [0:0]
def _generate_java_lambdas(**kwargs):
from click import confirm as click_confirm
project_path = kwargs.get(PROJECT_PATH_PARAM)
project_state = kwargs.get(PROJECT_STATE_PARAM)
project_name = project_state.name
lambda_names = kwargs.get(LAMBDA_NAMES_PARAM, [])
tags = kwargs.get(TAGS_PARAM)
generated_lambdas = []
_generate_java_project_hierarchy(project_name=project_name,
full_project_path=project_path)
java_package_name = _generate_java_package_name(project_name)
java_package_as_path = java_package_name.replace('.', '/')
pom_file_path = os.path.join(project_path, FILE_POM)
pom_xml_content = _read_content_from_file(pom_file_path)
pom_xml_content = pom_xml_content.replace(
'<!--packages to scan-->',
f'<package>{java_package_name}</package>')
_write_content_to_file(pom_file_path, pom_xml_content)
full_package_path = Path(project_path, SRC_MAIN_JAVA, java_package_as_path)
for lambda_name in lambda_names:
if not os.path.exists(full_package_path):
_mkdir(full_package_path, exist_ok=True)
lambda_class_name = _get_parts_split_by_chars(to_split=lambda_name,
chars=['-', '_']).title()
lambda_class_name = lambda_class_name.replace(' ', '')
lambda_role_name = LAMBDA_ROLE_NAME_PATTERN.format(lambda_name)
lambda_tags_import, lambda_tags = _resolve_java_tags(tags)
java_handler_content = \
(JAVA_LAMBDA_HANDLER_CLASS
.replace('{java_package_name}', java_package_name)
.replace('{lambda_name}', lambda_name)
.replace('{lambda_class_name}', lambda_class_name)
.replace('{lambda_role_name}', lambda_role_name)
.replace('{tags_import}', lambda_tags_import)
.replace('{tags}', lambda_tags))
java_handler_file_name = os.path.join(
project_path, SRC_MAIN_JAVA, java_package_as_path,
f'{lambda_class_name}.java')
if Path(str(java_handler_file_name)).is_file():
if not click_confirm(
f'\nLambda {lambda_name} already exists.\nOverride '
f'the Lambda function?'):
USER_LOG.info(CANCEL_MESSAGE.format(lambda_name))
continue
_write_content_to_file(
java_handler_file_name,
java_handler_content
)
# add role to deployment_resource.json
dep_res_path = os.path.join(project_path,
FILE_DEPLOYMENT_RESOURCES)
if not Path(dep_res_path).is_file():
_LOG.warning(
'The project root \'deployment_resources.json\' file is '
'absent. Creating...'
)
_touch(dep_res_path)
deployment_resources = {}
else:
deployment_resources = json.loads(_read_content_from_file(
dep_res_path
))
deployment_resources.update(_generate_lambda_role_config(
lambda_role_name, tags, stringify=False))
_write_content_to_file(dep_res_path,
json.dumps(deployment_resources, indent=2))
project_state.add_lambda(lambda_name=lambda_name, runtime=RUNTIME_JAVA)
_LOG.info(f'Lambda {lambda_name} created')
generated_lambdas.append(lambda_name)
return generated_lambdas