From 23c369f7d1ba0ff62aa623329e158f3dabc4bcd9 Mon Sep 17 00:00:00 2001 From: Jakob Schlyter Date: Thu, 16 Nov 2023 09:22:55 +0100 Subject: [PATCH] add S3 metadata --- aggrec/aggregates.py | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/aggrec/aggregates.py b/aggrec/aggregates.py index b373b1c..2ec0303 100644 --- a/aggrec/aggregates.py +++ b/aggrec/aggregates.py @@ -175,6 +175,27 @@ def get_s3_object_key(metadata: AggregateMetadata) -> str: return "/".join(fields_list) +def get_s3_object_metadata(metadata: AggregateMetadata) -> dict: + """Get S3 object metadata from metadata""" + return { + "aggregate-id": str(metadata.id), + "aggregate-type": metadata.aggregate_type.value, + "created": metadata.id.generation_time.strftime("%Y-%m-%dT%H:%M:%SZ"), + "creator": str(metadata.creator), + **( + { + "interval-start": metadata.aggregate_interval_start.astimezone( + tz=timezone.utc + ).strftime("%Y-%m-%dT%H:%M:%SZ"), + "interval-duration": str(metadata.aggregate_interval_duration), + } + if metadata.aggregate_interval_start + and metadata.aggregate_interval_duration + else {} + ), + } + + @router.post("/api/v1/aggregate/{aggregate_type}") async def create_aggregate( aggregate_type: AggregateType, @@ -236,8 +257,14 @@ async def create_aggregate( except Exception: pass + s3_object_metadata = get_s3_object_metadata(metadata) + logger.debug("S3 object metadata: %s", s3_object_metadata) + await s3_client.put_object( - Bucket=s3_bucket, Key=metadata.s3_object_key, Body=content + Bucket=s3_bucket, + Key=metadata.s3_object_key, + Metadata=s3_object_metadata, + Body=content, ) logger.info("Object created: %s", metadata.s3_object_key)