コード例 #1
0
ファイル: createops.py プロジェクト: dangjoeltang/SimpleShop
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
コード例 #2
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
コード例 #3
0
    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)
コード例 #4
0
    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)
コード例 #5
0
    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)
コード例 #6
0
    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)
コード例 #7
0
    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)
コード例 #8
0
    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)
コード例 #9
0
    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)
コード例 #10
0
    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)
コード例 #11
0
    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)
コード例 #12
0
    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)
コード例 #13
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('')
コード例 #14
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('')
コード例 #15
0
    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)