Can't iterate over dict values in Python 3.3+. Changed Rule.targets from a dict to an array, which is probably better anyway since the dict doesn't maintain order, making API calls with the Limit parameter specified unreliable.
This commit is contained in:
parent
5d7a102e4c
commit
c7757f953c
@ -17,7 +17,7 @@ class Rule(object):
|
|||||||
self.state = kwargs.get('State') or 'ENABLED'
|
self.state = kwargs.get('State') or 'ENABLED'
|
||||||
self.description = kwargs.get('Description')
|
self.description = kwargs.get('Description')
|
||||||
self.role_arn = kwargs.get('RoleArn')
|
self.role_arn = kwargs.get('RoleArn')
|
||||||
self.targets = {}
|
self.targets = []
|
||||||
|
|
||||||
def enable(self):
|
def enable(self):
|
||||||
self.state = 'ENABLED'
|
self.state = 'ENABLED'
|
||||||
@ -25,22 +25,35 @@ class Rule(object):
|
|||||||
def disable(self):
|
def disable(self):
|
||||||
self.state = 'DISABLED'
|
self.state = 'DISABLED'
|
||||||
|
|
||||||
|
# This song and dance for targets is because we need order for Limits and NextTokens, but can't use OrderedDicts
|
||||||
|
# with Python 2.6, so tracking it with an array it is.
|
||||||
|
def _check_target_exists(self, target_id):
|
||||||
|
for i in range(0, len(self.targets)):
|
||||||
|
if target_id == self.targets[i]['Id']:
|
||||||
|
return i
|
||||||
|
return None
|
||||||
|
|
||||||
def put_targets(self, targets):
|
def put_targets(self, targets):
|
||||||
# Not testing for valid ARNs.
|
# Not testing for valid ARNs.
|
||||||
for target in targets:
|
for target in targets:
|
||||||
self.targets[target['Id']] = target
|
index = self._check_target_exists(target['Id'])
|
||||||
|
if index is not None:
|
||||||
|
self.targets[index] = target
|
||||||
|
else:
|
||||||
|
self.targets.append(target)
|
||||||
|
|
||||||
def remove_targets(self, ids):
|
def remove_targets(self, ids):
|
||||||
for target in ids:
|
for target_id in ids:
|
||||||
if target in self.targets:
|
index = self._check_target_exists(target_id)
|
||||||
self.targets.pop(target)
|
if index is not None:
|
||||||
|
self.targets.pop(index)
|
||||||
|
|
||||||
|
|
||||||
class EventsBackend(BaseBackend):
|
class EventsBackend(BaseBackend):
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.rules = {}
|
self.rules = {}
|
||||||
# This array tracks the order in which the rules have been added, since 2.6 doesn't have OrderedDicts
|
# This array tracks the order in which the rules have been added, since 2.6 doesn't have OrderedDicts.
|
||||||
self.rules_order = []
|
self.rules_order = []
|
||||||
self.next_tokens = {}
|
self.next_tokens = {}
|
||||||
|
|
||||||
@ -98,7 +111,7 @@ class EventsBackend(BaseBackend):
|
|||||||
for i in range(start_index, end_index):
|
for i in range(start_index, end_index):
|
||||||
rule = self._get_rule_by_index(i)
|
rule = self._get_rule_by_index(i)
|
||||||
for target in rule.targets:
|
for target in rule.targets:
|
||||||
if rule.targets[target]['Arn'] == target_arn:
|
if target['Arn'] == target_arn:
|
||||||
matching_rules.append(rule.name)
|
matching_rules.append(rule.name)
|
||||||
|
|
||||||
return_obj['RuleNames'] = matching_rules
|
return_obj['RuleNames'] = matching_rules
|
||||||
@ -132,15 +145,15 @@ class EventsBackend(BaseBackend):
|
|||||||
|
|
||||||
def list_targets_by_rule(self, rule, next_token=None, limit=None):
|
def list_targets_by_rule(self, rule, next_token=None, limit=None):
|
||||||
# We'll let a KeyError exception be thrown for response to handle if rule doesn't exist.
|
# We'll let a KeyError exception be thrown for response to handle if rule doesn't exist.
|
||||||
targets = self.rules[rule].targets.values()
|
rule = self.rules[rule]
|
||||||
|
|
||||||
start_index, end_index, new_next_token = self._process_token_and_limits(len(targets), next_token, limit)
|
start_index, end_index, new_next_token = self._process_token_and_limits(len(rule.targets), next_token, limit)
|
||||||
|
|
||||||
returned_targets = []
|
returned_targets = []
|
||||||
return_obj = {}
|
return_obj = {}
|
||||||
|
|
||||||
for i in range(start_index, end_index):
|
for i in range(start_index, end_index):
|
||||||
returned_targets.append(targets[i])
|
returned_targets.append(rule.targets[i])
|
||||||
|
|
||||||
return_obj['Targets'] = returned_targets
|
return_obj['Targets'] = returned_targets
|
||||||
if new_next_token is not None:
|
if new_next_token is not None:
|
||||||
|
Loading…
Reference in New Issue
Block a user