in syndicate/core/resources/appsync_resource.py [0:0]
def _build_resolver_params_from_meta(resolver_meta, artifacts_path,
existing_functions=None):
existing_functions = existing_functions or []
type_name = resolver_meta.get('type_name')
field_name = resolver_meta.get('field_name')
try:
validate_params(type_name + ':' + field_name, resolver_meta,
RESOLVER_REQUIRED_PARAMS)
except AssertionError as e:
_LOG.warning(str(e))
_LOG.warning(f'Skipping resolver for type \'{type_name}\' '
f'and field \'{field_name}\'...')
return
_LOG.info(f'Altering resolver for type \'{type_name}\' and field '
f'\'{field_name}\'...')
resolver_params = {
'type_name': type_name,
'field_name': field_name,
}
kind = resolver_meta.get('kind', RESOLVER_DEFAULT_KIND)
resolver_params['kind'] = kind
if kind == RESOLVER_DEFAULT_KIND:
resolver_params['data_source_name'] = \
resolver_meta['data_source_name']
elif kind == 'PIPELINE':
_LOG.info("Trying to resolve functions IDs")
function_names = \
resolver_meta.get('pipeline_config', {}).get('functions', [])
function_ids = []
for func_name in function_names:
func_id = None
for func_info in existing_functions:
if func_name == func_info['name']:
func_id = func_info['functionId']
function_ids.append(func_id)
_LOG.debug(
f"Successfully resolved ID '{func_id}' for the "
f"function '{func_name}'")
break
if not func_id:
_LOG.warning(f"ID for the function '{func_name}' was "
f"not resolved")
resolver_params['pipeline_config'] = {
'functions': function_ids
}
if resolver_meta.get('runtime') in ('JS', 'APPSYNC_JS'):
runtime = {
'name': 'APPSYNC_JS',
'runtimeVersion': '1.0.0'
}
resolver_params['runtime'] = runtime
else:
runtime = None
if runtime:
code_path = build_path(artifacts_path,
resolver_meta.get('code_path'))
if not artifacts_path or not os.path.exists(code_path):
raise AssertionError(
f"Resolver code file for type '{type_name}' and field "
f"'{field_name}' not found.")
with open(code_path, 'r', encoding='utf-8') as file:
code = file.read()
resolver_params['code'] = code
else:
_LOG.debug('Runtime is not JS')
request_template_path = build_path(
artifacts_path,
resolver_meta.get('request_mapping_template_path'))
if not artifacts_path or not os.path.exists(request_template_path):
raise AssertionError(
f"Resolver request mapping template file for type "
f"'{type_name}' and field '{field_name}' not found.")
else:
with open(request_template_path, 'r',
encoding='utf-8') as file:
request_mapping_template = file.read()
response_template_path = build_path(
artifacts_path,
resolver_meta.get('response_mapping_template_path'))
if not artifacts_path or not os.path.exists(response_template_path):
raise AssertionError(
f"Resolver response mapping template file for type "
f"'{type_name}' and field '{field_name}' not found.")
else:
with open(response_template_path, 'r',
encoding='utf-8') as file:
response_mapping_template = file.read()
resolver_params['request_mapping_template'] = \
request_mapping_template
resolver_params['response_mapping_template'] = \
response_mapping_template
if max_batch_size := resolver_meta.get('max_batch_size'):
resolver_params['max_batch_size'] = max_batch_size
return resolver_params