def test_populate_delete_list__whitespace_inside_key_is_preserved(self): expected_delete_list = ['key 10'] taglist = TagList(self.current_list) tag_keys_to_delete = 'key 10' taglist.populate_delete_list(tag_keys_to_delete) self.assertEqual(expected_delete_list, taglist.deletions)
def test_populate_delete_list__whitespace_around_commas_is_stripped(self): expected_delete_list = ['key10', 'key11'] taglist = TagList(self.current_list) tag_keys_to_delete = '"key10 , key11' taglist.populate_delete_list(tag_keys_to_delete) self.assertEqual(expected_delete_list, taglist.deletions)
def test_populate_delete_list__successfully_adds_one_key_to_delete_list( self): taglist = TagList(self.current_list) deletion_string = 'myuniquekey' taglist.populate_delete_list(deletion_string) self.assertEqual(['myuniquekey'], taglist.deletions)
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)
def test_validate_deletion__attempt_to_delete_non_existent_tag__raises_exception( self): taglist = TagList(self.current_list) taglist.populate_delete_list("key2") with self.assertRaises( tagops.InvalidAttemptToModifyTagsError) as context_manager: tagops.validate_deletions(taglist) expected_error_message = "Tags with the following keys can't be deleted because they don't exist:{0}{0} key2{0}".format( linesep) self.assertEqual(expected_error_message, context_manager.exception.message)
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)
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('')
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_deletion__attempt_to_delete_existing_tag__passes_validation( self): taglist = TagList(self.current_list) taglist.populate_delete_list("key1") tagops.validate_deletions(taglist)