diff --git a/lib_afc_s3storage/s3storage.py b/lib_afc_s3storage/s3storage.py index 09092cd..69174fe 100755 --- a/lib_afc_s3storage/s3storage.py +++ b/lib_afc_s3storage/s3storage.py @@ -6,6 +6,8 @@ import os import logging import boto3 +import csv +import smart_open from lib_afc_s3storage.afs3exception import AFS3Error @@ -170,6 +172,27 @@ class S3Storage: return response + def put_csv_data( self, bucket=None, key=None, rowdata=None ): + if bucket == None: + raise AFS3Error("S3Storage.put_csv_data(): missing required bucket name") + + if key == None: + raise AFS3Error("S3Storage.put_csv_data(): missing required key") + + # should validate 'rowdata' is a list of dicts + if rowdata == None: + raise AFS3Error("S3Storage.put_csv_data(): missing required rowdata") + + s3Path = f"s3://{bucket}/{key}" + with smart_open.open(s3Path, 'w', transport_params={'client': self.client}) as ofh: + writer = csv.DictWriter(ofh, fieldnames=rowdata[0].keys()) + writer.writeheader() + for row in rowdata: + writer.writerow(row) + + return + + def delete_all_objects( self, bucket=None ): """ delete_all_objects