)]}'
{".zuul.d/tempest-and-integrated.yaml":[{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"11528544431a4c478d4060e3c211a04c82c0c8fc","unresolved":true,"context_lines":[{"line_number":1,"context_line":"- job:"},{"line_number":2,"context_line":"    name: horizon-integration-tests"},{"line_number":3,"context_line":"    parent: devstack"},{"line_number":4,"context_line":"    timeout: 9000"},{"line_number":5,"context_line":"    pre-run: playbooks/horizon-devstack-integration/pre.yaml"},{"line_number":6,"context_line":"    run: playbooks/horizon-devstack-integration/run.yaml"},{"line_number":7,"context_line":"    post-run: playbooks/horizon-devstack-integration/post.yaml"}],"source_content_type":"text/x-yaml","patch_set":17,"id":"e45689c0_433961a0","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":17},"updated":"2022-03-30 18:23:10.000000000","message":"Could you please add comments about why you added timeout here or you can mention this in the commit-msg.\nAlso, any reason for specifically adding 9000s or it\u0027s just random?","commit_id":"72bfc0d1a68d8b8e005b96a336f3ba6f4fc78abd"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"99658cb0a0fc8e412441cb9f39327f804e3d4f86","unresolved":false,"context_lines":[{"line_number":1,"context_line":"- job:"},{"line_number":2,"context_line":"    name: horizon-integration-tests"},{"line_number":3,"context_line":"    parent: devstack"},{"line_number":4,"context_line":"    timeout: 9000"},{"line_number":5,"context_line":"    pre-run: playbooks/horizon-devstack-integration/pre.yaml"},{"line_number":6,"context_line":"    run: playbooks/horizon-devstack-integration/run.yaml"},{"line_number":7,"context_line":"    post-run: playbooks/horizon-devstack-integration/post.yaml"}],"source_content_type":"text/x-yaml","patch_set":17,"id":"e4bbe22a_60a7ac1f","line":4,"range":{"start_line":4,"start_character":4,"end_line":4,"end_character":17},"in_reply_to":"e45689c0_433961a0","updated":"2022-03-30 19:54:26.000000000","message":"According to the statistics we have, 2 hours were not enough, so I just tried 2.5 hours.","commit_id":"72bfc0d1a68d8b8e005b96a336f3ba6f4fc78abd"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"89b7969f7cbb63ee363074d6a603021e9ab9e4c8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1cb0e2f5_46d53299","updated":"2021-11-29 21:30:23.000000000","message":"Cleanup is still required","commit_id":"aa271236e9b44d93beb08f61ac1cebbf11fc5746"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"de3942b8d1d0f9b1f84d933ae164e1a723e40c49","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"c7503f91_1314b7da","updated":"2021-12-07 00:41:35.000000000","message":"recheck","commit_id":"2878ef6f28d80ae6fe2b5bbb22466a05d69913f3"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ae5caa1c8a4b92abc68cc7555ae9e9ac2fae375d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"a080a37b_4d9d7481","updated":"2021-12-12 21:14:48.000000000","message":"Generally looks okay, but I hope we can avoid duplicated logics. See my comment inline.","commit_id":"e54c18991bdb041ca6a5596eaeaedb3000f07961"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"599b32a36aec530e79a8dd76a31daeccdf86537a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"2a845df8_7ffcc11a","updated":"2021-12-08 22:02:39.000000000","message":"recheck","commit_id":"e54c18991bdb041ca6a5596eaeaedb3000f07961"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"7764c5e4f563778870c61321c4b9828d402f4dff","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"4e7ef3f9_7655e687","in_reply_to":"a080a37b_4d9d7481","updated":"2021-12-13 17:11:05.000000000","message":"Thank you so much for your review! I was thinking about the complete replacement of table and page classes with the new ones for Angular navigation, since we agreed to remove legacy tests. At least the most of existing legacy tests should be rewritten for Angular navigation to make this transfer smooth and neat. After that is done, it will be more clear what exactly is duplicated in regions classes, so I can refactor it.","commit_id":"e54c18991bdb041ca6a5596eaeaedb3000f07961"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"a70c7c19d6f42ec2b617df077bd645204d9c6825","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"f1b9e870_e91feb78","updated":"2021-12-25 02:53:24.000000000","message":"Tests are all done, but more clean up is needed","commit_id":"517df752d3ce77fd096aadfe7ac88d548a985931"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"6b180f59a940e3943ddab0bde90b9768af61fbfe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"6f9adc7e_a8b64b11","updated":"2022-01-06 20:52:45.000000000","message":"recheck","commit_id":"bc810f0654db1e752579387e4c8eb08f73588c17"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"f31a3612d0910f191341f6631c9f7f9dcc53a055","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"87572f73_88faf6b7","updated":"2022-01-07 04:16:43.000000000","message":"recheck","commit_id":"bc810f0654db1e752579387e4c8eb08f73588c17"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"11866e8a129655300e108e4aa238ee90345476d0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"9dad57dc_7de460a0","updated":"2022-01-07 01:51:53.000000000","message":"recheck","commit_id":"bc810f0654db1e752579387e4c8eb08f73588c17"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"7a77b2bd68e554f3c69f81ed0f0bfabbbea32c0d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"7e410e56_9a4b81dd","updated":"2022-01-08 00:55:41.000000000","message":"recheck","commit_id":"27fda3fe93f7944b67ec23392e6a3f5688ba8e22"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"793e5ed1d4f74b674590547ea6143967ebc9f686","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"51cea72f_1277b53a","updated":"2022-01-12 15:42:42.000000000","message":"recheck","commit_id":"aac75d7c49c2e3c8dfac64d85988198af6d59c67"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"2bcf8764a362df83b7329b2917bb513d8fdce4a7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"a51c7a26_51da2cd2","updated":"2022-01-12 18:26:22.000000000","message":"recheck","commit_id":"aac75d7c49c2e3c8dfac64d85988198af6d59c67"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"b606024c87b9a4c384916b6df1549fa66dec58b7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"d6329ba4_21592d89","updated":"2022-01-12 03:32:00.000000000","message":"recheck","commit_id":"aac75d7c49c2e3c8dfac64d85988198af6d59c67"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"9f71a499e2de2f2427bed068cc01b5a100576ab2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"200f1f51_d2ca0799","updated":"2022-03-18 23:23:45.000000000","message":"Akihiro, thank you for your review!","commit_id":"b8d11694945e78b4488b60a81cea1f1cddb73656"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6c6aae6d51c9ce25ceb7e75acefddc6db7d351ae","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"9e01f9ff_586c1d07","updated":"2022-03-02 22:13:35.000000000","message":"Generally looks good. Please find minor comments inline.","commit_id":"b8d11694945e78b4488b60a81cea1f1cddb73656"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"bba170b6cf713c347c1ec2237475683dea871e52","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"f850292d_1d13c304","updated":"2022-01-12 23:30:55.000000000","message":"recheck","commit_id":"b8d11694945e78b4488b60a81cea1f1cddb73656"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"0696dc7b3bdb5cefaccb0672aa021a8dfc7ccb42","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"338d669d_e4eb0367","updated":"2022-03-29 16:37:44.000000000","message":"All failures are because of time out. We need to fix the time limit I guess, since we have more tests to run now.","commit_id":"6ca4a87b5adbd200970d837329faf1a4b6b347a6"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"f23718c6bfd9ebae992d9f3d496fb71eb78b81f4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"edffedd1_8daf7485","updated":"2022-03-21 15:30:29.000000000","message":"Thanks, LGTM","commit_id":"6ca4a87b5adbd200970d837329faf1a4b6b347a6"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"c87dfac0f26fe63fb41ace83f09b40bb43de8d81","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"9d181017_60dc754f","updated":"2022-03-29 06:38:57.000000000","message":"recheck","commit_id":"6ca4a87b5adbd200970d837329faf1a4b6b347a6"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"a9395cb2124417467fcabb71fee9c048c3d1d642","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"ab6ad460_0c3b66f7","updated":"2022-03-29 03:55:31.000000000","message":"recheck","commit_id":"6ca4a87b5adbd200970d837329faf1a4b6b347a6"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"f71f9a9c373cefa261b2faa57b794165cfc3be0e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"d425049c_48453c8d","updated":"2022-03-29 13:35:11.000000000","message":"recheck","commit_id":"6ca4a87b5adbd200970d837329faf1a4b6b347a6"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"ef670d09b658c1d8f3c04151e6a3efb012309dfe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"625ec27a_986e0c2b","updated":"2022-03-19 19:29:51.000000000","message":"recheck\n","commit_id":"6ca4a87b5adbd200970d837329faf1a4b6b347a6"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"11528544431a4c478d4060e3c211a04c82c0c8fc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"799fcc4f_ccb25de1","updated":"2022-03-30 18:23:10.000000000","message":"LGTM, Please add","commit_id":"72bfc0d1a68d8b8e005b96a336f3ba6f4fc78abd"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"8974090c86a88ab9452e21a4536bf2c3b51fe0c7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"4f16f6ea_12665708","updated":"2022-03-31 17:07:48.000000000","message":"recheck","commit_id":"7a4e597072854acfebdc9cf4c0045fc23ab99172"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"f509f25d1325ba760e932bebed4cc432655440dc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"7274d0de_31779d4c","updated":"2022-03-31 14:17:38.000000000","message":"recheck","commit_id":"7a4e597072854acfebdc9cf4c0045fc23ab99172"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"fb0864196227f9cac7cd08f76b4b8603d1258df2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"7ccd1407_30ceb707","updated":"2022-04-01 15:08:01.000000000","message":"recheck","commit_id":"7a4e597072854acfebdc9cf4c0045fc23ab99172"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"e29c1bef00b712f6fb1b9300c4dbbcee26a68107","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"84649eb8_1f164f3d","updated":"2022-04-01 00:43:58.000000000","message":"recheck","commit_id":"7a4e597072854acfebdc9cf4c0045fc23ab99172"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"1c3112897340709dc0ef7d0bf78914a45dd63ea6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"b1a80fd5_7fb7ca17","updated":"2022-03-31 20:11:22.000000000","message":"recheck","commit_id":"7a4e597072854acfebdc9cf4c0045fc23ab99172"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"4ff723fbd157aae549dda28c991caedf4a9d2e74","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"ce70f43e_d9fdf320","updated":"2022-04-01 03:19:47.000000000","message":"recheck","commit_id":"7a4e597072854acfebdc9cf4c0045fc23ab99172"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"40adf9dafbdaaac00ae5c4ad8db7a68335546c2a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"dfd9ef72_cfd6b413","updated":"2022-03-31 08:47:24.000000000","message":"recheck","commit_id":"7a4e597072854acfebdc9cf4c0045fc23ab99172"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"d006e284d086c7209a4e65db8b140fc5a166fe00","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"3326ed49_59a33af8","updated":"2022-07-25 16:04:17.000000000","message":"recheck integration tests timeout","commit_id":"9dd43bc4cc7e82e417545f057996794d3db25dde"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"b08fa11ac891967efe8c3a92267c658bb536aeb2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"0299f9d1_7318d85f","updated":"2022-07-26 18:58:31.000000000","message":"recheck integration tests timeout","commit_id":"b1d45826b050728168b606eea2789ca90609cfe5"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"e69a87355de019d2da629f179777239faea367be","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"210536c2_249ad1e3","updated":"2022-08-05 14:33:17.000000000","message":"recheck unrelated integration tests failure","commit_id":"8b27284da3e8483424c9d1dbe45a9bcf67536094"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"0af833094c296be8c66adb49ee4af7f95e4efa35","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"a5ffda70_1377d0e2","updated":"2022-08-03 20:34:52.000000000","message":"recheck unrelated integration tests failure","commit_id":"8b27284da3e8483424c9d1dbe45a9bcf67536094"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"433a83ae5b99b0240126abd19062b2db8eae1dd2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":25,"id":"87b80ca3_4f3074e4","updated":"2022-08-05 21:19:50.000000000","message":"recheck unrelated integration tests failure","commit_id":"4ed6b8ec304e4bf34703b921431de29086e10266"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"39ffdc53352578d49dfb5afe5dba9e618b6ed944","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"78482add_4eedcfe7","updated":"2022-08-08 14:21:44.000000000","message":"recheck unrelated integration tests failure","commit_id":"518bdccb47dead35c8da5a4b30e0a3689bde313d"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"b609ab472901b1df3f6669a4cf884e5d4b62bf05","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"2502b605_39246c31","updated":"2022-08-09 17:15:46.000000000","message":"recheck unrelated integration tests failure\n","commit_id":"518bdccb47dead35c8da5a4b30e0a3689bde313d"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"fbe16437e9f2ed13f350ff42c37e507bc62a017f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"450a1584_f65cfd5c","updated":"2022-08-17 19:51:02.000000000","message":"recheck unrelated integration tests failure\n","commit_id":"518bdccb47dead35c8da5a4b30e0a3689bde313d"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"2b90a5fb3213bd99b3e4fd4e96395c375e78ae5b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":26,"id":"4be33f6d_7bfc47f6","updated":"2022-08-08 16:38:32.000000000","message":"recheck unrelated integration tests failure\n","commit_id":"518bdccb47dead35c8da5a4b30e0a3689bde313d"}],"openstack_dashboard/test/integration_tests/pages/project/compute/imagespage.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ae5caa1c8a4b92abc68cc7555ae9e9ac2fae375d","unresolved":true,"context_lines":[{"line_number":364,"context_line":"    # @tables.bind_table_action_ng(\u0027Delete\u0027)"},{"line_number":365,"context_line":"    # def delete_image(self, delete_button):"},{"line_number":366,"context_line":"    #     delete_button.click()"},{"line_number":367,"context_line":"    #     return forms.BaseFormRegion(self.driver, self.conf)"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    @tables.bind_table_action_ng(\u0027Delete Images\u0027)"},{"line_number":370,"context_line":"    def delete_image(self, delete_button):"}],"source_content_type":"text/x-python","patch_set":7,"id":"cb7a25bc_97a3101c","line":367,"updated":"2021-12-12 21:14:48.000000000","message":"do we need to keep this as a comment?","commit_id":"e54c18991bdb041ca6a5596eaeaedb3000f07961"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"7764c5e4f563778870c61321c4b9828d402f4dff","unresolved":true,"context_lines":[{"line_number":364,"context_line":"    # @tables.bind_table_action_ng(\u0027Delete\u0027)"},{"line_number":365,"context_line":"    # def delete_image(self, delete_button):"},{"line_number":366,"context_line":"    #     delete_button.click()"},{"line_number":367,"context_line":"    #     return forms.BaseFormRegion(self.driver, self.conf)"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    @tables.bind_table_action_ng(\u0027Delete Images\u0027)"},{"line_number":370,"context_line":"    def delete_image(self, delete_button):"}],"source_content_type":"text/x-python","patch_set":7,"id":"e7e0d87b_0825d69d","line":367,"in_reply_to":"cb7a25bc_97a3101c","updated":"2021-12-13 17:11:05.000000000","message":"Probably not for both. I\u0027ll remove that when all the tests are done.","commit_id":"e54c18991bdb041ca6a5596eaeaedb3000f07961"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"ddb6c3fce9fad8d221d3b954d33f2311487fe820","unresolved":false,"context_lines":[{"line_number":364,"context_line":"    # @tables.bind_table_action_ng(\u0027Delete\u0027)"},{"line_number":365,"context_line":"    # def delete_image(self, delete_button):"},{"line_number":366,"context_line":"    #     delete_button.click()"},{"line_number":367,"context_line":"    #     return forms.BaseFormRegion(self.driver, self.conf)"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    @tables.bind_table_action_ng(\u0027Delete Images\u0027)"},{"line_number":370,"context_line":"    def delete_image(self, delete_button):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ee38fe1d_e05d3546","line":367,"in_reply_to":"e7e0d87b_0825d69d","updated":"2022-02-03 15:54:44.000000000","message":"Done","commit_id":"e54c18991bdb041ca6a5596eaeaedb3000f07961"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ae5caa1c8a4b92abc68cc7555ae9e9ac2fae375d","unresolved":true,"context_lines":[{"line_number":374,"context_line":"    # @tables.bind_row_action(\u0027delete\u0027)"},{"line_number":375,"context_line":"    # def delete_image_via_row_action(self, delete_button, row):"},{"line_number":376,"context_line":"    #     delete_button.click()"},{"line_number":377,"context_line":"    #     return forms.BaseFormRegion(self.driver, self.conf)"}],"source_content_type":"text/x-python","patch_set":7,"id":"173e7ca2_05dab906","line":377,"updated":"2021-12-12 21:14:48.000000000","message":"ditto","commit_id":"e54c18991bdb041ca6a5596eaeaedb3000f07961"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"ddb6c3fce9fad8d221d3b954d33f2311487fe820","unresolved":false,"context_lines":[{"line_number":374,"context_line":"    # @tables.bind_row_action(\u0027delete\u0027)"},{"line_number":375,"context_line":"    # def delete_image_via_row_action(self, delete_button, row):"},{"line_number":376,"context_line":"    #     delete_button.click()"},{"line_number":377,"context_line":"    #     return forms.BaseFormRegion(self.driver, self.conf)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ff40b04b_65c80e73","line":377,"in_reply_to":"173e7ca2_05dab906","updated":"2022-02-03 15:54:44.000000000","message":"Done","commit_id":"e54c18991bdb041ca6a5596eaeaedb3000f07961"}],"openstack_dashboard/test/integration_tests/regions/forms.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ae5caa1c8a4b92abc68cc7555ae9e9ac2fae375d","unresolved":true,"context_lines":[{"line_number":51,"context_line":"        cls.FORM_FIELDS_TYPES -\u003d set(base_classes)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"class FieldFactoryNG(baseregion.BaseRegion):"},{"line_number":55,"context_line":"    \"\"\"Factory for creating form field objects.\"\"\""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    FORM_FIELDS_TYPES \u003d set()"}],"source_content_type":"text/x-python","patch_set":7,"id":"c614c5ef_bea53bb3","line":54,"updated":"2021-12-12 21:14:48.000000000","message":"Same comment as for FormRegionNG below.","commit_id":"e54c18991bdb041ca6a5596eaeaedb3000f07961"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"ddb6c3fce9fad8d221d3b954d33f2311487fe820","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        cls.FORM_FIELDS_TYPES -\u003d set(base_classes)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"class FieldFactoryNG(baseregion.BaseRegion):"},{"line_number":55,"context_line":"    \"\"\"Factory for creating form field objects.\"\"\""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    FORM_FIELDS_TYPES \u003d set()"}],"source_content_type":"text/x-python","patch_set":7,"id":"d0ca86a2_96954a2e","line":54,"in_reply_to":"c614c5ef_bea53bb3","updated":"2022-02-03 15:54:44.000000000","message":"Done","commit_id":"e54c18991bdb041ca6a5596eaeaedb3000f07961"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ae5caa1c8a4b92abc68cc7555ae9e9ac2fae375d","unresolved":true,"context_lines":[{"line_number":57,"context_line":"    FORM_FIELDS_TYPES \u003d set()"},{"line_number":58,"context_line":"    _element_locator_str_prefix \u003d \u0027div.form-group\u0027"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def __init__(self, driver, conf, src_elem\u003dNone):"},{"line_number":61,"context_line":"        super().__init__(driver, conf, src_elem)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def fields(self):"},{"line_number":64,"context_line":"        for field_cls in self.FORM_FIELDS_TYPES:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5473bc42_0fbda933","line":61,"range":{"start_line":60,"start_character":4,"end_line":61,"end_character":48},"updated":"2021-12-12 21:14:48.000000000","message":"Looks unnecessary.","commit_id":"e54c18991bdb041ca6a5596eaeaedb3000f07961"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"ddb6c3fce9fad8d221d3b954d33f2311487fe820","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    FORM_FIELDS_TYPES \u003d set()"},{"line_number":58,"context_line":"    _element_locator_str_prefix \u003d \u0027div.form-group\u0027"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def __init__(self, driver, conf, src_elem\u003dNone):"},{"line_number":61,"context_line":"        super().__init__(driver, conf, src_elem)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def fields(self):"},{"line_number":64,"context_line":"        for field_cls in self.FORM_FIELDS_TYPES:"}],"source_content_type":"text/x-python","patch_set":7,"id":"8681c9c7_5313a316","line":61,"range":{"start_line":60,"start_character":4,"end_line":61,"end_character":48},"in_reply_to":"5473bc42_0fbda933","updated":"2022-02-03 15:54:44.000000000","message":"Done","commit_id":"e54c18991bdb041ca6a5596eaeaedb3000f07961"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ae5caa1c8a4b92abc68cc7555ae9e9ac2fae375d","unresolved":true,"context_lines":[{"line_number":456,"context_line":"        return self._get_form_fields()"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"class FormRegionNG(BaseFormRegion):"},{"line_number":460,"context_line":"    \"\"\"Standard form.\"\"\""},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    _header_locator \u003d (by.By.CSS_SELECTOR, \u0027div.modal-header \u003e h3\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"d1bdefbb_8a8e0259","line":459,"updated":"2021-12-12 21:14:48.000000000","message":"I see similar logics in FormRegion and FormRegionNG.\nFrom the code maintenance perspective, it would be nice if we can prepare a common class which defines the expected methods and FormRegion and FormRegionNG inherit it. I believe it would highlight the differences more.","commit_id":"e54c18991bdb041ca6a5596eaeaedb3000f07961"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"ddb6c3fce9fad8d221d3b954d33f2311487fe820","unresolved":false,"context_lines":[{"line_number":456,"context_line":"        return self._get_form_fields()"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"class FormRegionNG(BaseFormRegion):"},{"line_number":460,"context_line":"    \"\"\"Standard form.\"\"\""},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    _header_locator \u003d (by.By.CSS_SELECTOR, \u0027div.modal-header \u003e h3\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"48046974_468b67f0","line":459,"in_reply_to":"66adb7c4_23361db7","updated":"2022-02-03 15:54:44.000000000","message":"Done","commit_id":"e54c18991bdb041ca6a5596eaeaedb3000f07961"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"7764c5e4f563778870c61321c4b9828d402f4dff","unresolved":true,"context_lines":[{"line_number":456,"context_line":"        return self._get_form_fields()"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"class FormRegionNG(BaseFormRegion):"},{"line_number":460,"context_line":"    \"\"\"Standard form.\"\"\""},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    _header_locator \u003d (by.By.CSS_SELECTOR, \u0027div.modal-header \u003e h3\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"66adb7c4_23361db7","line":459,"in_reply_to":"d1bdefbb_8a8e0259","updated":"2021-12-13 17:11:05.000000000","message":"So far the difference is mostly in locators, so probably it will be nice to even keep the name FormRegion for this common class and make legacy an angular-based ones inherit it using different set of locators.","commit_id":"e54c18991bdb041ca6a5596eaeaedb3000f07961"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ae5caa1c8a4b92abc68cc7555ae9e9ac2fae375d","unresolved":true,"context_lines":[{"line_number":457,"context_line":""},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"class FormRegionNG(BaseFormRegion):"},{"line_number":460,"context_line":"    \"\"\"Standard form.\"\"\""},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    _header_locator \u003d (by.By.CSS_SELECTOR, \u0027div.modal-header \u003e h3\u0027)"},{"line_number":463,"context_line":"    _side_info_locator \u003d (by.By.CSS_SELECTOR, \u0027div.right\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a06ccee_c46689d0","line":460,"updated":"2021-12-12 21:14:48.000000000","message":"Perhaps \"Standard form for Angular-based xxxx\" would be better because we would like to know what \"NG\" means.","commit_id":"e54c18991bdb041ca6a5596eaeaedb3000f07961"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"7764c5e4f563778870c61321c4b9828d402f4dff","unresolved":false,"context_lines":[{"line_number":457,"context_line":""},{"line_number":458,"context_line":""},{"line_number":459,"context_line":"class FormRegionNG(BaseFormRegion):"},{"line_number":460,"context_line":"    \"\"\"Standard form.\"\"\""},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"    _header_locator \u003d (by.By.CSS_SELECTOR, \u0027div.modal-header \u003e h3\u0027)"},{"line_number":463,"context_line":"    _side_info_locator \u003d (by.By.CSS_SELECTOR, \u0027div.right\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"df5975ee_d30cfca0","line":460,"in_reply_to":"5a06ccee_c46689d0","updated":"2021-12-13 17:11:05.000000000","message":"Ack","commit_id":"e54c18991bdb041ca6a5596eaeaedb3000f07961"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6c6aae6d51c9ce25ceb7e75acefddc6db7d351ae","unresolved":true,"context_lines":[{"line_number":449,"context_line":"    _side_info_locator \u003d (by.By.CSS_SELECTOR, \u0027div.right\u0027)"},{"line_number":450,"context_line":"    _fields_locator \u003d (by.By.CSS_SELECTOR, \u0027div.content\u0027)"},{"line_number":451,"context_line":"    _step_locator \u003d (by.By.CSS_SELECTOR, \u0027div.step\u0027)"},{"line_number":452,"context_line":"    _submit_locator \u003d (by.By.CSS_SELECTOR, \u0027*.btn.btn-primary.finish\u0027)"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"    # properties"},{"line_number":455,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":15,"id":"65d00263_c7c16c6f","line":452,"updated":"2022-03-02 22:13:35.000000000","message":"L.448, L.449 and L.451 are not changed from the parent class.\nIsn\u0027t it better to override the attributes we really need to override only?","commit_id":"b8d11694945e78b4488b60a81cea1f1cddb73656"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"9f71a499e2de2f2427bed068cc01b5a100576ab2","unresolved":false,"context_lines":[{"line_number":449,"context_line":"    _side_info_locator \u003d (by.By.CSS_SELECTOR, \u0027div.right\u0027)"},{"line_number":450,"context_line":"    _fields_locator \u003d (by.By.CSS_SELECTOR, \u0027div.content\u0027)"},{"line_number":451,"context_line":"    _step_locator \u003d (by.By.CSS_SELECTOR, \u0027div.step\u0027)"},{"line_number":452,"context_line":"    _submit_locator \u003d (by.By.CSS_SELECTOR, \u0027*.btn.btn-primary.finish\u0027)"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"    # properties"},{"line_number":455,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":15,"id":"32ed96ca_a41dd3ca","line":452,"in_reply_to":"65d00263_c7c16c6f","updated":"2022-03-18 23:23:45.000000000","message":"Done","commit_id":"b8d11694945e78b4488b60a81cea1f1cddb73656"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6c6aae6d51c9ce25ceb7e75acefddc6db7d351ae","unresolved":true,"context_lines":[{"line_number":453,"context_line":""},{"line_number":454,"context_line":"    # properties"},{"line_number":455,"context_line":"    @property"},{"line_number":456,"context_line":"    def _submit_element(self):"},{"line_number":457,"context_line":"        try:"},{"line_number":458,"context_line":"            submit_element \u003d self._get_element(*self._submit_locator)"},{"line_number":459,"context_line":"        except exceptions.NoSuchElementException:"},{"line_number":460,"context_line":"            submit_element \u003d self._get_element(*self._submit_danger_locator)"},{"line_number":461,"context_line":"        return submit_element"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    def submit(self):"},{"line_number":464,"context_line":"        self._submit_element.click()"},{"line_number":465,"context_line":"        self.wait_till_spinner_disappears()"}],"source_content_type":"text/x-python","patch_set":15,"id":"d6023cb0_d3f270db","line":462,"range":{"start_line":456,"start_character":4,"end_line":462,"end_character":0},"updated":"2022-03-02 22:13:35.000000000","message":"Is this needed? At a glance, there seems no difference from BaseFormRegion._submit_element() at L.333.","commit_id":"b8d11694945e78b4488b60a81cea1f1cddb73656"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"9f71a499e2de2f2427bed068cc01b5a100576ab2","unresolved":false,"context_lines":[{"line_number":453,"context_line":""},{"line_number":454,"context_line":"    # properties"},{"line_number":455,"context_line":"    @property"},{"line_number":456,"context_line":"    def _submit_element(self):"},{"line_number":457,"context_line":"        try:"},{"line_number":458,"context_line":"            submit_element \u003d self._get_element(*self._submit_locator)"},{"line_number":459,"context_line":"        except exceptions.NoSuchElementException:"},{"line_number":460,"context_line":"            submit_element \u003d self._get_element(*self._submit_danger_locator)"},{"line_number":461,"context_line":"        return submit_element"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    def submit(self):"},{"line_number":464,"context_line":"        self._submit_element.click()"},{"line_number":465,"context_line":"        self.wait_till_spinner_disappears()"}],"source_content_type":"text/x-python","patch_set":15,"id":"b6c75fee_21e3c656","line":462,"range":{"start_line":456,"start_character":4,"end_line":462,"end_character":0},"in_reply_to":"d6023cb0_d3f270db","updated":"2022-03-18 23:23:45.000000000","message":"Done","commit_id":"b8d11694945e78b4488b60a81cea1f1cddb73656"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6c6aae6d51c9ce25ceb7e75acefddc6db7d351ae","unresolved":true,"context_lines":[{"line_number":460,"context_line":"            submit_element \u003d self._get_element(*self._submit_danger_locator)"},{"line_number":461,"context_line":"        return submit_element"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    def submit(self):"},{"line_number":464,"context_line":"        self._submit_element.click()"},{"line_number":465,"context_line":"        self.wait_till_spinner_disappears()"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"class TabbedFormRegion(FormRegion):"}],"source_content_type":"text/x-python","patch_set":15,"id":"89cf2055_12159395","line":465,"range":{"start_line":463,"start_character":4,"end_line":465,"end_character":43},"updated":"2022-03-02 22:13:35.000000000","message":"This looks unnecessary as it is defined in the grandparent class BaseFormRegion at L.340.","commit_id":"b8d11694945e78b4488b60a81cea1f1cddb73656"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"9f71a499e2de2f2427bed068cc01b5a100576ab2","unresolved":false,"context_lines":[{"line_number":460,"context_line":"            submit_element \u003d self._get_element(*self._submit_danger_locator)"},{"line_number":461,"context_line":"        return submit_element"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    def submit(self):"},{"line_number":464,"context_line":"        self._submit_element.click()"},{"line_number":465,"context_line":"        self.wait_till_spinner_disappears()"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"class TabbedFormRegion(FormRegion):"}],"source_content_type":"text/x-python","patch_set":15,"id":"2914e496_51c14439","line":465,"range":{"start_line":463,"start_character":4,"end_line":465,"end_character":43},"in_reply_to":"89cf2055_12159395","updated":"2022-03-18 23:23:45.000000000","message":"Done","commit_id":"b8d11694945e78b4488b60a81cea1f1cddb73656"}],"openstack_dashboard/test/integration_tests/regions/tables.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ae5caa1c8a4b92abc68cc7555ae9e9ac2fae375d","unresolved":true,"context_lines":[{"line_number":45,"context_line":"        chck_box.click()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class RowRegionNG(baseregion.BaseRegion):"},{"line_number":49,"context_line":"    \"\"\"Angularized table row.\"\"\""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    _cell_locator \u003d (by.By.CSS_SELECTOR, \u0027td \u003e hz-cell\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"269e50be_411855bd","line":48,"range":{"start_line":48,"start_character":6,"end_line":48,"end_character":17},"updated":"2021-12-12 21:14:48.000000000","message":"Same comment as for FormRegionNG in the previous file.","commit_id":"e54c18991bdb041ca6a5596eaeaedb3000f07961"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"ddb6c3fce9fad8d221d3b954d33f2311487fe820","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        chck_box.click()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class RowRegionNG(baseregion.BaseRegion):"},{"line_number":49,"context_line":"    \"\"\"Angularized table row.\"\"\""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    _cell_locator \u003d (by.By.CSS_SELECTOR, \u0027td \u003e hz-cell\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"93a114e2_124c88c2","line":48,"range":{"start_line":48,"start_character":6,"end_line":48,"end_character":17},"in_reply_to":"269e50be_411855bd","updated":"2022-02-03 15:54:44.000000000","message":"Done","commit_id":"e54c18991bdb041ca6a5596eaeaedb3000f07961"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ae5caa1c8a4b92abc68cc7555ae9e9ac2fae375d","unresolved":true,"context_lines":[{"line_number":277,"context_line":"        self.assertDictEqual(actual_table, expected_table_definition)"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"class TableRegionNG(baseregion.BaseRegion):"},{"line_number":281,"context_line":"    \"\"\"Basic class representing angularized table object.\"\"\""},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    _heading_locator \u003d (by.By.CSS_SELECTOR,"}],"source_content_type":"text/x-python","patch_set":7,"id":"fb27c540_59e6d05e","line":280,"range":{"start_line":280,"start_character":6,"end_line":280,"end_character":19},"updated":"2021-12-12 21:14:48.000000000","message":"Same comment as for FormRegionNG in the previous file.","commit_id":"e54c18991bdb041ca6a5596eaeaedb3000f07961"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"ddb6c3fce9fad8d221d3b954d33f2311487fe820","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        self.assertDictEqual(actual_table, expected_table_definition)"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"class TableRegionNG(baseregion.BaseRegion):"},{"line_number":281,"context_line":"    \"\"\"Basic class representing angularized table object.\"\"\""},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    _heading_locator \u003d (by.By.CSS_SELECTOR,"}],"source_content_type":"text/x-python","patch_set":7,"id":"380c3545_2fe1442f","line":280,"range":{"start_line":280,"start_character":6,"end_line":280,"end_character":19},"in_reply_to":"fb27c540_59e6d05e","updated":"2022-02-03 15:54:44.000000000","message":"Done","commit_id":"e54c18991bdb041ca6a5596eaeaedb3000f07961"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ae5caa1c8a4b92abc68cc7555ae9e9ac2fae375d","unresolved":true,"context_lines":[{"line_number":526,"context_line":"    return decorator"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"def bind_table_action_ng(action_name):"},{"line_number":530,"context_line":"    \"\"\"Decorator to bind table region method to an actual table action button."},{"line_number":531,"context_line":""},{"line_number":532,"context_line":"    This decorator uses specific locators for for angularized tables."}],"source_content_type":"text/x-python","patch_set":7,"id":"d98fba1e_ca24e405","line":529,"range":{"start_line":529,"start_character":4,"end_line":529,"end_character":24},"updated":"2021-12-12 21:14:48.000000000","message":"Same comment as for FormRegionNG in the previous file.\nI am not a fan of copy-paste logic.","commit_id":"e54c18991bdb041ca6a5596eaeaedb3000f07961"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"ddb6c3fce9fad8d221d3b954d33f2311487fe820","unresolved":false,"context_lines":[{"line_number":526,"context_line":"    return decorator"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"def bind_table_action_ng(action_name):"},{"line_number":530,"context_line":"    \"\"\"Decorator to bind table region method to an actual table action button."},{"line_number":531,"context_line":""},{"line_number":532,"context_line":"    This decorator uses specific locators for for angularized tables."}],"source_content_type":"text/x-python","patch_set":7,"id":"115b2ba6_325735cd","line":529,"range":{"start_line":529,"start_character":4,"end_line":529,"end_character":24},"in_reply_to":"d98fba1e_ca24e405","updated":"2022-02-03 15:54:44.000000000","message":"Done","commit_id":"e54c18991bdb041ca6a5596eaeaedb3000f07961"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6c6aae6d51c9ce25ceb7e75acefddc6db7d351ae","unresolved":true,"context_lines":[{"line_number":270,"context_line":"    _empty_table_locator \u003d (by.By.CSS_SELECTOR, \u0027tbody \u003e tr \u003e td.no-rows-help\u0027)"},{"line_number":271,"context_line":"    _cell_progress_bar_locator \u003d (by.By.CSS_SELECTOR, \u0027div.progress-bar\u0027)"},{"line_number":272,"context_line":"    _warning_cell_locator \u003d (by.By.CSS_SELECTOR, \u0027td.warning\u0027)"},{"line_number":273,"context_line":"    _default_form_locator \u003d (by.By.CSS_SELECTOR, \u0027div.modal-dialog\u0027)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def __init__(self, driver, conf):"},{"line_number":276,"context_line":"        self._default_src_locator \u003d self._table_locator(self.__class__.name)"}],"source_content_type":"text/x-python","patch_set":15,"id":"22ed7b77_5cd4d543","line":273,"updated":"2022-03-02 22:13:35.000000000","message":"Some attributes are different from the parent class and some are same.\nIsn\u0027t it better to override the attributes we really need to override only?","commit_id":"b8d11694945e78b4488b60a81cea1f1cddb73656"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"9f71a499e2de2f2427bed068cc01b5a100576ab2","unresolved":false,"context_lines":[{"line_number":270,"context_line":"    _empty_table_locator \u003d (by.By.CSS_SELECTOR, \u0027tbody \u003e tr \u003e td.no-rows-help\u0027)"},{"line_number":271,"context_line":"    _cell_progress_bar_locator \u003d (by.By.CSS_SELECTOR, \u0027div.progress-bar\u0027)"},{"line_number":272,"context_line":"    _warning_cell_locator \u003d (by.By.CSS_SELECTOR, \u0027td.warning\u0027)"},{"line_number":273,"context_line":"    _default_form_locator \u003d (by.By.CSS_SELECTOR, \u0027div.modal-dialog\u0027)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def __init__(self, driver, conf):"},{"line_number":276,"context_line":"        self._default_src_locator \u003d self._table_locator(self.__class__.name)"}],"source_content_type":"text/x-python","patch_set":15,"id":"e29ee63a_33eb99a5","line":273,"in_reply_to":"22ed7b77_5cd4d543","updated":"2022-03-18 23:23:45.000000000","message":"Done","commit_id":"b8d11694945e78b4488b60a81cea1f1cddb73656"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6c6aae6d51c9ce25ceb7e75acefddc6db7d351ae","unresolved":true,"context_lines":[{"line_number":272,"context_line":"    _warning_cell_locator \u003d (by.By.CSS_SELECTOR, \u0027td.warning\u0027)"},{"line_number":273,"context_line":"    _default_form_locator \u003d (by.By.CSS_SELECTOR, \u0027div.modal-dialog\u0027)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def __init__(self, driver, conf):"},{"line_number":276,"context_line":"        self._default_src_locator \u003d self._table_locator(self.__class__.name)"},{"line_number":277,"context_line":"        super().__init__(driver, conf)"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def _table_locator(self, table_name):"},{"line_number":280,"context_line":"        return by.By.CSS_SELECTOR, \u0027hz-dynamic-table\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"bafb3f89_10b6c7c4","line":277,"range":{"start_line":275,"start_character":4,"end_line":277,"end_character":38},"updated":"2022-03-02 22:13:35.000000000","message":"This is exactly same as __init__ defined in the parent class.\nAs a result, _table_locator() is called twice. Is it what you expect?","commit_id":"b8d11694945e78b4488b60a81cea1f1cddb73656"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"9f71a499e2de2f2427bed068cc01b5a100576ab2","unresolved":false,"context_lines":[{"line_number":272,"context_line":"    _warning_cell_locator \u003d (by.By.CSS_SELECTOR, \u0027td.warning\u0027)"},{"line_number":273,"context_line":"    _default_form_locator \u003d (by.By.CSS_SELECTOR, \u0027div.modal-dialog\u0027)"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    def __init__(self, driver, conf):"},{"line_number":276,"context_line":"        self._default_src_locator \u003d self._table_locator(self.__class__.name)"},{"line_number":277,"context_line":"        super().__init__(driver, conf)"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    def _table_locator(self, table_name):"},{"line_number":280,"context_line":"        return by.By.CSS_SELECTOR, \u0027hz-dynamic-table\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"f73f7633_145782e4","line":277,"range":{"start_line":275,"start_character":4,"end_line":277,"end_character":38},"in_reply_to":"bafb3f89_10b6c7c4","updated":"2022-03-18 23:23:45.000000000","message":"Done","commit_id":"b8d11694945e78b4488b60a81cea1f1cddb73656"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6c6aae6d51c9ce25ceb7e75acefddc6db7d351ae","unresolved":true,"context_lines":[{"line_number":512,"context_line":"    \"\"\"A decorator to bind table region method to a anchor in a column."},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"    This decorator works with angular-based tables."},{"line_number":515,"context_line":"    Typical examples of such tables are Project -\u003e Compute -\u003e Images, Admin"},{"line_number":516,"context_line":"    -\u003e System -\u003e Flavors, Project -\u003e Compute -\u003e Instancies."},{"line_number":517,"context_line":"    The method can be used to follow the link in the anchor by the click."},{"line_number":518,"context_line":"    \"\"\""},{"line_number":519,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"ce875678_8a5b9ce6","line":516,"range":{"start_line":515,"start_character":4,"end_line":516,"end_character":59},"updated":"2022-03-02 22:13:35.000000000","message":"Examples looks wrong.","commit_id":"b8d11694945e78b4488b60a81cea1f1cddb73656"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"9f71a499e2de2f2427bed068cc01b5a100576ab2","unresolved":false,"context_lines":[{"line_number":512,"context_line":"    \"\"\"A decorator to bind table region method to a anchor in a column."},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"    This decorator works with angular-based tables."},{"line_number":515,"context_line":"    Typical examples of such tables are Project -\u003e Compute -\u003e Images, Admin"},{"line_number":516,"context_line":"    -\u003e System -\u003e Flavors, Project -\u003e Compute -\u003e Instancies."},{"line_number":517,"context_line":"    The method can be used to follow the link in the anchor by the click."},{"line_number":518,"context_line":"    \"\"\""},{"line_number":519,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"8ca75960_b87601aa","line":516,"range":{"start_line":515,"start_character":4,"end_line":516,"end_character":59},"in_reply_to":"ce875678_8a5b9ce6","updated":"2022-03-18 23:23:45.000000000","message":"Done","commit_id":"b8d11694945e78b4488b60a81cea1f1cddb73656"}],"openstack_dashboard/test/integration_tests/tests/test_images.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6c6aae6d51c9ce25ceb7e75acefddc6db7d351ae","unresolved":true,"context_lines":[{"line_number":334,"context_line":"    def images_page(self):"},{"line_number":335,"context_line":"        return self.home_pg.go_to_admin_compute_imagespage()"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"    def test_image_create_delete(self):"},{"line_number":338,"context_line":"        super().test_image_create_delete()"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"    def test_filter_images(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"03e1ed6d_e2de159c","side":"PARENT","line":337,"updated":"2022-03-02 22:13:35.000000000","message":"test_image_create_delete is not covered in the new TestImagesAdminAngular class.\nI see test_image_create_delete only in the project panel test. Is it enough?","commit_id":"6a84dd2b9aee3b398a9d6fed2bc5f51dcde6263b"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"9f71a499e2de2f2427bed068cc01b5a100576ab2","unresolved":false,"context_lines":[{"line_number":334,"context_line":"    def images_page(self):"},{"line_number":335,"context_line":"        return self.home_pg.go_to_admin_compute_imagespage()"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"    def test_image_create_delete(self):"},{"line_number":338,"context_line":"        super().test_image_create_delete()"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"    def test_filter_images(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"64c6e0c6_1ae74860","side":"PARENT","line":337,"in_reply_to":"03e1ed6d_e2de159c","updated":"2022-03-18 23:23:45.000000000","message":"One does not simply create an image. There\u0027s two options: create from a local file or create from url. So I add two tests for two these cases to TestImagesBasicAngular, where TestImagesAdminAngular will take them too.","commit_id":"6a84dd2b9aee3b398a9d6fed2bc5f51dcde6263b"}],"openstack_dashboard/test/integration_tests/tests/test_volumes.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ae5caa1c8a4b92abc68cc7555ae9e9ac2fae375d","unresolved":true,"context_lines":[{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    @property"},{"line_number":245,"context_line":"    def images_page(self):"},{"line_number":246,"context_line":"        from openstack_dashboard.test.integration_tests.pages.project. \\"},{"line_number":247,"context_line":"            compute.imagespage import ImagesPageNG"},{"line_number":248,"context_line":"        self.home_pg.go_to_project_compute_imagespage()"},{"line_number":249,"context_line":"        return ImagesPageNG(self.driver, self.CONFIG)"},{"line_number":250,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"d520a45d_f7b5eced","line":247,"range":{"start_line":246,"start_character":8,"end_line":247,"end_character":50},"updated":"2021-12-12 21:14:48.000000000","message":"Is there any reason we need to import this here instead of at the beginning of the file? If no reason, it is better to move it to the top.","commit_id":"e54c18991bdb041ca6a5596eaeaedb3000f07961"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"ddb6c3fce9fad8d221d3b954d33f2311487fe820","unresolved":false,"context_lines":[{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    @property"},{"line_number":245,"context_line":"    def images_page(self):"},{"line_number":246,"context_line":"        from openstack_dashboard.test.integration_tests.pages.project. \\"},{"line_number":247,"context_line":"            compute.imagespage import ImagesPageNG"},{"line_number":248,"context_line":"        self.home_pg.go_to_project_compute_imagespage()"},{"line_number":249,"context_line":"        return ImagesPageNG(self.driver, self.CONFIG)"},{"line_number":250,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"697a40ef_9f67f6ae","line":247,"range":{"start_line":246,"start_character":8,"end_line":247,"end_character":50},"in_reply_to":"1b687910_ce4e9e75","updated":"2022-02-03 15:54:44.000000000","message":"Done","commit_id":"e54c18991bdb041ca6a5596eaeaedb3000f07961"},{"author":{"_account_id":6914,"name":"Tatiana Ovchinnikova","email":"t.v.ovtchinnikova@gmail.com","username":"tmazur"},"change_message_id":"7764c5e4f563778870c61321c4b9828d402f4dff","unresolved":true,"context_lines":[{"line_number":243,"context_line":""},{"line_number":244,"context_line":"    @property"},{"line_number":245,"context_line":"    def images_page(self):"},{"line_number":246,"context_line":"        from openstack_dashboard.test.integration_tests.pages.project. \\"},{"line_number":247,"context_line":"            compute.imagespage import ImagesPageNG"},{"line_number":248,"context_line":"        self.home_pg.go_to_project_compute_imagespage()"},{"line_number":249,"context_line":"        return ImagesPageNG(self.driver, self.CONFIG)"},{"line_number":250,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1b687910_ce4e9e75","line":247,"range":{"start_line":246,"start_character":8,"end_line":247,"end_character":50},"in_reply_to":"d520a45d_f7b5eced","updated":"2021-12-13 17:11:05.000000000","message":"It is the same dirty hack we\u0027re using at test_images to make the tests work with angular page instead of the legacy one. I believe after all the clean up we\u0027ll be able to use just the angular page normally.","commit_id":"e54c18991bdb041ca6a5596eaeaedb3000f07961"}]}
