ebcli/objects/event.py (122 lines of code) (raw):
# Copyright 2014 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
# http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
class Event(object):
def __init__(
self,
app_name=None,
environment_name=None,
event_date=None,
message=None,
platform=None,
request_id=None,
severity=None,
version_label=None,
):
self.app_name = app_name
self.environment_name = environment_name
self.event_date = event_date
self.message = message
self.platform = platform
self.request_id = request_id
self.severity = severity
self.version_label = version_label
def __eq__(self, other):
return self.__hash__() == other.__hash__()
def __ne__(self, other):
return self.__hash__() != other.__hash__()
def __hash__(self):
"""
__hash__ method for `OptionSetting` to enable comparison of sets of `OptionSetting`s objects.
:return: a hash of the `tuple` of the `OptionSetting` attributes
"""
return hash(
(
self.app_name,
self.environment_name,
self.event_date,
self.message,
self.platform,
self.request_id,
self.severity,
self.version_label
)
)
@classmethod
def json_to_event_objects(cls, json):
events = []
for event in json:
events.append(
Event(
app_name=event.get('ApplicationName'),
environment_name=event.get('EnvironmentName'),
event_date=event.get('EventDate'),
message=event.get('Message'),
platform=event.get('PlatformArn'),
request_id=event.get('RequestId'),
severity=event.get('Severity'),
version_label=event.get('VersionLabel')
)
)
return events
class CFNEvent(object):
def __init__(
self,
stack_id=None,
event_id=None,
stack_name=None,
logical_resource_id=None,
physical_resource_id=None,
resource_type=None,
timestamp=None,
resource_status=None,
resource_status_reason=None,
resource_properties=None,
client_request_token=None,
):
self.stack_id = stack_id
self.event_id = event_id
self.stack_name = stack_name
self.logical_resource_id = logical_resource_id
self.physical_resource_id = physical_resource_id
self.resource_type = resource_type
self.timestamp = timestamp
self.resource_status = resource_status
self.resource_status_reason = resource_status_reason
self.resource_properties = resource_properties
self.client_request_token = client_request_token
def __eq__(self, other):
return self.__hash__() == other.__hash__()
def __ne__(self, other):
return self.__hash__() != other.__hash__()
def __hash__(self):
"""
__hash__ method for `OptionSetting` to enable comparison of sets of `OptionSetting`s objects.
:return: a hash of the `tuple` of the `OptionSetting` attributes
"""
return hash(
(
self.stack_id,
self.event_id,
self.stack_name,
self.logical_resource_id,
self.physical_resource_id,
self.resource_type,
self.timestamp,
self.resource_status,
self.resource_status_reason,
self.resource_properties,
self.client_request_token
)
)
def happened_after(self, other_datetime):
return self.timestamp.replace(tzinfo=None) > other_datetime.replace(tzinfo=None)
@classmethod
def json_to_event_objects(cls, json):
events = []
for event in json:
events.append(
CFNEvent(
stack_id=event.get('StackId'),
event_id=event.get('EventId'),
stack_name=event.get('StackName'),
logical_resource_id=event.get('LogicalResourceId'),
physical_resource_id=event.get('PhysicalResourceId'),
resource_type=event.get('ResourceType'),
timestamp=event.get('Timestamp'),
resource_status=event.get('ResourceStatus'),
resource_status_reason=event.get('ResourceStatusReason'),
resource_properties=event.get('ResourceProperties'),
client_request_token=event.get('ClientRequestToken')
)
)
return events