コード例 #1
0
 def startElement(self, name, attrs, connection):
     if name == ACTION:
         self.validateStartTag(name, RULE)
     elif name in LEGAL_ACTIONS:
         self.validateStartTag(name, ACTION)
         # Verify there is only one action tag in the rule.
         if self.action is not None:
             raise InvalidLifecycleConfigError(
                 'Only one action tag is allowed in each rule')
         self.action = name
     elif name in LEGAL_ACTION_PARAMS:
         # Make sure this tag is found in an action tag.
         if self.current_tag not in LEGAL_ACTIONS:
             raise InvalidLifecycleConfigError(
                 'Tag %s found outside of action' % name)
         # Make sure this tag is allowed for the current action tag.
         if name not in LEGAL_ACTION_ACTION_PARAMS[self.action]:
             raise InvalidLifecycleConfigError(
                 'Tag %s not allowed in action %s' % (name, self.action))
     elif name == CONDITION:
         self.validateStartTag(name, RULE)
     elif name in LEGAL_CONDITIONS:
         self.validateStartTag(name, CONDITION)
         # Verify there is no duplicate conditions.
         if name in self.conditions:
             raise InvalidLifecycleConfigError(
                 'Found duplicate conditions %s' % name)
     else:
         raise InvalidLifecycleConfigError('Unsupported tag ' + name)
     self.current_tag = name
コード例 #2
0
 def validate(self):
     """Validate the rule."""
     if not self.action:
         raise InvalidLifecycleConfigError(
             'No action was specified in the rule')
     if not self.conditions:
         raise InvalidLifecycleConfigError(
             'No condition was specified for action %s' % self.action)
コード例 #3
0
 def startElement(self, name, attrs, connection):
     if name == LIFECYCLE_CONFIG:
         if self.has_root_tag:
             raise InvalidLifecycleConfigError(
                 'Only one root tag is allowed in the XML')
         self.has_root_tag = True
     elif name == RULE:
         if not self.has_root_tag:
             raise InvalidLifecycleConfigError('Invalid root tag ' + name)
         rule = Rule()
         self.append(rule)
         return rule
     else:
         raise InvalidLifecycleConfigError('Unsupported tag ' + name)
コード例 #4
0
 def endElement(self, name, value, connection):
     self.validateEndTag(name)
     if name == RULE:
         # We have to validate the rule after it is fully populated because
         # the action and condition elements could be in any order.
         self.validate()
     elif name == ACTION:
         self.current_tag = RULE
     elif name in LEGAL_ACTIONS:
         if name == SET_STORAGE_CLASS and value is not None:
             self.action_text = value.strip()
         self.current_tag = ACTION
     elif name == CONDITION:
         self.current_tag = RULE
     elif name in LEGAL_CONDITIONS:
         self.current_tag = CONDITION
         # Some conditions specify a list of values.
         if name in LEGAL_REPEATABLE_CONDITIONS:
             if name not in self.conditions:
                 self.conditions[name] = []
             self.conditions[name].append(value.strip())
         else:
             self.conditions[name] = value.strip()
     else:
         raise InvalidLifecycleConfigError('Unsupported end tag ' + name)
コード例 #5
0
 def startElement(self, name, attrs, connection):
     if name == ACTION:
         self.validateStartTag(name, RULE)
     elif name in LEGAL_ACTIONS:
         self.validateStartTag(name, ACTION)
         # Verify there is only one action tag in the rule.
         if self.action is not None:
             raise InvalidLifecycleConfigError(
                 'Only one action tag is allowed in each rule')
         self.action = name
     elif name == CONDITION:
         self.validateStartTag(name, RULE)
     elif name in LEGAL_CONDITIONS:
         self.validateStartTag(name, CONDITION)
         # Verify there is no duplicate conditions.
         if (name in self.conditions
                 and name not in LEGAL_REPEATABLE_CONDITIONS):
             raise InvalidLifecycleConfigError(
                 'Found duplicate non-repeatable conditions %s' % name)
     else:
         raise InvalidLifecycleConfigError('Unsupported tag ' + name)
     self.current_tag = name
コード例 #6
0
 def endElement(self, name, value, connection):
     self.validateEndTag(name)
     if name == RULE:
         # We have to validate the rule after it is fully populated because
         # the action and condition elements could be in any order.
         self.validate()
     elif name == ACTION:
         self.current_tag = RULE
     elif name in LEGAL_ACTIONS:
         self.current_tag = ACTION
     elif name in LEGAL_ACTION_PARAMS:
         self.current_tag = self.action
         # Add the action parameter name and value to the dictionary.
         self.action_params[name] = value.strip()
     elif name == CONDITION:
         self.current_tag = RULE
     elif name in LEGAL_CONDITIONS:
         self.current_tag = CONDITION
         # Add the condition name and value to the dictionary.
         self.conditions[name] = value.strip()
     else:
         raise InvalidLifecycleConfigError('Unsupported end tag ' + name)
コード例 #7
0
 def validateEndTag(self, tag):
     """Verify end tag against the start tag."""
     if tag != self.current_tag:
         raise InvalidLifecycleConfigError(
             'Mismatched start and end tags (%s/%s)' %
             (self.current_tag, tag))
コード例 #8
0
 def validateStartTag(self, tag, parent):
     """Verify parent of the start tag."""
     if self.current_tag != parent:
         raise InvalidLifecycleConfigError(
             'Invalid tag %s found inside %s tag' % (tag, self.current_tag))
コード例 #9
0
 def endElement(self, name, value, connection):
     if name == LIFECYCLE_CONFIG:
         pass
     else:
         raise InvalidLifecycleConfigError('Unsupported end tag ' + name)