def get_object_handler()

in function/python_3_9/src/handler/get_object_handler.py [0:0]


def get_object_handler(s3_client, request_context, user_request):
    """
    Handler for the GetObject Operation
    :param s3_client: s3 client
    :param request_context: GetObject request context
    :param user_request:  user request
    :return: WriteGetObjectResponse
    """
    # Validate user request and return error if invalid
    requests_validation = validator.validate_request(user_request)
    if not requests_validation.is_valid:
        return error.write_error_response(s3_client, request_context, requests.codes.bad_request,
                                        'InvalidRequest', requests_validation.error_msg)

    # Get the original object from Amazon S3
    s3_url = request_context["inputS3Url"]
    request_header = get_request_header(user_request["headers"])

    object_response = requests.get(s3_url, headers=request_header)

    # Check if the get original object request from S3 is successful
    if object_response.status_code != requests.codes.ok:
        # For 304 Not Modified, Error Message dont need to be send
        if object_response.status_code == requests.codes.not_modified:
            return s3_client.write_get_object_response(
                RequestRoute=request_context["outputRoute"],
                RequestToken=request_context["outputToken"],
                StatusCode=object_response.status_code,
            )
        return error.write_error_response_for_s3(s3_client,
                                                 request_context,
                                                 object_response)
    # Transform the object
    original_object = object_response.content

    transformed_whole_object = transform.transform_object(original_object)

    # Handle range or partNumber if present in the request
    partial_object_response = apply_range_or_part_number(transformed_whole_object, user_request)
    if partial_object_response.hasError:
        return error.write_error_response(s3_client, request_context, requests.codes.bad_request,
                                        'InvalidRequest', partial_object_response.error_msg)

    transformed_object = partial_object_response.object

    # Send the transformed object back to Amazon S3 Object Lambda
    transformed_object_checksum = checksum.get_checksum(transformed_object)
    return s3_client.write_get_object_response(RequestRoute=request_context["outputRoute"],
                                               RequestToken=request_context["outputToken"],
                                               Body=transformed_object,
                                               Metadata={
                                                   'body-checksum-algorithm': transformed_object_checksum.algorithm,
                                                   'body-checksum-digest': transformed_object_checksum.digest
                                               })