)]}'
{"patrole_tempest_plugin/rbac_rule_validation.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"c925bd37794709e96c66609e2aceb061d7aaa1c5","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            finally:"},{"line_number":125,"context_line":"                test_obj.rbac_utils.switch_role(test_obj,"},{"line_number":126,"context_line":"                                                toggle_rbac_role\u003dFalse)"},{"line_number":127,"context_line":"                if hasattr(test_obj, \u0027rbac_callback\u0027):"},{"line_number":128,"context_line":"                    test_obj.rbac_callback()"},{"line_number":129,"context_line":"        return wrapper"},{"line_number":130,"context_line":"    return decorator"},{"line_number":131,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"bff0334d_b46b06ef","line":128,"range":{"start_line":127,"start_character":16,"end_line":128,"end_character":44},"updated":"2017-04-12 01:49:39.000000000","message":"This could be put in rbac_utils.switch_role.","commit_id":"6d9549484f1277cfa3c923a2da2e3f92add53d80"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"4d199ab214264f5f9ec1e2b412d5c8c9ee72239f","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            finally:"},{"line_number":125,"context_line":"                test_obj.rbac_utils.switch_role(test_obj,"},{"line_number":126,"context_line":"                                                toggle_rbac_role\u003dFalse)"},{"line_number":127,"context_line":"                if hasattr(test_obj, \u0027rbac_callback\u0027):"},{"line_number":128,"context_line":"                    test_obj.rbac_callback()"},{"line_number":129,"context_line":"        return wrapper"},{"line_number":130,"context_line":"    return decorator"},{"line_number":131,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"bff0334d_33fec96a","line":128,"range":{"start_line":127,"start_character":16,"end_line":128,"end_character":44},"in_reply_to":"bff0334d_b46b06ef","updated":"2017-04-12 19:35:12.000000000","message":"Never mind. This can be removed. It\u0027s already inside switch_role.","commit_id":"6d9549484f1277cfa3c923a2da2e3f92add53d80"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"bb7b90a548413ff81ab59d76dea26ffb10604ec7","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            finally:"},{"line_number":125,"context_line":"                test_obj.rbac_utils.switch_role(test_obj,"},{"line_number":126,"context_line":"                                                toggle_rbac_role\u003dFalse)"},{"line_number":127,"context_line":"                if hasattr(test_obj, \u0027rbac_callback\u0027):"},{"line_number":128,"context_line":"                    test_obj.rbac_callback()"},{"line_number":129,"context_line":"        return wrapper"},{"line_number":130,"context_line":"    return decorator"},{"line_number":131,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9ff52f3f_446605f0","line":128,"range":{"start_line":127,"start_character":16,"end_line":128,"end_character":44},"updated":"2017-04-13 16:09:38.000000000","message":"Remove -- already executed in rbac_utils.switch_role above.","commit_id":"3aecba0df4fb64a874bb11322ecb96bf8f5099e4"}],"patrole_tempest_plugin/rbac_utils.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"c925bd37794709e96c66609e2aceb061d7aaa1c5","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                time.sleep(1)"},{"line_number":93,"context_line":"            test_obj.auth_provider.set_auth()"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"            if hasattr(test_obj, \u0027rbac_callback\u0027):"},{"line_number":96,"context_line":"                test_obj.rbac_callback()"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _add_role_to_user(self, role_id):"},{"line_number":99,"context_line":"        role_already_present \u003d self._clear_user_roles(role_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bff0334d_14a51247","line":96,"range":{"start_line":95,"start_character":12,"end_line":96,"end_character":40},"updated":"2017-04-12 01:49:39.000000000","message":"This could be put in rbac_utils.switch_role.","commit_id":"6d9549484f1277cfa3c923a2da2e3f92add53d80"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"4d199ab214264f5f9ec1e2b412d5c8c9ee72239f","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                time.sleep(1)"},{"line_number":93,"context_line":"            test_obj.auth_provider.set_auth()"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"            if hasattr(test_obj, \u0027rbac_callback\u0027):"},{"line_number":96,"context_line":"                test_obj.rbac_callback()"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _add_role_to_user(self, role_id):"},{"line_number":99,"context_line":"        role_already_present \u003d self._clear_user_roles(role_id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"bff0334d_1301856a","line":96,"range":{"start_line":95,"start_character":12,"end_line":96,"end_character":40},"in_reply_to":"bff0334d_14a51247","updated":"2017-04-12 19:35:12.000000000","message":"Never mind, this is inside switch_role already. Disregard.","commit_id":"6d9549484f1277cfa3c923a2da2e3f92add53d80"}],"patrole_tempest_plugin/tests/api/orchestration/rbac_base.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"a9ccac8e74ff886037e83de024f91675ad617fc7","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        if admin_credentials:"},{"line_number":37,"context_line":"            self.admin_username \u003d admin_credentials.username"},{"line_number":38,"context_line":"            self.admin_password \u003d admin_credentials.password"},{"line_number":39,"context_line":"            self.admin_tenant_name \u003d admin_credentials.project_name"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        self.username \u003d credentials.username"},{"line_number":42,"context_line":"        self.password \u003d credentials.password"}],"source_content_type":"text/x-python","patch_set":9,"id":"9ff52f3f_7f89af24","line":39,"range":{"start_line":39,"start_character":12,"end_line":39,"end_character":67},"updated":"2017-04-12 21:48:35.000000000","message":"Heat just made a commit to \"Use project_name/admin_project_name config option.\" Change to admin_project_name.","commit_id":"8aa0167118007e509733ef5068ea15d77b8a41e8"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"a9ccac8e74ff886037e83de024f91675ad617fc7","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        self.username \u003d credentials.username"},{"line_number":42,"context_line":"        self.password \u003d credentials.password"},{"line_number":43,"context_line":"        self.tenant_name \u003d credentials.tenant_name"},{"line_number":44,"context_line":"        try:"},{"line_number":45,"context_line":"            self.user_domain_id \u003d credentials.user_domain_id"},{"line_number":46,"context_line":"            self.project_domain_id \u003d credentials.project_domain_id"}],"source_content_type":"text/x-python","patch_set":9,"id":"9ff52f3f_ff7c9f21","line":43,"range":{"start_line":43,"start_character":13,"end_line":43,"end_character":24},"updated":"2017-04-12 21:48:35.000000000","message":"project_name","commit_id":"8aa0167118007e509733ef5068ea15d77b8a41e8"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"a9ccac8e74ff886037e83de024f91675ad617fc7","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.username \u003d credentials.username"},{"line_number":42,"context_line":"        self.password \u003d credentials.password"},{"line_number":43,"context_line":"        self.tenant_name \u003d credentials.tenant_name"},{"line_number":44,"context_line":"        try:"},{"line_number":45,"context_line":"            self.user_domain_id \u003d credentials.user_domain_id"},{"line_number":46,"context_line":"            self.project_domain_id \u003d credentials.project_domain_id"},{"line_number":47,"context_line":"            self.user_domain_name \u003d credentials.user_domain_name"}],"source_content_type":"text/x-python","patch_set":9,"id":"9ff52f3f_3f34474a","line":44,"range":{"start_line":44,"start_character":8,"end_line":44,"end_character":12},"updated":"2017-04-12 21:48:35.000000000","message":"if auth_version \u003d\u003d \u0027v3\u0027:\n\n(You can get auth_version from cls.get_identity_version() from BaseOrchestrationRbacTest, I believe.)","commit_id":"8aa0167118007e509733ef5068ea15d77b8a41e8"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"a9ccac8e74ff886037e83de024f91675ad617fc7","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            self.project_domain_id \u003d credentials.project_domain_id"},{"line_number":47,"context_line":"            self.user_domain_name \u003d credentials.user_domain_name"},{"line_number":48,"context_line":"            self.project_domain_name \u003d credentials.project_domain_name"},{"line_number":49,"context_line":"        except AttributeError as e:"},{"line_number":50,"context_line":"            LOG.debug(\"Keystone v3 is required to run Patrole tests.\")"},{"line_number":51,"context_line":"            raise e"},{"line_number":52,"context_line":"        self.region \u003d CONF.identity.region"},{"line_number":53,"context_line":"        self.auth_url \u003d CONF.identity.uri_v3"},{"line_number":54,"context_line":"        self.disable_ssl_certificate_validation \u003d False"}],"source_content_type":"text/x-python","patch_set":9,"id":"9ff52f3f_1f04e37a","line":51,"range":{"start_line":49,"start_character":8,"end_line":51,"end_character":19},"updated":"2017-04-12 21:48:35.000000000","message":"This is untrue. Remove.","commit_id":"8aa0167118007e509733ef5068ea15d77b8a41e8"},{"author":{"_account_id":23185,"name":"Samantha Blanco","email":"samantha.blanco@att.com","username":"sblanco"},"change_message_id":"2592083d090dd34836f3e07e4b120c1071f74547","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            self.project_domain_id \u003d credentials.project_domain_id"},{"line_number":47,"context_line":"            self.user_domain_name \u003d credentials.user_domain_name"},{"line_number":48,"context_line":"            self.project_domain_name \u003d credentials.project_domain_name"},{"line_number":49,"context_line":"        except AttributeError as e:"},{"line_number":50,"context_line":"            LOG.debug(\"Keystone v3 is required to run Patrole tests.\")"},{"line_number":51,"context_line":"            raise e"},{"line_number":52,"context_line":"        self.region \u003d CONF.identity.region"},{"line_number":53,"context_line":"        self.auth_url \u003d CONF.identity.uri_v3"},{"line_number":54,"context_line":"        self.disable_ssl_certificate_validation \u003d False"}],"source_content_type":"text/x-python","patch_set":9,"id":"9ff52f3f_ffb01f8e","line":51,"range":{"start_line":49,"start_character":8,"end_line":51,"end_character":19},"in_reply_to":"9ff52f3f_1f04e37a","updated":"2017-04-12 21:57:14.000000000","message":"This error is thrown if auth version !\u003d v3. tempest.conf doesn\u0027t require users to set the values in the try block and they don\u0027t exist in the generated credentials if auth version \u003d\u003d v2. If these values are missing, clients.ClientManager throws an error.\nI think this is something we should catch. I agree the error message is incorrect and I\u0027m open to suggestions/improvements. However, I don\u0027t think removing this is the way to go.","commit_id":"8aa0167118007e509733ef5068ea15d77b8a41e8"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"9e9b7d245481613d193bf09f9c4dd35241eab701","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                self.project_domain_id \u003d credentials.project_domain_id"},{"line_number":47,"context_line":"                self.user_domain_name \u003d credentials.user_domain_name"},{"line_number":48,"context_line":"                self.project_domain_name \u003d credentials.project_domain_name"},{"line_number":49,"context_line":"            else:"},{"line_number":50,"context_line":"                if (CONF.heat_plugin.user_domain_id and"},{"line_number":51,"context_line":"                    CONF.heat_plugin.project_domain_id and"},{"line_number":52,"context_line":"                    CONF.heat_plugin.user_domain_name and"},{"line_number":53,"context_line":"                    CONF.heat_plugin.project_domain_name):"}],"source_content_type":"text/x-python","patch_set":10,"id":"9ff52f3f_c5346ee1","line":50,"range":{"start_line":49,"start_character":12,"end_line":50,"end_character":55},"updated":"2017-04-12 22:55:08.000000000","message":"I don\u0027t understand why this \"else\" block is needed. This else is only useful for keystone v2 auth. But all the keystone v2 auth data has already been set by this point, since keystone v2 isn\u0027t domain-aware.","commit_id":"e5788e2842d76caae380d82268ef237e2c9be613"},{"author":{"_account_id":23185,"name":"Samantha Blanco","email":"samantha.blanco@att.com","username":"sblanco"},"change_message_id":"a5eab5f2dba502ddd653d7e1d2dcd2d4f4555d4b","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                self.project_domain_id \u003d credentials.project_domain_id"},{"line_number":47,"context_line":"                self.user_domain_name \u003d credentials.user_domain_name"},{"line_number":48,"context_line":"                self.project_domain_name \u003d credentials.project_domain_name"},{"line_number":49,"context_line":"            else:"},{"line_number":50,"context_line":"                if (CONF.heat_plugin.user_domain_id and"},{"line_number":51,"context_line":"                    CONF.heat_plugin.project_domain_id and"},{"line_number":52,"context_line":"                    CONF.heat_plugin.user_domain_name and"},{"line_number":53,"context_line":"                    CONF.heat_plugin.project_domain_name):"}],"source_content_type":"text/x-python","patch_set":10,"id":"9ff52f3f_269f8e51","line":50,"range":{"start_line":49,"start_character":12,"end_line":50,"end_character":55},"in_reply_to":"9ff52f3f_c5346ee1","updated":"2017-04-13 14:38:54.000000000","message":"Currently, if user and project domain names and ids are missing, HeatConf throws an error and the test fails. This occurs regardless of auth version as these values are set before checking if Keystone is v2 or v3 [0]. I\u0027ve proposed a change in Heat to resolve this [1].\n\n[0] https://github.com/openstack/heat/blob/master/heat_integrationtests/common/clients.py#L126\n[1] https://review.openstack.org/#/c/456647/","commit_id":"e5788e2842d76caae380d82268ef237e2c9be613"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"9e9b7d245481613d193bf09f9c4dd35241eab701","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                self.project_domain_name \u003d credentials.project_domain_name"},{"line_number":49,"context_line":"            else:"},{"line_number":50,"context_line":"                if (CONF.heat_plugin.user_domain_id and"},{"line_number":51,"context_line":"                    CONF.heat_plugin.project_domain_id and"},{"line_number":52,"context_line":"                    CONF.heat_plugin.user_domain_name and"},{"line_number":53,"context_line":"                    CONF.heat_plugin.project_domain_name):"},{"line_number":54,"context_line":"                        self.user_domain_id \u003d CONF.heat_plugin.user_domain_id"},{"line_number":55,"context_line":"                        self.project_domain_id \u003d\\"},{"line_number":56,"context_line":"                            CONF.heat_plugin.project_domain_id"},{"line_number":57,"context_line":"                        self.user_domain_name \u003d\\"},{"line_number":58,"context_line":"                            CONF.heat_plugin.user_domain_name"},{"line_number":59,"context_line":"                        self.project_domain_name \u003d\\"},{"line_number":60,"context_line":"                            CONF.heat_plugin.project_domain_name"},{"line_number":61,"context_line":"                else:"},{"line_number":62,"context_line":"                    raise AttributeError"},{"line_number":63,"context_line":"        except AttributeError as e:"}],"source_content_type":"text/x-python","patch_set":10,"id":"9ff52f3f_020dac3d","line":60,"range":{"start_line":51,"start_character":20,"end_line":60,"end_character":64},"updated":"2017-04-12 22:55:08.000000000","message":"This\u0027ll cause authentication issues. You can\u0027t mix credentials that are dynamically created with credentials that are pre-provisioned. \n\nIf an error is occurring on Heat\u0027s end, it\u0027s probably because of [0]. However, clients.ClientManager has appropriate logic for initializing v2 versus v3 auth already [1]. I\u0027d bet that auth_url doesn\u0027t contain the formatting that clients.ClientManager expects.\n\n[0] https://github.com/openstack/heat/blob/master/heat_integrationtests/common/clients.py#L75\n[1] https://github.com/openstack/heat/blob/master/heat_integrationtests/common/clients.py#L137","commit_id":"e5788e2842d76caae380d82268ef237e2c9be613"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"d865f0faa71b8f900776428c3ac128d733eee721","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            err_msg \u003d \"Missing attribute. Please use Keystone v3 or set missing values in the [heat_plugin] section of tempest.conf.\""},{"line_number":65,"context_line":"            raise exc.RbacResourceSetupFailed(err_msg)"},{"line_number":66,"context_line":"        self.region \u003d CONF.identity.region"},{"line_number":67,"context_line":"        self.auth_url \u003d CONF.identity.uri_v3"},{"line_number":68,"context_line":"        self.disable_ssl_certificate_validation \u003d False"},{"line_number":69,"context_line":"        self.ca_file \u003d None"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9ff52f3f_859ae6c2","line":67,"range":{"start_line":67,"start_character":24,"end_line":67,"end_character":44},"updated":"2017-04-12 22:57:39.000000000","message":"This needs to change depending on whether auth_version is v2 or v3. I think that\u0027s where the issue is.","commit_id":"e5788e2842d76caae380d82268ef237e2c9be613"},{"author":{"_account_id":23185,"name":"Samantha Blanco","email":"samantha.blanco@att.com","username":"sblanco"},"change_message_id":"a5eab5f2dba502ddd653d7e1d2dcd2d4f4555d4b","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            err_msg \u003d \"Missing attribute. Please use Keystone v3 or set missing values in the [heat_plugin] section of tempest.conf.\""},{"line_number":65,"context_line":"            raise exc.RbacResourceSetupFailed(err_msg)"},{"line_number":66,"context_line":"        self.region \u003d CONF.identity.region"},{"line_number":67,"context_line":"        self.auth_url \u003d CONF.identity.uri_v3"},{"line_number":68,"context_line":"        self.disable_ssl_certificate_validation \u003d False"},{"line_number":69,"context_line":"        self.ca_file \u003d None"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9ff52f3f_06e48aab","line":67,"range":{"start_line":67,"start_character":24,"end_line":67,"end_character":44},"in_reply_to":"9ff52f3f_859ae6c2","updated":"2017-04-13 14:38:54.000000000","message":"I agree the auth version and auth URL should match.","commit_id":"e5788e2842d76caae380d82268ef237e2c9be613"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"bb7b90a548413ff81ab59d76dea26ffb10604ec7","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":12,"context_line":"#    under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"from oslo_log import log as logging"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from tempest import config"},{"line_number":17,"context_line":"import tempest.test"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ff52f3f_845bed2c","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":35},"updated":"2017-04-13 16:09:38.000000000","message":"Unused.","commit_id":"3aecba0df4fb64a874bb11322ecb96bf8f5099e4"}],"patrole_tempest_plugin/tests/api/orchestration/test_resource_types_rbac.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"c925bd37794709e96c66609e2aceb061d7aaa1c5","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo_log import log as logging"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from tempest.lib import decorators"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"bff0334d_349136f2","line":16,"range":{"start_line":16,"start_character":0,"end_line":16,"end_character":35},"updated":"2017-04-12 01:49:39.000000000","message":"Unused.","commit_id":"6d9549484f1277cfa3c923a2da2e3f92add53d80"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"c925bd37794709e96c66609e2aceb061d7aaa1c5","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from patrole_tempest_plugin import rbac_rule_validation"},{"line_number":21,"context_line":"from patrole_tempest_plugin.tests.api.orchestration import rbac_base"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class ResourceTypesRbacTest(rbac_base.BaseOrchestrationRbacTest):"}],"source_content_type":"text/x-python","patch_set":7,"id":"bff0334d_748b3ec2","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":33},"updated":"2017-04-12 01:49:39.000000000","message":"Unused.","commit_id":"6d9549484f1277cfa3c923a2da2e3f92add53d80"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"c925bd37794709e96c66609e2aceb061d7aaa1c5","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        # in case there are none, skip these tests, as that implies the system"},{"line_number":36,"context_line":"        # is misconfigured."},{"line_number":37,"context_line":"        if cls.resource_types:"},{"line_number":38,"context_line":"            cls.resource_type_name \u003d cls.resource_types[0]._info"},{"line_number":39,"context_line":"        else:"},{"line_number":40,"context_line":"            raise cls.skipException(\u0027No resource types found.\u0027)"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"bff0334d_f4974eeb","line":38,"range":{"start_line":38,"start_character":59,"end_line":38,"end_character":64},"updated":"2017-04-12 01:49:39.000000000","message":"Use a public method instead, like to_dict().","commit_id":"6d9549484f1277cfa3c923a2da2e3f92add53d80"}],"patrole_tempest_plugin/tests/api/orchestration/test_soft_config_rbac.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"c925bd37794709e96c66609e2aceb061d7aaa1c5","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from patrole_tempest_plugin import rbac_rule_validation"},{"line_number":20,"context_line":"from patrole_tempest_plugin.tests.api.orchestration import rbac_base"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class TestRbacSoftwareConfig(rbac_base.BaseOrchestrationRbacTest):"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"bff0334d_54d83aed","line":21,"updated":"2017-04-12 01:49:39.000000000","message":"This file should be renamed to test_software_config_rbac","commit_id":"6d9549484f1277cfa3c923a2da2e3f92add53d80"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"c925bd37794709e96c66609e2aceb061d7aaa1c5","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from patrole_tempest_plugin.tests.api.orchestration import rbac_base"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class TestRbacSoftwareConfig(rbac_base.BaseOrchestrationRbacTest):"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    @classmethod"},{"line_number":26,"context_line":"    def setup_clients(cls):"}],"source_content_type":"text/x-python","patch_set":7,"id":"bff0334d_94d242d0","line":23,"range":{"start_line":23,"start_character":6,"end_line":23,"end_character":28},"updated":"2017-04-12 01:49:39.000000000","message":"SoftwareConfigRbacTest","commit_id":"6d9549484f1277cfa3c923a2da2e3f92add53d80"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"c925bd37794709e96c66609e2aceb061d7aaa1c5","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    @classmethod"},{"line_number":51,"context_line":"    def _config_create(self):"},{"line_number":52,"context_line":"        conf_name \u003d data_utils.rand_name(\u0027heat_config\u0027)"},{"line_number":53,"context_line":"        api_config \u003d self.client.software_configs.create(name\u003dconf_name)._info"},{"line_number":54,"context_line":"        config_id \u003d api_config[\u0027id\u0027]"},{"line_number":55,"context_line":"        self.configs.append(config_id)"},{"line_number":56,"context_line":"        return config_id"}],"source_content_type":"text/x-python","patch_set":7,"id":"bff0334d_d43c4a94","line":53,"range":{"start_line":53,"start_character":73,"end_line":53,"end_character":78},"updated":"2017-04-12 01:49:39.000000000","message":"to_dict() is better since it\u0027s not a private var.","commit_id":"6d9549484f1277cfa3c923a2da2e3f92add53d80"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"c925bd37794709e96c66609e2aceb061d7aaa1c5","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    @classmethod"},{"line_number":59,"context_line":"    def _deployment_create(self):"},{"line_number":60,"context_line":"        deployment \u003d self.client.software_deployments.create("},{"line_number":61,"context_line":"            config_id\u003dself.config_id, server_id\u003dself.server_id)._info"},{"line_number":62,"context_line":"        deployment_id \u003d deployment[\u0027id\u0027]"},{"line_number":63,"context_line":"        self.deployments.append(deployment_id)"},{"line_number":64,"context_line":"        return deployment_id"}],"source_content_type":"text/x-python","patch_set":7,"id":"bff0334d_f4398ea3","line":61,"range":{"start_line":61,"start_character":64,"end_line":61,"end_character":69},"updated":"2017-04-12 01:49:39.000000000","message":"to_dict() is better since it\u0027s not a private var.","commit_id":"6d9549484f1277cfa3c923a2da2e3f92add53d80"}]}
