From 0bdf0cb073c63d5ee83324ed099f65cc38805fbe Mon Sep 17 00:00:00 2001 From: Kenneth Kehl <@kkehl@flexion.us> Date: Fri, 4 Apr 2025 09:13:46 -0700 Subject: [PATCH 1/2] fix blank lines at end of csv --- app/s3_client/s3_csv_client.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/s3_client/s3_csv_client.py b/app/s3_client/s3_csv_client.py index 195ea3032..c17e5bed8 100644 --- a/app/s3_client/s3_csv_client.py +++ b/app/s3_client/s3_csv_client.py @@ -29,6 +29,10 @@ def get_csv_upload(service_id, upload_id): def s3upload(service_id, filedata): + # sometimes people upload files with hundreds of blank lines at the end + data = filedata["data"] + cleaned_data = "\n".join(line for line in data.splitlines() if line.strip()) + filedata["data"] = cleaned_data upload_id = str(uuid.uuid4()) bucket_name, file_location, access_key, secret_key, region = get_csv_location( From 0cf9abf5e8501d5fba999c3aa732e38dd028b47b Mon Sep 17 00:00:00 2001 From: Kenneth Kehl <@kkehl@flexion.us> Date: Fri, 4 Apr 2025 09:35:01 -0700 Subject: [PATCH 2/2] add test --- app/s3_client/s3_csv_client.py | 7 ++++++- tests/app/s3_client/test_s3_csv_client.py | 10 +++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/app/s3_client/s3_csv_client.py b/app/s3_client/s3_csv_client.py index c17e5bed8..4d8f33a07 100644 --- a/app/s3_client/s3_csv_client.py +++ b/app/s3_client/s3_csv_client.py @@ -28,12 +28,17 @@ def get_csv_upload(service_id, upload_id): return get_s3_object(*get_csv_location(service_id, upload_id)) -def s3upload(service_id, filedata): +def remove_blank_lines(filedata): # sometimes people upload files with hundreds of blank lines at the end data = filedata["data"] cleaned_data = "\n".join(line for line in data.splitlines() if line.strip()) filedata["data"] = cleaned_data + return filedata + +def s3upload(service_id, filedata): + + filedata = remove_blank_lines(filedata) upload_id = str(uuid.uuid4()) bucket_name, file_location, access_key, secret_key, region = get_csv_location( service_id, upload_id diff --git a/tests/app/s3_client/test_s3_csv_client.py b/tests/app/s3_client/test_s3_csv_client.py index dbf26ea47..2ea3c43db 100644 --- a/tests/app/s3_client/test_s3_csv_client.py +++ b/tests/app/s3_client/test_s3_csv_client.py @@ -1,6 +1,6 @@ from unittest.mock import Mock -from app.s3_client.s3_csv_client import set_metadata_on_csv_upload +from app.s3_client.s3_csv_client import remove_blank_lines, set_metadata_on_csv_upload def test_sets_metadata(client_request, mocker): @@ -21,3 +21,11 @@ def test_sets_metadata(client_request, mocker): MetadataDirective="REPLACE", ServerSideEncryption="AES256", ) + + +def test_removes_blank_lines(): + filedata = { + "data": "phone number\r\n15555555555\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n" + } + file_data = remove_blank_lines(filedata) + assert file_data == {"data": "phone number\n15555555555"}