Конвертируйте вывод boto3 в удобный формат

Я получаю вывод ниже, используя функцию description_snapshots в boto3.

u'StartTime': datetime.datetime(2017, 4, 7, 4, 21, 42, tzinfo=tzutc())

Я хочу преобразовать его в правильную дату, чтобы я мог продолжить сортировку снимков и удалить те, которые старше определенного количества дней.

Есть ли функциональность Python, которую можно использовать для достижения этой цели?


person ALPHY GEORGE    schedule 09.05.2017    source источник


Ответы (3)


Это почти наверняка уже тот формат, который вам нужен. объекты datetime легко сравнивать/сортировать. Например:

from datetime import datetime

import boto3


ec2 = boto3.client('ec2')
account_id = 'MY_ACCOUNT_ID'
response = ec2.describe_snapshots(OwnerIds=[account_id])
snapshots = response['Snapshots']

# January 1st, 2017
target_date = datetime(2017, 01, 01)

# Get the snapshots older than the target date
old_snapshots = [s for s in snapshots if s['StartTime'] < target_date]

# Sort the old snapshots
old_snapshots = sorted(old_snapshots, key=lambda s: s['StartTime'])

документы: https://docs.python.org/3.6/library/datetime.html< /а>

person Jordon Phillips    schedule 09.05.2017

Очень поздно к этому посту, но я недавно столкнулся с этим. Я предполагаю, что вы сравниваете даты вручную/на глаз с программным сравнением объектов datetime. Или вы отлаживаете и просто хотите увидеть дату/время в объектах json в удобочитаемом формате.

Я обнаружил, что преобразователь в aws ага образцы работают очень хорошо.

def myconverter(json_object):
    if isinstance(json_object, datetime.datetime):
        return json_object.__str__()

Оттуда вы можете просто передать исходное событие/сообщение из boto в json.dump и вернуть преобразованную строку json.

In [34]: print(json_msg)
{'arn': 'arn:aws:service:region::X', 'service': 'SERVICE', 'eventTypeCode': 'SOME_CODE', 'eventTypeCategory': 'CAT', 'eventScopeCode': 'SCOPE', 'region': 'us-east-1', 'startTime': datetime.datetime(YYYY, MM, DD, HH, MM, tzinfo=tzlocal()), 'endTime': datetime.datetime(YYYY, MM, DD, HH, MM, tzinfo=tzlocal()), 'lastUpdatedTime': datetime.datetime(YYYY, MM, DD, HH, MM, SS, tzinfo=tzlocal()), 'statusCode': 'CODE' }

In [35]: json_msg = json.dumps(json_event, default=myconverter)

In [36]: print(json_event)
{'arn': 'arn:aws:service:region::X', 'service': 'SERVICE', 'eventTypeCode': 'SOME_CODE', 'eventTypeCategory': 'CAT', 'eventScopeCode': 'SCOPE', 'region': 'us-east-1', 'startTime': "YYYY-MM-DD HH:MM:SS-OH:OS", 'endTime': "YYYY-MM-DD HH:MM:SS-OH:OS", 'lastUpdatedTime': "YYYY-MM-DD HH:MM:SS-OH:OS" , 'statusCode': 'CODE' }
person Lookcrabs    schedule 19.05.2021