)]}'
{"etc/tempest.conf.sample":[{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"f06c466e08580e5539a0a01691234c16aadca285","unresolved":false,"context_lines":[{"line_number":636,"context_line":""},{"line_number":637,"context_line":"# A list of enabled extensions with a special entry all which"},{"line_number":638,"context_line":"# indicates every extension is enabled (list value)"},{"line_number":639,"context_line":"#api_extensions\u003dall"},{"line_number":640,"context_line":""},{"line_number":641,"context_line":""},{"line_number":642,"context_line":"[service_available]"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"AAAATn%2F%2BRXs%3D","line":639,"updated":"2013-11-28 03:25:03.000000000","message":"I think that we probably want to configuration entries - one that allows you to list only those which are enabled. And one which allows you to list only those which are disabled. \n\nBecause a likely case is where you just want to say that a single extension has been disabled and listing all the extensions except one is tedious, error prone and vulnerable to bit rot.\n\nOr if you want to keep it a single config then extend the syntax a bit.\n\neg\napi_extensions\u003dfoo bar baz\n\nwould mean what it currently does\n\napi_extensions\u003dall -foo -bar\n\nwould mean everything but foo and bar. Might even be able to drop the \u0027all\u0027. So an empty string implicitly means all.","commit_id":"df0c373fa21af11392770792be3ccaa992313de8"}],"tempest/api/compute/admin/test_flavors.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"360223af6767e86177ebddd0184b342ff9a7a805","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    @classmethod"},{"line_number":35,"context_line":"    def setUpClass(cls):"},{"line_number":36,"context_line":"        super(FlavorsAdminTestJSON, cls).setUpClass()"},{"line_number":37,"context_line":"        if not test.is_extension_enabled(\u0027FlavorExtraData\u0027, \u0027compute\u0027):"},{"line_number":38,"context_line":"            msg \u003d \"FlavorExtraData extension not enabled.\""},{"line_number":39,"context_line":"            raise cls.skipException(msg)"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F9gvA%3D","line":37,"updated":"2013-12-10 19:01:47.000000000","message":"can we convert this to a decorator on setUpClass instead?","commit_id":"e3d26143ab38f7496ece831d2cc43effc2d39777"}],"tempest/api/compute/admin/test_flavors_access.py":[{"author":{"_account_id":6983,"name":"YangLei","email":"iamhappg@aliyun.com","username":"YangLei"},"change_message_id":"610bfb303bf84b97690df0ca0735093402688249","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    def setUpClass(cls):"},{"line_number":34,"context_line":"        super(FlavorsAccessTestJSON, cls).setUpClass()"},{"line_number":35,"context_line":"        if not test.is_extension_enabled(\u0027FlavorExtraData\u0027, \u0027compute\u0027):"},{"line_number":36,"context_line":"            msg \u003d \"FlavorExtraData extension not enabled.\""},{"line_number":37,"context_line":"            raise cls.skipException(msg)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        cls.client \u003d cls.os_adm.flavors_client"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BRU4%3D","line":36,"updated":"2013-11-28 03:47:45.000000000","message":"It seem as if we can use any string instead of \u0027FlavorExtraData\u0027 here.\nCan we create a list of the extension_name which we will use?","commit_id":"df0c373fa21af11392770792be3ccaa992313de8"}],"tempest/test.py":[{"author":{"_account_id":6796,"name":"Giulio Fidente","email":"gfidente@redhat.com","username":"gfidente"},"change_message_id":"7d58213d5c2c36b28a4210ad8c9076e67efa66b5","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    def decorator(func):"},{"line_number":133,"context_line":"        @functools.wraps(func)"},{"line_number":134,"context_line":"        def wrapper(*func_args, **func_kwargs):"},{"line_number":135,"context_line":"            if is_extension_enabled(kwargs[\u0027extension\u0027], kwargs[\u0027service\u0027]):"},{"line_number":136,"context_line":"                msg \u003d \"Skipped because %s extension: %s is not enabled\" % ("},{"line_number":137,"context_line":"                    kwargs[\u0027service\u0027], kwargs[\u0027extension\u0027])"},{"line_number":138,"context_line":"                raise testtools.TestCase.skipException(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F9vq0%3D","line":135,"updated":"2013-12-06 13:37:03.000000000","message":"shouldn\u0027t this be \"if not\" ?","commit_id":"df0c373fa21af11392770792be3ccaa992313de8"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"939a117efb1dea6424a98dfab7959c80efe5ac06","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    def decorator(func):"},{"line_number":133,"context_line":"        @functools.wraps(func)"},{"line_number":134,"context_line":"        def wrapper(*func_args, **func_kwargs):"},{"line_number":135,"context_line":"            if is_extension_enabled(kwargs[\u0027extension\u0027], kwargs[\u0027service\u0027]):"},{"line_number":136,"context_line":"                msg \u003d \"Skipped because %s extension: %s is not enabled\" % ("},{"line_number":137,"context_line":"                    kwargs[\u0027service\u0027], kwargs[\u0027extension\u0027])"},{"line_number":138,"context_line":"                raise testtools.TestCase.skipException(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F9vQA%3D","line":135,"in_reply_to":"AAAATn%2F9vq0%3D","updated":"2013-12-06 15:13:00.000000000","message":"Oops, nice catch.","commit_id":"df0c373fa21af11392770792be3ccaa992313de8"},{"author":{"_account_id":6983,"name":"YangLei","email":"iamhappg@aliyun.com","username":"YangLei"},"change_message_id":"610bfb303bf84b97690df0ca0735093402688249","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        \u0027compute_v3\u0027: configs.compute_feature_enabled.api_v3_extensions,"},{"line_number":152,"context_line":"        \u0027volume\u0027: configs.volume_feature_enabled.api_extensions,"},{"line_number":153,"context_line":"        \u0027network\u0027: configs.network_feature_enabled.api_extensions,"},{"line_number":154,"context_line":"    }"},{"line_number":155,"context_line":"    if config_dict[service][0] \u003d\u003d \u0027all\u0027:"},{"line_number":156,"context_line":"        return True"},{"line_number":157,"context_line":"    if extension_name in config_dict[service]:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BRVg%3D","line":154,"updated":"2013-11-28 03:47:45.000000000","message":"Suggest that use the a variable to store the string \u0027compute\u0027.\nthen we can use the variable here and the caller in test_flavors_extra_specs.py:\ntest.is_extension_enabled(\u0027FlavorExtraData\u0027, \u0027compute\u0027)","commit_id":"df0c373fa21af11392770792be3ccaa992313de8"}]}
