コード例 #1
0
    def test_populate_update_list__trailing_and_leading_whitespaces_are_stripped(
            self):
        expected_update_list = [{'Key': 'key10', 'Value': 'value10'}]
        taglist = TagList(self.current_list)
        tag_keys_to_update = ' key10=value10 '

        taglist.populate_update_list(tag_keys_to_update)

        self.assertEqual(expected_update_list, taglist.updates)
コード例 #2
0
    def test_populate_update_list__tag_contains_multiple_equal_to_signs__key_ends_before_first_equal_to(
            self):
        expected_update_list = [{'Key': 'key', 'Value': '10=value1'}]
        taglist = TagList(self.current_list)
        tag_keys_to_update = '"key=10=value1"'

        taglist.populate_update_list(tag_keys_to_update)

        self.assertEqual(expected_update_list, taglist.updates)
コード例 #3
0
    def test_populate_update_list__update_one_existing_tag(self):
        taglist = TagList(self.current_list)

        update_string = 'key1=value3'

        taglist.populate_update_list(update_string)

        expected_update_list = [{'Key': 'key1', 'Value': 'value3'}]

        self.assertEqual(expected_update_list, taglist.updates)
コード例 #4
0
    def test_validate_update__attempt_to_update_non_existent_tag__raises_exception(
            self):
        taglist = TagList(self.current_list)
        taglist.populate_update_list("key2=value2")

        with self.assertRaises(
                tagops.InvalidAttemptToModifyTagsError) as context_manager:
            tagops.validate_updates(taglist)

        expected_error_message = "Tags with the following keys can't be updated because they don't exist:{0}{0}  key2{0}".format(
            linesep)
        self.assertEqual(expected_error_message,
                         context_manager.exception.message)
コード例 #5
0
    def test_populate_update_list__whitespace_around_commas_is_stripped(self):
        expected_update_list = [{
            'Key': 'key10',
            'Value': 'value10'
        }, {
            'Key': 'key11',
            'Value': 'value11'
        }]
        taglist = TagList(self.current_list)
        tag_keys_to_update = '"key10=value10 , key11=value11"'

        taglist.populate_update_list(tag_keys_to_update)

        self.assertEqual(expected_update_list, taglist.updates)
コード例 #6
0
    def test_populate_updates_list__multiple_comma_separated_key_value_pairs_are_enclosed_within_double_quotes__legal_string(
            self):
        expected_update_list = [{
            'Key': 'key10',
            'Value': 'value10'
        }, {
            'Key': 'key11',
            'Value': 'value11'
        }]
        taglist = TagList(self.current_list)
        tag_keys_to_update = '"key10=value10,key11=value11"'

        taglist.populate_update_list(tag_keys_to_update)

        self.assertEqual(expected_update_list, taglist.updates)
コード例 #7
0
    def test_populate_update_list__update_multiple_existing_tags(self):
        taglist = TagList(self.current_list)

        update_string = ','.join(['key1=value3', 'key2=value3'])

        taglist.populate_update_list(update_string)

        expected_update_list = [{
            'Key': 'key1',
            'Value': 'value3'
        }, {
            'Key': 'key2',
            'Value': 'value3'
        }]

        self.assertEqual(expected_update_list, taglist.updates)
コード例 #8
0
    def test_populate_update_list__whitespace_around_equal_to_separating_key_and_value_is_stripped(
            self):
        expected_update_list = [{
            'Key': 'key10',
            'Value': 'value10'
        }, {
            'Key': 'key11',
            'Value': 'value11'
        }, {
            'Key': 'key12',
            'Value': 'value12'
        }]
        taglist = TagList(self.current_list)
        tag_keys_to_update = 'key10= value10,key11 =value11,key12 = value12'

        taglist.populate_update_list(tag_keys_to_update)

        self.assertEqual(expected_update_list, taglist.updates)
コード例 #9
0
ファイル: tagops.py プロジェクト: skb30/flask_catalog
class TagOps(object):
    """
    Tag Operations class that delegates the tasks of validating syntax and uniqueness
    of tags, and performing EB API calls to other classes.
    """
    def __init__(self, env_name, verbose):
        self.env_name = env_name
        self.taglist = None
        self.verbose = verbose

    def retrieve_taglist(self):
        if self.taglist is None:
            self.taglist = TagList(
                elasticbeanstalk.list_tags_for_resource(self.env_name))

    def list_tags(self):
        self.retrieve_taglist()

        self.taglist.print_tags(self.env_name)

    def update_tags(self):
        request_id = elasticbeanstalk.update_tags_for_resource(
            self.env_name, self.taglist.additions + self.taglist.updates,
            self.taglist.deletions)

        wait_for_success_events(request_id)

        if self.verbose:
            self.__communicate_changes_to_stdout()

    def handle_addition_string(self, addition_string):
        """
        Passes on string of the form 'key=value,..." to TagList
        which will maintain a list of keys specified for addition
        :param addition_string: a string of the form 'key=value,...'
        :return: None
        """
        self.retrieve_taglist()

        self.taglist.populate_add_list(addition_string)

        validate_additions(self.taglist)

    def handle_deletion_string(self, deletion_string):
        """
        Passes on string of the form 'key,..." to TagList
        which will maintain a list of keys specified for deletion
        :param deletion_string: a string of the form 'key,...'
        :return: None
        """
        self.retrieve_taglist()

        self.taglist.populate_delete_list(deletion_string)
        validate_deletions(self.taglist)

    def handle_update_string(self, update_string):
        """
        Passes on string of the form 'key=value,..." to TagList
        which will maintain a list of keys specified for update
        :param update_string: a string of the form 'key=value,...'
        :return: None
        """
        self.retrieve_taglist()

        self.taglist.populate_update_list(update_string)

        validate_updates(self.taglist)

    def __communicate_changes_to_stdout(self):
        """
        Print changes to STDOUT.
        :return: None
        """
        keys_to_update = list_of_keys_of(self.taglist.updates)
        additions = [
            addition for addition in self.taglist.additions
            if addition['Key'] not in keys_to_update
        ]
        deletions = self.taglist.deletions
        updates = self.taglist.updates

        if additions:
            io.echo('Added Tags:')
            io.echo(
                linesep.join([
                    "  Key: '{0}'  Value: '{1}'".format(
                        addition['Key'], addition['Value'])
                    for addition in additions
                ]))
            io.echo('')

        if deletions:
            io.echo('Deleted Tags:')
            io.echo(
                linesep.join([
                    "  Key: '{0}'".format(deletion) for deletion in deletions
                ]))
            io.echo('')

        if updates:
            io.echo('Updated Tags:')
            io.echo(
                linesep.join([
                    "  Key: '{0}'  Value: '{1}'".format(
                        update['Key'], update['Value']) for update in updates
                ]))
            io.echo('')
コード例 #10
0
ファイル: tagops.py プロジェクト: dangjoeltang/SimpleShop
class TagOps(object):
    """
    Tag Operations class that delegates the tasks of validating syntax and uniqueness
    of tags, and performing EB API calls to other classes.
    """
    def __init__(self, env_name, verbose):
        self.env_name = env_name
        self.taglist = None
        self.verbose = verbose

    def retrieve_taglist(self):
        if self.taglist is None:
            self.taglist = TagList(elasticbeanstalk.list_tags_for_resource(self.env_name))

    def list_tags(self):
        self.retrieve_taglist()

        self.taglist.print_tags(self.env_name)

    def update_tags(self):
        request_id = elasticbeanstalk.update_tags_for_resource(
            self.env_name,
            self.taglist.additions + self.taglist.updates,
            self.taglist.deletions
        )

        wait_for_success_events(request_id)

        if self.verbose:
            self.__communicate_changes_to_stdout()

    def handle_addition_string(self, addition_string):
        """
        Passes on string of the form 'key=value,..." to TagList
        which will maintain a list of keys specified for addition
        :param addition_string: a string of the form 'key=value,...'
        :return: None
        """
        self.retrieve_taglist()

        self.taglist.populate_add_list(addition_string)

        validate_additions(self.taglist)

    def handle_deletion_string(self, deletion_string):
        """
        Passes on string of the form 'key,..." to TagList
        which will maintain a list of keys specified for deletion
        :param deletion_string: a string of the form 'key,...'
        :return: None
        """
        self.retrieve_taglist()

        self.taglist.populate_delete_list(deletion_string)
        validate_deletions(self.taglist)

    def handle_update_string(self, update_string):
        """
        Passes on string of the form 'key=value,..." to TagList
        which will maintain a list of keys specified for update
        :param update_string: a string of the form 'key=value,...'
        :return: None
        """
        self.retrieve_taglist()

        self.taglist.populate_update_list(update_string)

        validate_updates(self.taglist)

    def __communicate_changes_to_stdout(self):
        """
        Print changes to STDOUT.
        :return: None
        """
        keys_to_update = list_of_keys_of(self.taglist.updates)
        additions = [addition for addition in self.taglist.additions if addition['Key'] not in keys_to_update]
        deletions = self.taglist.deletions
        updates = self.taglist.updates

        if additions:
            io.echo('Added Tags:')
            io.echo(linesep.join(["  Key: '{0}'  Value: '{1}'".format(addition['Key'], addition['Value']) for addition in additions]))
            io.echo('')

        if deletions:
            io.echo('Deleted Tags:')
            io.echo(linesep.join(["  Key: '{0}'".format(deletion) for deletion in deletions]))
            io.echo('')

        if updates:
            io.echo('Updated Tags:')
            io.echo(linesep.join(["  Key: '{0}'  Value: '{1}'".format(update['Key'], update['Value']) for update in updates]))
            io.echo('')
コード例 #11
0
    def test_validate_update__attempt_to_update_existing_tag__passes_validation(
            self):
        taglist = TagList(self.current_list)
        taglist.populate_update_list("key1=value1")

        tagops.validate_updates(taglist)