|
| 1 | +from csv import DictWriter |
| 2 | +from io import TextIOWrapper |
| 3 | + |
| 4 | +import boto3 |
| 5 | +from smart_open import open |
| 6 | + |
| 7 | + |
| 8 | +s3 = boto3.client("s3") |
| 9 | + |
| 10 | + |
| 11 | +def upload_test(bucket: str, key: str): |
| 12 | + # with open(f"s3://{bucket}/{key}", "wb", transport_params={"client": s3}) as output_file: |
| 13 | + with open(key, "wb") as output_file: |
| 14 | + output_file.write(b"----------------------------641963206721457550558305\r\n") |
| 15 | + output_file.write(b'Content-Disposition: form-data; name="File"; filename="HPV_Vaccinations_v5_TESTING_20250716T15453800.csv"\r\n') |
| 16 | + output_file.write(b"Content-Type: text/csv\r\n") |
| 17 | + output_file.write(b"\r\n") |
| 18 | + dict_writer = DictWriter( |
| 19 | + TextIOWrapper(output_file, encoding="utf-8", newline="", write_through=True), |
| 20 | + fieldnames=["NHS_NUMBER", "PERSON_FORENAME", "PERSON_SURNAME", "PERSON_DOB", "PERSON_GENDER_CODE", "PERSON_POSTCODE", "DATE_AND_TIME", "SITE_CODE", "SITE_CODE_TYPE_URI", "UNIQUE_ID", "UNIQUE_ID_URI", "ACTION_FLAG", "PERFORMING_PROFESSIONAL_FORENAME", "PERFORMING_PROFESSIONAL_SURNAME", "RECORDED_DATE", "PRIMARY_SOURCE", "VACCINATION_PROCEDURE_CODE", "VACCINATION_PROCEDURE_TERM", "DOSE_SEQUENCE", "VACCINE_PRODUCT_CODE", "VACCINE_PRODUCT_TERM", "VACCINE_MANUFACTURER", "BATCH_NUMBER", "EXPIRY_DATE", "SITE_OF_VACCINATION_CODE", "SITE_OF_VACCINATION_TERM", "ROUTE_OF_VACCINATION_CODE", "ROUTE_OF_VACCINATION_TERM", "DOSE_AMOUNT", "DOSE_UNIT_CODE", "DOSE_UNIT_TERM", "INDICATION_CODE", "LOCATION_CODE", "LOCATION_CODE_TYPE_URI"], |
| 21 | + delimiter="|", |
| 22 | + ) |
| 23 | + dict_writer.writeheader() |
| 24 | + dict_writer.writerow({ |
| 25 | + "NHS_NUMBER": "9626382228", |
| 26 | + "PERSON_FORENAME": "Ashleigh", |
| 27 | + "PERSON_SURNAME": "Wells", |
| 28 | + "PERSON_DOB": "19970423", |
| 29 | + "PERSON_GENDER_CODE": "1", |
| 30 | + "PERSON_POSTCODE": "L6G 1AF", |
| 31 | + "DATE_AND_TIME": "20250710T140606", |
| 32 | + "SITE_CODE": "RJ1", |
| 33 | + "SITE_CODE_TYPE_URI": "https://fhir.nhs.uk/Id/ods-organization-code", |
| 34 | + "UNIQUE_ID": "c8cd1dbc-e7e4-4c3c-ae24-7303e43e2e0f", |
| 35 | + "UNIQUE_ID_URI": "https://www.ravs.england.nhs.uk/", |
| 36 | + "ACTION_FLAG": "NEW", |
| 37 | + "PERFORMING_PROFESSIONAL_FORENAME": "Rita", |
| 38 | + "PERFORMING_PROFESSIONAL_SURNAME": "Harding", |
| 39 | + "RECORDED_DATE": "2025-07-16T15:45:38+00:00", |
| 40 | + "PRIMARY_SOURCE": "TRUE", |
| 41 | + "VACCINATION_PROCEDURE_CODE": "956951000000104", |
| 42 | + "VACCINATION_PROCEDURE_TERM": "RSV vaccination in pregnancy (procedure)", |
| 43 | + "DOSE_SEQUENCE": "1", |
| 44 | + "VACCINE_PRODUCT_CODE": "42223111000001107", |
| 45 | + "VACCINE_PRODUCT_TERM": "Quadrivalent influenza vaccine (split virion, inactivated) suspension for injection 0.5ml pre-filled syringes (Sanofi Pasteur)", |
| 46 | + "VACCINE_MANUFACTURER": "Sanofi Pasteur", |
| 47 | + "BATCH_NUMBER": "BN92478105653", |
| 48 | + "EXPIRY_DATE": "20250721", |
| 49 | + "SITE_OF_VACCINATION_CODE": "368209003", |
| 50 | + "SITE_OF_VACCINATION_TERM": "Right arm", |
| 51 | + "ROUTE_OF_VACCINATION_CODE": "1210999013", |
| 52 | + "ROUTE_OF_VACCINATION_TERM": "Intradermal use", |
| 53 | + "DOSE_AMOUNT": "0.3", |
| 54 | + "DOSE_UNIT_CODE": "2622896019", |
| 55 | + "DOSE_UNIT_TERM": "Inhalation - unit of product usage", |
| 56 | + "INDICATION_CODE": "1037351000000105", |
| 57 | + "LOCATION_CODE": "RJC02", |
| 58 | + "LOCATION_CODE_TYPE_URI": "https://fhir.nhs.uk/Id/ods-organization-code", |
| 59 | + }) |
| 60 | + output_file.write(b"\r\n") |
| 61 | + output_file.write(b"----------------------------641963206721457550558305--\r\n") |
| 62 | + |
| 63 | + |
| 64 | +def upload_large_multipart_file(bucket: str, key: str) -> None: |
| 65 | + with open(f"s3://{bucket}/{key}", "wb", transport_params={"client": s3}) as f: |
| 66 | + # with open(key, "wb") as f: |
| 67 | + f.write(b"----------------------------641963206721457550558305\r\n") |
| 68 | + f.write(b'Content-Disposition: form-data; name="File"; filename="HPV_Vaccinations_v5_INVALID_20250721T15453800.csv"\r\n') |
| 69 | + f.write(b"Content-Type: text/csv\r\n") |
| 70 | + f.write(b"\r\n") |
| 71 | + f.write(b"NHS_NUMBER|PERSON_FORENAME|PERSON_SURNAME|PERSON_DOB|PERSON_GENDER_CODE|PERSON_POSTCODE|DATE_AND_TIME|SITE_CODE|SITE_CODE_TYPE_URI|UNIQUE_ID|UNIQUE_ID_URI|ACTION_FLAG|PERFORMING_PROFESSIONAL_FORENAME|PERFORMING_PROFESSIONAL_SURNAME|RECORDED_DATE|PRIMARY_SOURCE|VACCINATION_PROCEDURE_CODE|VACCINATION_PROCEDURE_TERM|DOSE_SEQUENCE|VACCINE_PRODUCT_CODE|VACCINE_PRODUCT_TERM|VACCINE_MANUFACTURER|BATCH_NUMBER|EXPIRY_DATE|SITE_OF_VACCINATION_CODE|SITE_OF_VACCINATION_TERM|ROUTE_OF_VACCINATION_CODE|ROUTE_OF_VACCINATION_TERM|DOSE_AMOUNT|DOSE_UNIT_CODE|DOSE_UNIT_TERM|INDICATION_CODE|LOCATION_CODE|LOCATION_CODE_TYPE_URI\n") |
| 72 | + for i in range(1000000): |
| 73 | + f.write(b'"9626382228"|"Ashleigh"|"Wells"|"19970423"|"1"|"L6G 1AF"|"20250710T140606"|"RJ1"|"https://fhir.nhs.uk/Id/ods-organization-code"|"c8cd1dbc-e7e4-4c3c-ae24-7303e43e2e0f"|"https://www.ravs.england.nhs.uk/"|"INVALID"|"Rita"|"Harding"|"2025-07-16T15:45:38+00:00"|"TRUE"|"956951000000104"|"RSV vaccination in pregnancy (procedure)"|"1"|"42223111000001107"|"Quadrivalent influenza vaccine (split virion, inactivated) suspension for injection 0.5ml pre-filled syringes (Sanofi Pasteur)"|"Sanofi Pasteur"|"BN92478105653"|"20250721"|"368209003"|"Right arm"|"1210999013"|"Intradermal use"|"0.3"|"2622896019"|"Inhalation - unit of product usage"|"1037351000000105"|"RJC02"|"https://fhir.nhs.uk/Id/ods-organization-code"\n') |
| 74 | + f.write(b"\r\n") |
| 75 | + f.write(b"----------------------------641963206721457550558305--\r\n") |
| 76 | + |
| 77 | + |
| 78 | +if __name__ == '__main__': |
| 79 | + upload_large_multipart_file("imms-dev-mesh", "jarvis-test-file.dat") |
| 80 | + # upload_test("test_files", "test_file_1.csv") |
0 commit comments