From 6e8c602b7cce9244e66fb0056eeba5e6ab697e6a Mon Sep 17 00:00:00 2001 From: Alex Schofield Date: Tue, 18 Feb 2025 22:38:48 +0000 Subject: add untested read_s3 logic to CSVReader --- obfuscator/csv_reader.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'obfuscator/csv_reader.py') diff --git a/obfuscator/csv_reader.py b/obfuscator/csv_reader.py index 578b96b..c777998 100644 --- a/obfuscator/csv_reader.py +++ b/obfuscator/csv_reader.py @@ -1,5 +1,6 @@ import csv import io +import boto3 from typing import List, Dict from obfuscator.logger import get_logger from obfuscator.utils import get_s3_path @@ -48,10 +49,25 @@ class CSVReader: A method to read an S3 object containing CSV data and return the data as a list of dictionaries. """ - # Yet to be implemented. bucket, key = get_s3_path(path) logger.debug(f"Reading S3 CSV from: {bucket}/{key}") + client = boto3.client("s3") + + try: + # Attempt to read the S3 object and return the data as a list of dictionaries + response = client.get_object(Bucket=bucket, Key=key) + logger.info("S3 object read successfully") + # Read and decode the content + content = response["Body"].read().decode("utf-8") + # Even though the read_string method was only created for testing, + # it can be reused here to read and return the CSV data + return CSVReader.read_string(content) + # TODO: Add more specific exceptions to catch + except Exception as e: + logger.error(f"Error reading S3 object: {e}") + raise + @staticmethod def read_string(content: str) -> List[Dict[str, str]]: """ -- cgit v1.2.3