コード例 #1
0
def handle(event: dict, context: dict) -> Optional[dict]:
    s3_client = boto3.client('s3')
    download_token = event_parser.extract_from_headers(
        config.AUTHORIZATION_HEADER, event)
    logger.info(f'Extracted download_token from headers: {download_token}')
    identifier = exchange_repository.get_identifier_from_token(
        download_token=download_token)
    logger.info(f'Queried identifier from repository: {identifier}')
    key = file_repository.get_file(identifier)
    logger.info(f'Extracted file key from storage: {key}')

    if key:
        try:
            logger.info("Generating presigned url")
            response = s3_client.generate_presigned_url('get_object',
                                                        Params={
                                                            'Bucket':
                                                            BUCKET_NAME,
                                                            'Key': key
                                                        })
        except ClientError as e:
            logging.error(e)
            return generate_response("Internal Error",
                                     HTTPStatus.INTERNAL_SERVER_ERROR)
        return generate_response(response, HTTPStatus.OK)
    else:
        return generate_response("No file associated to this token",
                                 HTTPStatus.NOT_FOUND)
コード例 #2
0
    def test_get_file_should_return_none_if_identifier_has_no_file(
            self, mock_get_s3_client, get_s3_client):
        # Given
        mock_get_s3_client.return_value = get_s3_client

        # When
        actual_file = file_repository.get_file('non-existing-identifier')

        # Then
        assert actual_file is None
コード例 #3
0
    def test_get_file_should_return_the_exchange_file(self, mock_get_s3_client,
                                                      an_exchange,
                                                      get_s3_client):
        # Given
        mock_get_s3_client.return_value = get_s3_client
        get_s3_client.put_object(
            Bucket=BUCKET_NAME,
            Key=f'{an_exchange.identifier}/a_binary_content')

        # When
        actual_file = file_repository.get_file(an_exchange.identifier)

        # Then
        assert actual_file == f'{an_exchange.identifier}/a_binary_content'
コード例 #4
0
def _check_if_a_file_exists(identifier: str) -> bool:
    return True if file_repository.get_file(identifier) is not None else False