def test_populate_add_list__tag_contains_multiple_equal_to_signs__key_ends_before_first_equal_to(
            self):
        expected_add_list = [{'Key': 'key', 'Value': '10=value1'}]
        taglist = TagList(self.current_list)
        tag_keys_to_create = '"key=10=value1"'

        taglist.populate_add_list(tag_keys_to_create)

        self.assertEqual(expected_add_list, taglist.additions)
    def test_populate_add_list__trailing_and_leading_whitespaces_are_stripped(
            self):
        expected_add_list = [{'Key': 'key10', 'Value': 'value10'}]
        taglist = TagList(self.current_list)
        tag_keys_to_create = ' key10=value10 '

        taglist.populate_add_list(tag_keys_to_create)

        self.assertEqual(expected_add_list, taglist.additions)
    def test_populate_add_list__key_value_pair_is_enclosed_within_double_quotes__legal_string(
            self):
        expected_add_list = [{'Key': 'key10', 'Value': 'value1'}]
        taglist = TagList(self.current_list)
        tag_keys_to_create = '"key10=value1"'

        taglist.populate_add_list(tag_keys_to_create)

        self.assertEqual(expected_add_list, taglist.additions)
예제 #4
0
def get_and_validate_tags(addition_string):
    if not addition_string:
        return []

    taglist = TagList([])
    taglist.populate_add_list(addition_string)
    validate_additions(taglist)

    return taglist.additions
    def test_populate_delete_list__trailing_and_leading_whitespaces_are_stripped(
            self):
        expected_delete_list = ['key10']

        taglist = TagList(self.current_list)
        tag_keys_to_delete = ' key10 '

        taglist.populate_delete_list(tag_keys_to_delete)
        self.assertEqual(expected_delete_list, taglist.deletions)
예제 #6
0
def get_and_validate_tags(addition_string):
    if not addition_string:
        return []

    taglist = TagList([])
    taglist.populate_add_list(addition_string)
    tagops.validate_additions(taglist)

    return taglist.additions
    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)
    def test_populate_add_list__add_one_new_tag__key_does_not_preexist__successfully_adds(
            self):
        taglist = TagList(self.current_list)

        addition_string = 'myuniquekey=value3'

        taglist.populate_add_list(addition_string)

        expected_additions_list = [{'Key': 'myuniquekey', 'Value': 'value3'}]

        self.assertEqual(expected_additions_list, taglist.additions)
    def test_populate_add_list__single_character_keys_and_values_are_permitted(
            self):
        taglist = TagList(self.current_list)

        addition_string = 'a=b'

        taglist.populate_add_list(addition_string)

        expected_additions_list = [{'Key': 'a', 'Value': 'b'}]

        self.assertEqual(expected_additions_list, taglist.additions)
    def test_populate_add_list__whitespace_around_commas_is_stripped(self):
        expected_add_list = [{
            'Key': 'key10',
            'Value': 'value10'
        }, {
            'Key': 'key11',
            'Value': 'value11'
        }]
        taglist = TagList(self.current_list)
        tag_keys_to_create = '"key10=value10 , key11=value11"'

        taglist.populate_add_list(tag_keys_to_create)
        self.assertEqual(expected_add_list, taglist.additions)
    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)
    def test_validate_additions__attempt_to_add_preexisting_tag__raises_exception(
            self):
        taglist = TagList(self.current_list)
        taglist.populate_add_list("key1=value2")

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

        print(context_manager.exception.message)
        expected_error_message = "Tags with the following keys can't be added because they already exist:{0}{0}  key1{0}".format(
            linesep)
        self.assertEqual(expected_error_message,
                         context_manager.exception.message)
    def test_populate_add_list__multiple_comma_separated_key_value_pairs_are_enclosed_within_double_quotes__legal_string(
            self):
        expected_add_list = [{
            'Key': 'key10',
            'Value': 'value10'
        }, {
            'Key': 'key11',
            'Value': 'value11'
        }]
        taglist = TagList(self.current_list)
        tag_keys_to_create = '"key10=value10,key11=value11"'

        taglist.populate_add_list(tag_keys_to_create)
        self.assertEqual(expected_add_list, taglist.additions)
    def test_populate_delete_list__successfully_adds_multiple_keys_to_delete_list(
            self):
        taglist = TagList(self.current_list)

        deletion_string = ','.join(
            ['myuniquekey', 'myuniquekey2', 'myuniquekey3'])

        taglist.populate_delete_list(deletion_string)

        expected_deletions_list = [
            'myuniquekey', 'myuniquekey2', 'myuniquekey3'
        ]

        self.assertEqual(expected_deletions_list, taglist.deletions)
    def test_populate_updates_list__multiple_comma_separated_key_value_pairs_are_enclosed_within_single_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)
    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)
    def test_populate_add_list__whitespace_around_equal_to_separating_key_and_value_is_stripped(
            self):
        expected_add_list = [{
            'Key': 'key10',
            'Value': 'value10'
        }, {
            'Key': 'key11',
            'Value': 'value11'
        }, {
            'Key': 'key12',
            'Value': 'value12'
        }]
        taglist = TagList(self.current_list)
        tag_keys_to_create = 'key10= value10,key11 =value11,key12 = value12'

        taglist.populate_add_list(tag_keys_to_create)
        self.assertEqual(expected_add_list, taglist.additions)
    def test_populate_add_list__add_multiple_new_tags__keys_dont_preexist__successfully_adds(
            self):
        taglist = TagList(self.current_list)

        addition_string = ','.join([
            'myuniquekey=value3', 'myuniquekey2=value3', 'myuniquekey3=value4'
        ])

        taglist.populate_add_list(addition_string)

        expected_additions_list = [{
            'Key': 'myuniquekey',
            'Value': 'value3'
        }, {
            'Key': 'myuniquekey2',
            'Value': 'value3'
        }, {
            'Key': 'myuniquekey3',
            'Value': 'value4'
        }]

        self.assertEqual(expected_additions_list, taglist.additions)
    def test_get_and_validate_tags__tags_is_empty__add_multiple_new_tags(self):
        taglist = TagList([])

        addition_string = ','.join(
            ['key1=value1', 'key2=value2', 'key3=value3'])

        expected_additions_list = [{
            'Key': 'key1',
            'Value': 'value1'
        }, {
            'Key': 'key2',
            'Value': 'value2'
        }, {
            'Key': 'key3',
            'Value': 'value3'
        }]

        self.assertEqual(expected_additions_list,
                         tagops.get_and_validate_tags(addition_string))
예제 #20
0
 def retrieve_taglist(self):
     if self.taglist is None:
         self.taglist = TagList(
             elasticbeanstalk.list_tags_for_resource(self.env_name))
예제 #21
0
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('')
    def test_validate___attempt_to_add_new_tag__passes_validation(self):
        taglist = TagList(self.current_list)
        taglist.populate_add_list("key2=value2")

        tagops.validate_additions(taglist)
    def test_validate_deletion__attempt_to_delete_existing_tag__passes_validation(
            self):
        taglist = TagList(self.current_list)
        taglist.populate_delete_list("key1")

        tagops.validate_deletions(taglist)
예제 #24
0
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('')
예제 #25
0
 def retrieve_taglist(self):
     if self.taglist is None:
         self.taglist = TagList(elasticbeanstalk.list_tags_for_resource(self.env_name))
 def setUp(self):
     self.taglist = TagList([])