Mercurial > repos > shellac > guppy_basecaller
diff env/lib/python3.7/site-packages/boto/gs/lifecycle.py @ 5:9b1c78e6ba9c draft default tip
"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
author | shellac |
---|---|
date | Mon, 01 Jun 2020 08:59:25 -0400 |
parents | 79f47841a781 |
children |
line wrap: on
line diff
--- a/env/lib/python3.7/site-packages/boto/gs/lifecycle.py Thu May 14 16:47:39 2020 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,224 +0,0 @@ -# Copyright 2013 Google Inc. -# -# 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, dis- -# tribute, sublicense, and/or sell copies of the Software, and to permit -# persons to whom the Software is furnished to do so, subject to the fol- -# lowing conditions: -# -# The above copyright notice and this permission notice shall be included -# in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- -# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT -# SHALL THE AUTHOR 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. - -from boto.exception import InvalidLifecycleConfigError - -# Relevant tags for the lifecycle configuration XML document. -LIFECYCLE_CONFIG = 'LifecycleConfiguration' -RULE = 'Rule' -ACTION = 'Action' -DELETE = 'Delete' -SET_STORAGE_CLASS = 'SetStorageClass' -CONDITION = 'Condition' -AGE = 'Age' -CREATED_BEFORE = 'CreatedBefore' -NUM_NEWER_VERSIONS = 'NumberOfNewerVersions' -IS_LIVE = 'IsLive' -MATCHES_STORAGE_CLASS = 'MatchesStorageClass' - -# List of all action elements. -LEGAL_ACTIONS = [DELETE, SET_STORAGE_CLASS] -# List of all condition elements. -LEGAL_CONDITIONS = [AGE, CREATED_BEFORE, NUM_NEWER_VERSIONS, IS_LIVE, - MATCHES_STORAGE_CLASS] -# List of conditions elements that may be repeated. -LEGAL_REPEATABLE_CONDITIONS = [MATCHES_STORAGE_CLASS] - -class Rule(object): - """ - A lifecycle rule for a bucket. - - :ivar action: Action to be taken. - - :ivar action_text: The text value for the specified action, if any. - - :ivar conditions: A dictionary of conditions that specify when the action - should be taken. Each item in the dictionary represents the name and - value (or a list of multiple values, if applicable) of a condition. - """ - - def __init__(self, action=None, action_text=None, conditions=None): - self.action = action - self.action_text = action_text - self.conditions = conditions or {} - - # Name of the current enclosing tag (used to validate the schema). - self.current_tag = RULE - - 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)) - - 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)) - - 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 - - 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) - - 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) - - def to_xml(self): - """Convert the rule into XML string representation.""" - s = ['<' + RULE + '>'] - s.append('<' + ACTION + '>') - if self.action_text: - s.extend(['<' + self.action + '>', - self.action_text, - '</' + self.action + '>']) - else: - s.append('<' + self.action + '/>') - s.append('</' + ACTION + '>') - s.append('<' + CONDITION + '>') - for condition_name in self.conditions: - if condition_name not in LEGAL_CONDITIONS: - continue - if condition_name in LEGAL_REPEATABLE_CONDITIONS: - condition_values = self.conditions[condition_name] - else: - # Wrap condition value in a list, allowing us to iterate over - # all condition values using the same logic. - condition_values = [self.conditions[condition_name]] - for condition_value in condition_values: - s.extend(['<' + condition_name + '>', - condition_value, - '</' + condition_name + '>']) - s.append('</' + CONDITION + '>') - s.append('</' + RULE + '>') - return ''.join(s) - -class LifecycleConfig(list): - """ - A container of rules associated with a lifecycle configuration. - """ - - def __init__(self): - # Track if root tag has been seen. - self.has_root_tag = False - - 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) - - def endElement(self, name, value, connection): - if name == LIFECYCLE_CONFIG: - pass - else: - raise InvalidLifecycleConfigError('Unsupported end tag ' + name) - - def to_xml(self): - """Convert LifecycleConfig object into XML string representation.""" - s = ['<?xml version="1.0" encoding="UTF-8"?>'] - s.append('<' + LIFECYCLE_CONFIG + '>') - for rule in self: - s.append(rule.to_xml()) - s.append('</' + LIFECYCLE_CONFIG + '>') - return ''.join(s) - - def add_rule(self, action, action_text, conditions): - """ - Add a rule to this Lifecycle configuration. This only adds the rule to - the local copy. To install the new rule(s) on the bucket, you need to - pass this Lifecycle config object to the configure_lifecycle method of - the Bucket object. - - :type action: str - :param action: Action to be taken. - - :type action_text: str - :param action_text: Value for the specified action. - - :type conditions: dict - :param conditions: A dictionary of conditions that specify when the - action should be taken. Each item in the dictionary represents the name - and value of a condition. - """ - rule = Rule(action, action_text, conditions) - self.append(rule)