def _build_resolver_params_from_meta()

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