)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"fb55571d1d798d15186e27793c77ac26539e5f5b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"cd78321a_d2f87488","updated":"2022-02-09 15:04:03.000000000","message":"Thanks","commit_id":"1e0b4135c234d09be40b18295bf2925dbbd79dab"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"8454f991421db2314ce52151f446f2bbafc4e9ba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"55e9a0bb_3365a108","updated":"2022-02-11 04:35:00.000000000","message":"Thanks, LGTM.","commit_id":"4e8a6a26186b3f02572005717777aaae9b68642f"}],"openstack_auth/tests/unit/test_password.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6e4cd15a21d67a1bf61b86ce41f726ee723091ba","unresolved":true,"context_lines":[{"line_number":25,"context_line":"            (\"x\", \u0027region1\u0027),"},{"line_number":26,"context_line":"            (\"y\", \u0027region2\u0027),"},{"line_number":27,"context_line":"        ],"},{"line_number":28,"context_line":"    )"},{"line_number":29,"context_line":"    def test_change_password(self):"},{"line_number":30,"context_line":"        form_data \u003d {"},{"line_number":31,"context_line":"            \u0027region\u0027: \u00270\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"8fd15ab7_93c2fc6d","line":28,"updated":"2022-02-08 22:17:23.000000000","message":"question: How is this configuraiton with multiple regions related to this test?\nI am not sure why two regions needs to be configured here.","commit_id":"2ee391f5f141407235cd261ba24785a89d47b17d"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"312d0536f0eab33668f6ab4efe61b6cd09dcc269","unresolved":false,"context_lines":[{"line_number":25,"context_line":"            (\"x\", \u0027region1\u0027),"},{"line_number":26,"context_line":"            (\"y\", \u0027region2\u0027),"},{"line_number":27,"context_line":"        ],"},{"line_number":28,"context_line":"    )"},{"line_number":29,"context_line":"    def test_change_password(self):"},{"line_number":30,"context_line":"        form_data \u003d {"},{"line_number":31,"context_line":"            \u0027region\u0027: \u00270\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"64d0c924_0a03542e","line":28,"in_reply_to":"638490f8_a4255312","updated":"2022-02-09 12:27:11.000000000","message":"It makes sense, but it is not clear enough from the main test code.\nCould you add some comment around the region setting?","commit_id":"2ee391f5f141407235cd261ba24785a89d47b17d"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"a3eec2095e6298f7f58785b43c58cbfae946e2be","unresolved":false,"context_lines":[{"line_number":25,"context_line":"            (\"x\", \u0027region1\u0027),"},{"line_number":26,"context_line":"            (\"y\", \u0027region2\u0027),"},{"line_number":27,"context_line":"        ],"},{"line_number":28,"context_line":"    )"},{"line_number":29,"context_line":"    def test_change_password(self):"},{"line_number":30,"context_line":"        form_data \u003d {"},{"line_number":31,"context_line":"            \u0027region\u0027: \u00270\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a822e61_adac6919","line":28,"in_reply_to":"64d0c924_0a03542e","updated":"2022-02-09 13:02:29.000000000","message":"done","commit_id":"2ee391f5f141407235cd261ba24785a89d47b17d"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"75ae1e90cadf4312eb34d5da2631d836548552a7","unresolved":false,"context_lines":[{"line_number":25,"context_line":"            (\"x\", \u0027region1\u0027),"},{"line_number":26,"context_line":"            (\"y\", \u0027region2\u0027),"},{"line_number":27,"context_line":"        ],"},{"line_number":28,"context_line":"    )"},{"line_number":29,"context_line":"    def test_change_password(self):"},{"line_number":30,"context_line":"        form_data \u003d {"},{"line_number":31,"context_line":"            \u0027region\u0027: \u00270\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"638490f8_a4255312","line":28,"in_reply_to":"8fd15ab7_93c2fc6d","updated":"2022-02-09 12:22:25.000000000","message":"the regions are used to populate the choice field in the form, and there is also some logic using them that we want to test","commit_id":"2ee391f5f141407235cd261ba24785a89d47b17d"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6e4cd15a21d67a1bf61b86ce41f726ee723091ba","unresolved":true,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        with mock.patch("},{"line_number":46,"context_line":"            \u0027openstack_auth.utils.get_session\u0027,"},{"line_number":47,"context_line":"            return_value\u003dsession"},{"line_number":48,"context_line":"        ) as mock_get_session:"},{"line_number":49,"context_line":"            with mock.patch("},{"line_number":50,"context_line":"                \u0027openstack_auth.utils.get_keystone_client\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"f204dff2_91a28406","line":47,"range":{"start_line":47,"start_character":25,"end_line":47,"end_character":32},"updated":"2022-02-08 22:17:23.000000000","message":"If there is no need to access attributes of \"session\" variblle, I would like to use mock.sentinel feature (i.e., \"mock.sentinel.session\").","commit_id":"2ee391f5f141407235cd261ba24785a89d47b17d"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"75ae1e90cadf4312eb34d5da2631d836548552a7","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        with mock.patch("},{"line_number":46,"context_line":"            \u0027openstack_auth.utils.get_session\u0027,"},{"line_number":47,"context_line":"            return_value\u003dsession"},{"line_number":48,"context_line":"        ) as mock_get_session:"},{"line_number":49,"context_line":"            with mock.patch("},{"line_number":50,"context_line":"                \u0027openstack_auth.utils.get_keystone_client\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9b8a6990_ccdb449d","line":47,"range":{"start_line":47,"start_character":25,"end_line":47,"end_character":32},"in_reply_to":"f204dff2_91a28406","updated":"2022-02-09 12:22:25.000000000","message":"Done","commit_id":"2ee391f5f141407235cd261ba24785a89d47b17d"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6e4cd15a21d67a1bf61b86ce41f726ee723091ba","unresolved":true,"context_lines":[{"line_number":46,"context_line":"            \u0027openstack_auth.utils.get_session\u0027,"},{"line_number":47,"context_line":"            return_value\u003dsession"},{"line_number":48,"context_line":"        ) as mock_get_session:"},{"line_number":49,"context_line":"            with mock.patch("},{"line_number":50,"context_line":"                \u0027openstack_auth.utils.get_keystone_client\u0027,"},{"line_number":51,"context_line":"                return_value\u003dclient"},{"line_number":52,"context_line":"            ) as mock_get_keystone_client:"}],"source_content_type":"text/x-python","patch_set":2,"id":"0c33fd5b_1098f6c5","line":49,"updated":"2022-02-08 22:17:23.000000000","message":"nit: we can have multiple mock.patch in a single with clause.\n\n with A() as a, B() as b:\n    SUITE\n\nOn the other hand, this way is not so friendly with our flake8 check.\nIt easily hits the indentation checks... so I am okay with either.\n\nThe below style was introduced in python 3.10, but ....\n\n  with (\n      A() as a,\n      B() as \n      mock.patch(...) as bar,\n  ):\n      form.is_valid()","commit_id":"2ee391f5f141407235cd261ba24785a89d47b17d"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"75ae1e90cadf4312eb34d5da2631d836548552a7","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            \u0027openstack_auth.utils.get_session\u0027,"},{"line_number":47,"context_line":"            return_value\u003dsession"},{"line_number":48,"context_line":"        ) as mock_get_session:"},{"line_number":49,"context_line":"            with mock.patch("},{"line_number":50,"context_line":"                \u0027openstack_auth.utils.get_keystone_client\u0027,"},{"line_number":51,"context_line":"                return_value\u003dclient"},{"line_number":52,"context_line":"            ) as mock_get_keystone_client:"}],"source_content_type":"text/x-python","patch_set":2,"id":"095b5da8_fa1e2e43","line":49,"in_reply_to":"0c33fd5b_1098f6c5","updated":"2022-02-09 12:22:25.000000000","message":"Ack","commit_id":"2ee391f5f141407235cd261ba24785a89d47b17d"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c1ad16a85507cbb28473e80d4ce02f599b46ea1b","unresolved":true,"context_lines":[{"line_number":80,"context_line":"        }"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        form \u003d forms.Password(form_data, initial\u003dinitial)"},{"line_number":83,"context_line":"        client \u003d mock.Mock()"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        self.assertTrue(form.errors)"},{"line_number":86,"context_line":"        self.assertIn([\u0027Passwords do not match.\u0027], form.errors.values())"}],"source_content_type":"text/x-python","patch_set":6,"id":"4afb3d2e_7aeef0ce","line":83,"range":{"start_line":83,"start_character":8,"end_line":83,"end_character":28},"updated":"2022-02-14 08:57:46.000000000","message":"This is not referred anywhere (except the assertion) and created after the form is called in the previous line, so there is no need to prepare the mock.","commit_id":"4e8a6a26186b3f02572005717777aaae9b68642f"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"d2f9abdedab3d4faded69f5f3bb8343f04194688","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        }"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        form \u003d forms.Password(form_data, initial\u003dinitial)"},{"line_number":83,"context_line":"        client \u003d mock.Mock()"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        self.assertTrue(form.errors)"},{"line_number":86,"context_line":"        self.assertIn([\u0027Passwords do not match.\u0027], form.errors.values())"}],"source_content_type":"text/x-python","patch_set":6,"id":"ea2e6abe_5436c0c1","line":83,"range":{"start_line":83,"start_character":8,"end_line":83,"end_character":28},"in_reply_to":"4afb3d2e_7aeef0ce","updated":"2022-02-14 19:52:21.000000000","message":"Done","commit_id":"4e8a6a26186b3f02572005717777aaae9b68642f"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c1ad16a85507cbb28473e80d4ce02f599b46ea1b","unresolved":true,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        self.assertTrue(form.errors)"},{"line_number":86,"context_line":"        self.assertIn([\u0027Passwords do not match.\u0027], form.errors.values())"},{"line_number":87,"context_line":"        client.Client.assert_not_called()"}],"source_content_type":"text/x-python","patch_set":6,"id":"9c2b3862_a8e9c566","line":87,"range":{"start_line":87,"start_character":8,"end_line":87,"end_character":38},"updated":"2022-02-14 08:57:46.000000000","message":"Let\u0027s drop it per´my comment above.","commit_id":"4e8a6a26186b3f02572005717777aaae9b68642f"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"d2f9abdedab3d4faded69f5f3bb8343f04194688","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        self.assertTrue(form.errors)"},{"line_number":86,"context_line":"        self.assertIn([\u0027Passwords do not match.\u0027], form.errors.values())"},{"line_number":87,"context_line":"        client.Client.assert_not_called()"}],"source_content_type":"text/x-python","patch_set":6,"id":"7b87dab6_66e82bcf","line":87,"range":{"start_line":87,"start_character":8,"end_line":87,"end_character":38},"in_reply_to":"9c2b3862_a8e9c566","updated":"2022-02-14 19:52:21.000000000","message":"Done","commit_id":"4e8a6a26186b3f02572005717777aaae9b68642f"}]}
