)]}'
{"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":"1b9c24368defdc9d5e52c644a2d325ca4c5590eb","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        Automatically switches to admin role after test execution."},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        :param test_obj: Instance of ``tempest.test.BaseTestCase``."},{"line_number":83,"context_line":"        :returns: None"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        .. warning::"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_295619cf","side":"PARENT","line":82,"range":{"start_line":82,"start_character":8,"end_line":82,"end_character":67},"updated":"2018-11-19 23:36:06.000000000","message":"Yet this is still a param on L99 on the right.","commit_id":"b5d01cc3b563ba2d37de3e7df19bb18e3986d301"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"1b9c24368defdc9d5e52c644a2d325ca4c5590eb","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                super(BaseRbacTest, cls).skip_checks()"},{"line_number":48,"context_line":"                cls.skip_rbac_checks()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"            @classmethod"},{"line_number":51,"context_line":"            def setup_clients(cls):"},{"line_number":52,"context_line":"                super(BaseRbacTest, cls).setup_clients()"},{"line_number":53,"context_line":"                cls.setup_rbac_utils()"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    Utility class responsible for switching ``os_primary`` role."},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_89c2cd53","line":53,"range":{"start_line":50,"start_character":0,"end_line":53,"end_character":38},"updated":"2018-11-19 23:36:06.000000000","message":"setup_rbac_utils is removed on L261 below, so should remove this.","commit_id":"054568ae9ba735d196fd97082c88f3ce9bd4b276"},{"author":{"_account_id":8911,"name":"Sergey Vilgelm","email":"sergey@vilgelm.info","username":"sergey.vilgelm"},"change_message_id":"bf6c39d2b6a781e41ceb047103619de0657698c5","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                super(BaseRbacTest, cls).skip_checks()"},{"line_number":48,"context_line":"                cls.skip_rbac_checks()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"            @classmethod"},{"line_number":51,"context_line":"            def setup_clients(cls):"},{"line_number":52,"context_line":"                super(BaseRbacTest, cls).setup_clients()"},{"line_number":53,"context_line":"                cls.setup_rbac_utils()"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    Utility class responsible for switching ``os_primary`` role."},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_1a6919bf","line":53,"range":{"start_line":50,"start_character":0,"end_line":53,"end_character":38},"in_reply_to":"3f79a3b5_89c2cd53","updated":"2018-11-20 04:11:09.000000000","message":"yeah","commit_id":"054568ae9ba735d196fd97082c88f3ce9bd4b276"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"1b9c24368defdc9d5e52c644a2d325ca4c5590eb","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                super(BaseRbacTest, cls).setup_clients()"},{"line_number":53,"context_line":"                cls.setup_rbac_utils()"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    Utility class responsible for switching ``os_primary`` role."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    This class is responsible for overriding the value of the primary Tempest"},{"line_number":58,"context_line":"    credential\u0027s role (i.e. ``os_primary`` role). By doing so, it is possible"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_6933b1c4","line":55,"range":{"start_line":55,"start_character":4,"end_line":55,"end_character":64},"updated":"2018-11-19 23:36:06.000000000","message":"Redundant with L57.","commit_id":"054568ae9ba735d196fd97082c88f3ce9bd4b276"},{"author":{"_account_id":8911,"name":"Sergey Vilgelm","email":"sergey@vilgelm.info","username":"sergey.vilgelm"},"change_message_id":"bf6c39d2b6a781e41ceb047103619de0657698c5","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                super(BaseRbacTest, cls).setup_clients()"},{"line_number":53,"context_line":"                cls.setup_rbac_utils()"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    Utility class responsible for switching ``os_primary`` role."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    This class is responsible for overriding the value of the primary Tempest"},{"line_number":58,"context_line":"    credential\u0027s role (i.e. ``os_primary`` role). By doing so, it is possible"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_7a728db1","line":55,"range":{"start_line":55,"start_character":4,"end_line":55,"end_character":64},"in_reply_to":"3f79a3b5_6933b1c4","updated":"2018-11-20 04:11:09.000000000","message":":) I just copied from mixin class and didn\u0027t remove, anyway I will rewrite this module, it is a second attempt","commit_id":"054568ae9ba735d196fd97082c88f3ce9bd4b276"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"1b9c24368defdc9d5e52c644a2d325ca4c5590eb","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    Utility class responsible for switching ``os_primary`` role."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    This class is responsible for overriding the value of the primary Tempest"},{"line_number":58,"context_line":"    credential\u0027s role (i.e. ``os_primary`` role). By doing so, it is possible"},{"line_number":59,"context_line":"    to seamlessly swap between admin credentials, needed for setup and clean"},{"line_number":60,"context_line":"    up, and primary credentials, needed to perform the API call which does"},{"line_number":61,"context_line":"    policy enforcement. The primary credentials always cycle between roles"},{"line_number":62,"context_line":"    defined by ``CONF.identity.admin_role`` and"},{"line_number":63,"context_line":"    ``CONF.patrole.rbac_test_roles``."},{"line_number":64,"context_line":"    \"\"\""},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    admin_role_id \u003d None"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_e93ee186","line":63,"range":{"start_line":57,"start_character":0,"end_line":63,"end_character":37},"updated":"2018-11-19 23:36:06.000000000","message":"Should move to L37ish.","commit_id":"054568ae9ba735d196fd97082c88f3ce9bd4b276"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"9c08a0dc7cd9527e22134d1adc613ef54d1a7b14","unresolved":false,"context_lines":[{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        Automatically switches to admin role after test execution."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        :param test_obj: Instance of ``tempest.test.BaseTestCase``."},{"line_number":229,"context_line":"        :returns: None"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        .. warning::"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_08fced6d","side":"PARENT","line":228,"range":{"start_line":228,"start_character":7,"end_line":228,"end_character":67},"updated":"2019-02-01 23:12:19.000000000","message":"Not sure why this was removed since it\u0027s still a param with now a default value of None.","commit_id":"11e0c66cf8e6613deebd8c360622fdbc4563f2e8"},{"author":{"_account_id":8911,"name":"Sergey Vilgelm","email":"sergey@vilgelm.info","username":"sergey.vilgelm"},"change_message_id":"b185b37c81435f0f340f834b60e060c0d2aa78d3","unresolved":false,"context_lines":[{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        Automatically switches to admin role after test execution."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        :param test_obj: Instance of ``tempest.test.BaseTestCase``."},{"line_number":229,"context_line":"        :returns: None"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        .. warning::"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_483995ef","side":"PARENT","line":228,"range":{"start_line":228,"start_character":7,"end_line":228,"end_character":67},"in_reply_to":"9fdfeff1_082aadd9","updated":"2019-02-01 23:34:50.000000000","message":"Oh yeah, I recall, I removed because we don\u0027t need the test_obj anymore","commit_id":"11e0c66cf8e6613deebd8c360622fdbc4563f2e8"},{"author":{"_account_id":8911,"name":"Sergey Vilgelm","email":"sergey@vilgelm.info","username":"sergey.vilgelm"},"change_message_id":"fdafb5138327fc4038535cd51d7c74cbe0cee499","unresolved":false,"context_lines":[{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        Automatically switches to admin role after test execution."},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        :param test_obj: Instance of ``tempest.test.BaseTestCase``."},{"line_number":229,"context_line":"        :returns: None"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        .. warning::"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_082aadd9","side":"PARENT","line":228,"range":{"start_line":228,"start_character":7,"end_line":228,"end_character":67},"in_reply_to":"9fdfeff1_08fced6d","updated":"2019-02-01 23:16:49.000000000","message":"hmmmm, I didn\u0027t touch it, somehow removed by itself :)","commit_id":"11e0c66cf8e6613deebd8c360622fdbc4563f2e8"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"9c08a0dc7cd9527e22134d1adc613ef54d1a7b14","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                super(BaseRbacTest, cls).setup_clients()"},{"line_number":124,"context_line":"                cls.setup_rbac_utils()"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    Utility class responsible for switching ``os_primary`` role."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    This class is responsible for overriding the value of the primary Tempest"},{"line_number":129,"context_line":"    credential\u0027s role (i.e. ``os_primary`` role). By doing so, it is possible"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_8808dd91","line":126,"range":{"start_line":126,"start_character":4,"end_line":126,"end_character":64},"updated":"2019-02-01 23:12:19.000000000","message":"Kind of redundant with the sentence on L128-129.","commit_id":"54b8c6074f05f079212511a16519b809f0725029"},{"author":{"_account_id":8911,"name":"Sergey Vilgelm","email":"sergey@vilgelm.info","username":"sergey.vilgelm"},"change_message_id":"fdafb5138327fc4038535cd51d7c74cbe0cee499","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                super(BaseRbacTest, cls).setup_clients()"},{"line_number":124,"context_line":"                cls.setup_rbac_utils()"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    Utility class responsible for switching ``os_primary`` role."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    This class is responsible for overriding the value of the primary Tempest"},{"line_number":129,"context_line":"    credential\u0027s role (i.e. ``os_primary`` role). By doing so, it is possible"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_286a1119","line":126,"range":{"start_line":126,"start_character":4,"end_line":126,"end_character":64},"in_reply_to":"9fdfeff1_8808dd91","updated":"2019-02-01 23:16:49.000000000","message":"It\u0027s now just a mix of doctoring from RbacUtils class and Mixin. I will re-write it later, when everything will work","commit_id":"54b8c6074f05f079212511a16519b809f0725029"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"9c08a0dc7cd9527e22134d1adc613ef54d1a7b14","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        return list(res)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    @contextlib.contextmanager"},{"line_number":254,"context_line":"    def override_role(self, test_obj\u003dNone):"},{"line_number":255,"context_line":"        \"\"\"Override the role used by ``os_primary`` Tempest credentials."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        Temporarily change the role used by ``os_primary`` credentials to:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_c8f10597","line":254,"range":{"start_line":254,"start_character":28,"end_line":254,"end_character":42},"updated":"2019-02-01 23:12:19.000000000","message":"Oh, ok, this is not referenced below, so can be removed.","commit_id":"54b8c6074f05f079212511a16519b809f0725029"},{"author":{"_account_id":8911,"name":"Sergey Vilgelm","email":"sergey@vilgelm.info","username":"sergey.vilgelm"},"change_message_id":"989dbe58dae8ac51c185ce1192981a30ca909c21","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        return list(res)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    @contextlib.contextmanager"},{"line_number":254,"context_line":"    def override_role(self, test_obj\u003dNone):"},{"line_number":255,"context_line":"        \"\"\"Override the role used by ``os_primary`` Tempest credentials."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        Temporarily change the role used by ``os_primary`` credentials to:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_2b10cb4d","line":254,"range":{"start_line":254,"start_character":28,"end_line":254,"end_character":42},"in_reply_to":"9fdfeff1_08270dcc","updated":"2019-02-01 23:42:51.000000000","message":"I think it will be  removed in a follow up patch because I will need to re-write all `override_role` calls. I need it now for testing purpose, so I can see which test are failing because something wrong in the implementation, but not because I forgot to remove this parameter somewhere","commit_id":"54b8c6074f05f079212511a16519b809f0725029"},{"author":{"_account_id":8911,"name":"Sergey Vilgelm","email":"sergey@vilgelm.info","username":"sergey.vilgelm"},"change_message_id":"fdafb5138327fc4038535cd51d7c74cbe0cee499","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        return list(res)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    @contextlib.contextmanager"},{"line_number":254,"context_line":"    def override_role(self, test_obj\u003dNone):"},{"line_number":255,"context_line":"        \"\"\"Override the role used by ``os_primary`` Tempest credentials."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        Temporarily change the role used by ``os_primary`` credentials to:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_e86f2925","line":254,"range":{"start_line":254,"start_character":28,"end_line":254,"end_character":42},"in_reply_to":"9fdfeff1_c8f10597","updated":"2019-02-01 23:16:49.000000000","message":"I want to add a deprecation message here, just for backward compatibility","commit_id":"54b8c6074f05f079212511a16519b809f0725029"},{"author":{"_account_id":8911,"name":"Sergey Vilgelm","email":"sergey@vilgelm.info","username":"sergey.vilgelm"},"change_message_id":"b185b37c81435f0f340f834b60e060c0d2aa78d3","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        return list(res)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    @contextlib.contextmanager"},{"line_number":254,"context_line":"    def override_role(self, test_obj\u003dNone):"},{"line_number":255,"context_line":"        \"\"\"Override the role used by ``os_primary`` Tempest credentials."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        Temporarily change the role used by ``os_primary`` credentials to:"}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_08270dcc","line":254,"range":{"start_line":254,"start_character":28,"end_line":254,"end_character":42},"in_reply_to":"9fdfeff1_e86f2925","updated":"2019-02-01 23:34:50.000000000","message":"Or I can remove it, since anyway this code isn\u0027t backward compatible and all custom patrole tests must be rewritten\nLike https://github.com/tungstenfabric/tungsten-tempest","commit_id":"54b8c6074f05f079212511a16519b809f0725029"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"9c08a0dc7cd9527e22134d1adc613ef54d1a7b14","unresolved":false,"context_lines":[{"line_number":407,"context_line":"        return False"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"    @contextlib.contextmanager"},{"line_number":410,"context_line":"    def override_role_and_validate_list(self, test_obj\u003dNone,"},{"line_number":411,"context_line":"                                        admin_resources\u003dNone,"},{"line_number":412,"context_line":"                                        admin_resource_id\u003dNone):"},{"line_number":413,"context_line":"        \"\"\"Call ``override_role`` and validate RBAC for a list API action."}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_283c512d","line":410,"range":{"start_line":410,"start_character":46,"end_line":410,"end_character":60},"updated":"2019-02-01 23:12:19.000000000","message":"This one can be removed.","commit_id":"54b8c6074f05f079212511a16519b809f0725029"},{"author":{"_account_id":8911,"name":"Sergey Vilgelm","email":"sergey@vilgelm.info","username":"sergey.vilgelm"},"change_message_id":"fdafb5138327fc4038535cd51d7c74cbe0cee499","unresolved":false,"context_lines":[{"line_number":407,"context_line":"        return False"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"    @contextlib.contextmanager"},{"line_number":410,"context_line":"    def override_role_and_validate_list(self, test_obj\u003dNone,"},{"line_number":411,"context_line":"                                        admin_resources\u003dNone,"},{"line_number":412,"context_line":"                                        admin_resource_id\u003dNone):"},{"line_number":413,"context_line":"        \"\"\"Call ``override_role`` and validate RBAC for a list API action."}],"source_content_type":"text/x-python","patch_set":6,"id":"9fdfeff1_485af582","line":410,"range":{"start_line":410,"start_character":46,"end_line":410,"end_character":60},"in_reply_to":"9fdfeff1_283c512d","updated":"2019-02-01 23:16:49.000000000","message":"same, I left it here for backward compatibility","commit_id":"54b8c6074f05f079212511a16519b809f0725029"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"9475bd2bf1fbfb617eedd0a321708b21929b7e2f","unresolved":false,"context_lines":[{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    admin_roles_client \u003d None"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    @property"},{"line_number":150,"context_line":"    def rbac_utils(self):"},{"line_number":151,"context_line":"        return self"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    @classmethod"},{"line_number":154,"context_line":"    def setup_clients(cls):"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_4eac389e","line":151,"range":{"start_line":149,"start_character":0,"end_line":151,"end_character":19},"updated":"2019-02-03 06:40:23.000000000","message":"It doesn\u0027t look like this is needed.","commit_id":"92b464173a7ddc0b940ebf8c4870653b1546f9bb"},{"author":{"_account_id":8911,"name":"Sergey Vilgelm","email":"sergey@vilgelm.info","username":"sergey.vilgelm"},"change_message_id":"7ed347eda79f7f566cf7c106ada8af091d557470","unresolved":false,"context_lines":[{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    admin_roles_client \u003d None"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    @property"},{"line_number":150,"context_line":"    def rbac_utils(self):"},{"line_number":151,"context_line":"        return self"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    @classmethod"},{"line_number":154,"context_line":"    def setup_clients(cls):"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_245a3582","line":151,"range":{"start_line":149,"start_character":0,"end_line":151,"end_character":19},"in_reply_to":"9fdfeff1_4eac389e","updated":"2019-02-03 16:20:46.000000000","message":"I removed It in next patch, all tests use `self.rbac_utils.override_role()`","commit_id":"92b464173a7ddc0b940ebf8c4870653b1546f9bb"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"ca6761f5522db4b0a9ec9e928d337bbb9f729da9","unresolved":false,"context_lines":[{"line_number":449,"context_line":""},{"line_number":450,"context_line":"    def _set_override_role_called(self):"},{"line_number":451,"context_line":"        \"\"\"Helper for tracking whether ``override_role`` was called.\"\"\""},{"line_number":452,"context_line":"        self._override_role_called \u003d True"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"    def _set_override_role_caught_exc(self):"},{"line_number":455,"context_line":"        \"\"\"Helper for tracking whether exception was thrown inside"}],"source_content_type":"text/x-python","patch_set":13,"id":"9fdfeff1_9857b927","line":452,"range":{"start_line":452,"start_character":13,"end_line":452,"end_character":34},"updated":"2019-02-04 15:30:35.000000000","message":"Only nit I have is why do these need to be single underscore? Double underscore is better here because these variables should absolutely never be accessed outside this class. Also, there is precedence for this naming scheme in Tempest test.py: https://github.com/openstack/tempest/blob/d47a79c2b54848d101ade3b753e547b49158e5ce/tempest/test.py#L107","commit_id":"1b1664d0c96e571ec67705c75348200aa6bc17a0"},{"author":{"_account_id":8911,"name":"Sergey Vilgelm","email":"sergey@vilgelm.info","username":"sergey.vilgelm"},"change_message_id":"9b04ce726ff52c4007c08a294fe5a9be2545c252","unresolved":false,"context_lines":[{"line_number":449,"context_line":""},{"line_number":450,"context_line":"    def _set_override_role_called(self):"},{"line_number":451,"context_line":"        \"\"\"Helper for tracking whether ``override_role`` was called.\"\"\""},{"line_number":452,"context_line":"        self._override_role_called \u003d True"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"    def _set_override_role_caught_exc(self):"},{"line_number":455,"context_line":"        \"\"\"Helper for tracking whether exception was thrown inside"}],"source_content_type":"text/x-python","patch_set":13,"id":"9fdfeff1_bbfb9245","line":452,"range":{"start_line":452,"start_character":13,"end_line":452,"end_character":34},"in_reply_to":"9fdfeff1_1872e4e4","updated":"2019-02-04 19:38:50.000000000","message":"Yeah, I understand. have already done, so we can merge","commit_id":"1b1664d0c96e571ec67705c75348200aa6bc17a0"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"490c47b85399b70699b25906511542b3c00efb5b","unresolved":false,"context_lines":[{"line_number":449,"context_line":""},{"line_number":450,"context_line":"    def _set_override_role_called(self):"},{"line_number":451,"context_line":"        \"\"\"Helper for tracking whether ``override_role`` was called.\"\"\""},{"line_number":452,"context_line":"        self._override_role_called \u003d True"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"    def _set_override_role_caught_exc(self):"},{"line_number":455,"context_line":"        \"\"\"Helper for tracking whether exception was thrown inside"}],"source_content_type":"text/x-python","patch_set":13,"id":"9fdfeff1_1872e4e4","line":452,"range":{"start_line":452,"start_character":13,"end_line":452,"end_character":34},"in_reply_to":"9fdfeff1_2407881b","updated":"2019-02-04 18:47:00.000000000","message":"It\u0027s a Python convention, really. Single underscore is \"private\" and double underscore is like \"very private\" -- with double underscore Python does a bit of variable mangling to make it harder to access the variable publicly. Recall that in Python there is no real encapsulation so that\u0027s why I say \"private\" and \"very private\" which sounds kind of silly, because neither one of which is really private. But double underscore is usually reserved for implementation details that you absolutely don\u0027t want anyone manipulating/accessing.","commit_id":"1b1664d0c96e571ec67705c75348200aa6bc17a0"},{"author":{"_account_id":8911,"name":"Sergey Vilgelm","email":"sergey@vilgelm.info","username":"sergey.vilgelm"},"change_message_id":"f5868dadc0c6fb1f16608a352c6b3322c0ac50df","unresolved":false,"context_lines":[{"line_number":449,"context_line":""},{"line_number":450,"context_line":"    def _set_override_role_called(self):"},{"line_number":451,"context_line":"        \"\"\"Helper for tracking whether ``override_role`` was called.\"\"\""},{"line_number":452,"context_line":"        self._override_role_called \u003d True"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"    def _set_override_role_caught_exc(self):"},{"line_number":455,"context_line":"        \"\"\"Helper for tracking whether exception was thrown inside"}],"source_content_type":"text/x-python","patch_set":13,"id":"9fdfeff1_2407881b","line":452,"range":{"start_line":452,"start_character":13,"end_line":452,"end_character":34},"in_reply_to":"9fdfeff1_9857b927","updated":"2019-02-04 17:30:35.000000000","message":"Hmm, I just did\u0027t it to have same style, all private variables have one underscore. Do we have any rules about one vs two underscores?","commit_id":"1b1664d0c96e571ec67705c75348200aa6bc17a0"}],"patrole_tempest_plugin/tests/unit/base.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"ca6761f5522db4b0a9ec9e928d337bbb9f729da9","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    def setUp(self):"},{"line_number":26,"context_line":"        super(TestCase, self).setUp()"},{"line_number":27,"context_line":"        # Disable patrole log for unit tests."},{"line_number":28,"context_line":"        self.useFixture("},{"line_number":29,"context_line":"            patrole_fixtures.ConfPatcher(enable_reporting\u003dFalse,"},{"line_number":30,"context_line":"                                         group\u003d\u0027patrole_log\u0027))"}],"source_content_type":"text/x-python","patch_set":13,"id":"9fdfeff1_b8295d9c","line":30,"range":{"start_line":28,"start_character":8,"end_line":30,"end_character":62},"updated":"2019-02-04 15:30:35.000000000","message":"This is fine for now, but later on we should probably add another class that does enable patrole logging because we currently have no meaningful tests around it.","commit_id":"1b1664d0c96e571ec67705c75348200aa6bc17a0"},{"author":{"_account_id":8911,"name":"Sergey Vilgelm","email":"sergey@vilgelm.info","username":"sergey.vilgelm"},"change_message_id":"f5868dadc0c6fb1f16608a352c6b3322c0ac50df","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    def setUp(self):"},{"line_number":26,"context_line":"        super(TestCase, self).setUp()"},{"line_number":27,"context_line":"        # Disable patrole log for unit tests."},{"line_number":28,"context_line":"        self.useFixture("},{"line_number":29,"context_line":"            patrole_fixtures.ConfPatcher(enable_reporting\u003dFalse,"},{"line_number":30,"context_line":"                                         group\u003d\u0027patrole_log\u0027))"}],"source_content_type":"text/x-python","patch_set":13,"id":"9fdfeff1_4425ecaa","line":30,"range":{"start_line":28,"start_character":8,"end_line":30,"end_character":62},"in_reply_to":"9fdfeff1_b8295d9c","updated":"2019-02-04 17:30:35.000000000","message":"+1","commit_id":"1b1664d0c96e571ec67705c75348200aa6bc17a0"}],"patrole_tempest_plugin/tests/unit/fixtures.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"9475bd2bf1fbfb617eedd0a321708b21929b7e2f","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        self._do_reset_mocks \u003d do_reset_mocks"},{"line_number":73,"context_line":"        self._rbac_test_roles \u003d rbac_test_roles or [\u0027member\u0027]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def patchobject(self, target, attribute, *args, **kwargs):"},{"line_number":76,"context_line":"        p \u003d mock.patch.object(target, attribute, *args, **kwargs)"},{"line_number":77,"context_line":"        m \u003d p.start()"},{"line_number":78,"context_line":"        self.addCleanup(p.stop)"},{"line_number":79,"context_line":"        return m"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def setUp(self):"},{"line_number":82,"context_line":"        super(RbacUtilsMixinFixture, self).setUp()"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_ee964c4c","line":79,"range":{"start_line":75,"start_character":0,"end_line":79,"end_character":16},"updated":"2019-02-03 06:40:23.000000000","message":"I believe this is already defined in the base Tempest test class.","commit_id":"92b464173a7ddc0b940ebf8c4870653b1546f9bb"},{"author":{"_account_id":8911,"name":"Sergey Vilgelm","email":"sergey@vilgelm.info","username":"sergey.vilgelm"},"change_message_id":"7ed347eda79f7f566cf7c106ada8af091d557470","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        self._do_reset_mocks \u003d do_reset_mocks"},{"line_number":73,"context_line":"        self._rbac_test_roles \u003d rbac_test_roles or [\u0027member\u0027]"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def patchobject(self, target, attribute, *args, **kwargs):"},{"line_number":76,"context_line":"        p \u003d mock.patch.object(target, attribute, *args, **kwargs)"},{"line_number":77,"context_line":"        m \u003d p.start()"},{"line_number":78,"context_line":"        self.addCleanup(p.stop)"},{"line_number":79,"context_line":"        return m"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def setUp(self):"},{"line_number":82,"context_line":"        super(RbacUtilsMixinFixture, self).setUp()"}],"source_content_type":"text/x-python","patch_set":12,"id":"9fdfeff1_445df976","line":79,"range":{"start_line":75,"start_character":0,"end_line":79,"end_character":16},"in_reply_to":"9fdfeff1_ee964c4c","updated":"2019-02-03 16:20:46.000000000","message":"In the Tempest class yes, but not in the Fixture class.\nI copied it from the Tempest :)","commit_id":"92b464173a7ddc0b940ebf8c4870653b1546f9bb"}],"releasenotes/notes/rbac-utils-refactoring-2f4f1e3b52fcae14.yaml":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"ca6761f5522db4b0a9ec9e928d337bbb9f729da9","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    the original ``RbacUtils`` class. New implementation simplifies the usage"},{"line_number":7,"context_line":"    of the rbac utils:"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    * there is not need in calling ``cls.setup_rbac_utils()`` function, becuase"},{"line_number":10,"context_line":"      it happens automatically at the ``setup_clients`` step."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    * there is no ``rbac_utils`` variable, so if you need to call a"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"9fdfeff1_63fd8a07","line":9,"range":{"start_line":9,"start_character":72,"end_line":9,"end_character":79},"updated":"2019-02-04 15:30:35.000000000","message":"s/becuase/because","commit_id":"1b1664d0c96e571ec67705c75348200aa6bc17a0"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"ca6761f5522db4b0a9ec9e928d337bbb9f729da9","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    the original ``RbacUtils`` class. New implementation simplifies the usage"},{"line_number":7,"context_line":"    of the rbac utils:"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    * there is not need in calling ``cls.setup_rbac_utils()`` function, becuase"},{"line_number":10,"context_line":"      it happens automatically at the ``setup_clients`` step."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    * there is no ``rbac_utils`` variable, so if you need to call a"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"9fdfeff1_f808452e","line":9,"range":{"start_line":9,"start_character":15,"end_line":9,"end_character":18},"updated":"2019-02-04 15:30:35.000000000","message":"s/not/no","commit_id":"1b1664d0c96e571ec67705c75348200aa6bc17a0"},{"author":{"_account_id":8911,"name":"Sergey Vilgelm","email":"sergey@vilgelm.info","username":"sergey.vilgelm"},"change_message_id":"f5868dadc0c6fb1f16608a352c6b3322c0ac50df","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    the original ``RbacUtils`` class. New implementation simplifies the usage"},{"line_number":7,"context_line":"    of the rbac utils:"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    * there is not need in calling ``cls.setup_rbac_utils()`` function, becuase"},{"line_number":10,"context_line":"      it happens automatically at the ``setup_clients`` step."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    * there is no ``rbac_utils`` variable, so if you need to call a"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"9fdfeff1_e43980d8","line":9,"range":{"start_line":9,"start_character":72,"end_line":9,"end_character":79},"in_reply_to":"9fdfeff1_63fd8a07","updated":"2019-02-04 17:30:35.000000000","message":"Done","commit_id":"1b1664d0c96e571ec67705c75348200aa6bc17a0"},{"author":{"_account_id":8911,"name":"Sergey Vilgelm","email":"sergey@vilgelm.info","username":"sergey.vilgelm"},"change_message_id":"f5868dadc0c6fb1f16608a352c6b3322c0ac50df","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    the original ``RbacUtils`` class. New implementation simplifies the usage"},{"line_number":7,"context_line":"    of the rbac utils:"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    * there is not need in calling ``cls.setup_rbac_utils()`` function, becuase"},{"line_number":10,"context_line":"      it happens automatically at the ``setup_clients`` step."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    * there is no ``rbac_utils`` variable, so if you need to call a"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"9fdfeff1_0437e4e5","line":9,"range":{"start_line":9,"start_character":15,"end_line":9,"end_character":18},"in_reply_to":"9fdfeff1_f808452e","updated":"2019-02-04 17:30:35.000000000","message":"Done","commit_id":"1b1664d0c96e571ec67705c75348200aa6bc17a0"}]}
