#!/usr/bin/env python # -*- coding: utf-8 -*- """ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: MIT-0 * * Permission is hereby granted, free of charge, to any person obtaining a copy of this * software and associated documentation files (the "Software"), to deal in the Software * without restriction, including without limitation the rights to use, copy, modify, * merge, publish, distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A * PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ import datetime import json from typing import Any from aws_lambda_powertools.shared.json_encoder import Encoder __all__ = ["json_dumps", "get_prefix", "now"] class DateTimeEncoder(Encoder): def default(self, obj): if isinstance(obj, (datetime.datetime, datetime.date, datetime.time)): return obj.isoformat() elif isinstance(obj, datetime.timedelta): return (datetime.datetime.min + obj).time().isoformat() return super().default(obj) def json_dumps(obj: Any) -> str: return json.dumps(obj, indent=None, sort_keys=True, separators=(",", ":"), cls=DateTimeEncoder) def get_prefix(instance_id: str) -> str: # now = datetime.datetime.now(tz=datetime.timezone.utc).strftime( # "year=%Y/month=%m/day=%d/hour=%H" # ) # return f"{now}/{instance_id}" return instance_id def now() -> str: """ Return a ISO8601 timestamp """ return ( datetime.datetime.now(tz=datetime.timezone.utc) .replace(microsecond=0) .isoformat() .replace("+00:00", "Z") )