':type parent: ServiceResource
:param parent: The resource instance to which this action is attached.
:type params: dict
:param params: Request parameters sent to the service.
:type response: dict
:param response: Low-level operation response.'

def __call__(self, parent, params, response):

    resource_name = self.resource_model.type
    json_definition = self.service_context.resource_json_definitions.get(resource_name)
    resource_cls = self.factory.load_from_definition(resource_name=resource_name, single_resource_json_definition=json_definition, service_context=self.service_context)
    raw_response = response
    search_response = None
    if self.search_path:
        search_response = jmespath.search(self.search_path, raw_response)
    identifiers = dict(build_identifiers(self.resource_model.identifiers, parent, params, raw_response))
    plural = [v for v in identifiers.values() if isinstance(v, list)]
    if plural:
        response = []
        for i in range(len(plural[0])):
            response_item = None
            if search_response:
                response_item = search_response[i]
            response.append(self.handle_response_item(resource_cls, parent, identifiers, response_item))
    elif all_not_none(identifiers.values()):
        response = self.handle_response_item(resource_cls, parent, identifiers, search_response)
    else:
        response = None
        if (self.operation_name is not None):
            response = build_empty_response(self.search_path, self.operation_name, self.service_context.service_model)
    return response
