Example #1
0
def test_stream_mets_from_disconnected_storage(mocker):
    custom_error_message = "Error connecting to the storage service"
    mock_amclient_details(
        mocker,
        side_effect=requests.exceptions.ConnectionError(custom_error_message))
    response = helpers.stream_mets_from_storage_service(
        transfer_name="mets_transfer",
        sip_uuid="11111111-1111-1111-1111-111111111111")
    assert response[CONTENT_TYPE] == CONTENT_JSON
    err = json.loads(response.content)
    assert err.get(SUCCESS) is False
    assert custom_error_message in err.get(MESSAGE)
    assert response.status_code == RESPONSE_503
Example #2
0
def test_stream_mets_from_storage_no_file(mocker, tmp_path):
    custom_error_message = "Rsync failed with status 23: sending incremental file list"
    mock_response = requests.Response()
    mock_response._content = custom_error_message
    mock_response.status_code = 500
    mock_amclient_details(mocker, return_value=mock_response)
    response = helpers.stream_mets_from_storage_service(
        transfer_name="mets_transfer",
        sip_uuid="22222222-2222-2222-2222-222222222222")
    assert response[CONTENT_TYPE] == CONTENT_JSON
    err = json.loads(response.content)
    assert err.get(SUCCESS) is False
    assert custom_error_message in err.get(MESSAGE)
    assert response.status_code == RESPONSE_500
Example #3
0
def aip_mets_file_download(request, uuid):
    """Download an individual AIP METS file."""
    es_client = es.get_client()
    try:
        aip = es.get_aip_data(es_client, uuid, fields="name")
    except IndexError:
        # TODO: 404 settings for the project do not display this to the user (only DEBUG).
        raise Http404(
            _("The AIP package containing the requested METS cannot be found")
        )
    transfer_name = aip["_source"]["name"]
    return helpers.stream_mets_from_storage_service(
        transfer_name=transfer_name, sip_uuid=uuid
    )
Example #4
0
def test_stream_mets_from_storage_success(mocker, mets_hdr, tmpdir):
    sip_uuid = "33333333-3333-3333-3333-333333333333"
    mets_file = "METS.{}.xml".format(sip_uuid)
    mock_response = requests.Response()
    mock_response.headers = {
        CONTENT_DISPOSITION: "attachment; filename={};".format(mets_file)
    }
    mock_response.status_code = RESPONSE_200
    mock_response.raw = mets_stream(tmpdir, mets_hdr)
    mock_amclient_details(mocker, return_value=mock_response)
    response = helpers.stream_mets_from_storage_service(
        transfer_name="mets_transfer", sip_uuid=sip_uuid)
    assert response.get(CONTENT_TYPE) == CONTENT_XML
    assert response.get(
        CONTENT_DISPOSITION) == "attachment; filename={};".format(mets_file)
    response_text = get_streaming_response(response.streaming_content)
    assert response_text == mets_hdr