)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7f6f1bb34175ff1a79f228e11cb5c7619c047c93","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"0a6b99e2_05e3d633","updated":"2021-11-19 16:57:54.000000000","message":"I need to look through this is more detail next week, but this _looks_ pretty good to me. Got some suggestions inline. You can also remove the comment from the commit message now. Will re-review next week when I\u0027m back from PTO.","commit_id":"0026ef0ea871eb7d38fb541ad6ee7ffe67279da3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6710c6912d7a641937d0c37c7f99a4ce809841c4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"ca68f0f5_66263805","updated":"2021-11-29 11:09:04.000000000","message":"Pretty good. There\u0027s a small bug and a nit in one of the test helpers. Fix those and I\u0027m +2","commit_id":"45fc3afb86de5cd69990da94059601e4fcd2c32d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3261a48c0499cdb51bb20eca1c5b239a80ee42ef","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"2e8ae298_32957ce1","updated":"2021-12-01 16:51:15.000000000","message":"This looks good to me now. Nice work!","commit_id":"9297e224e394849874fd9570db3adf998b39b1bd"},{"author":{"_account_id":34060,"name":"Ritvik Vinodkumar","email":"vinodkumar.r@northeastern.edu","username":"ritvikvinod"},"change_message_id":"872c1cb85aa574ce558a1108b8199a94fbd7f60b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"1482ac45_febd8a29","updated":"2021-12-01 20:05:02.000000000","message":"recheck","commit_id":"9297e224e394849874fd9570db3adf998b39b1bd"},{"author":{"_account_id":34060,"name":"Ritvik Vinodkumar","email":"vinodkumar.r@northeastern.edu","username":"ritvikvinod"},"change_message_id":"7172eda0abe15954b63fce5b67354519a976b506","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"5080b77f_9b3f875d","updated":"2021-12-02 17:13:20.000000000","message":"recheck","commit_id":"9297e224e394849874fd9570db3adf998b39b1bd"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"b5235291a45f374051f980a846e31f726d5f39b7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"833ea3b2_2656085c","updated":"2021-12-09 17:21:53.000000000","message":"recheck","commit_id":"9297e224e394849874fd9570db3adf998b39b1bd"},{"author":{"_account_id":34060,"name":"Ritvik Vinodkumar","email":"vinodkumar.r@northeastern.edu","username":"ritvikvinod"},"change_message_id":"7aa9c133605625affbbc585d907c4a3611434196","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"8e4a2532_03744813","updated":"2021-12-03 16:38:29.000000000","message":"recheck","commit_id":"9297e224e394849874fd9570db3adf998b39b1bd"},{"author":{"_account_id":34060,"name":"Ritvik Vinodkumar","email":"vinodkumar.r@northeastern.edu","username":"ritvikvinod"},"change_message_id":"58775ca41eb3597b0515c7bf0802a4c75351469b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"91a861de_050a2086","updated":"2021-12-01 17:23:18.000000000","message":"recheck","commit_id":"9297e224e394849874fd9570db3adf998b39b1bd"},{"author":{"_account_id":34060,"name":"Ritvik Vinodkumar","email":"vinodkumar.r@northeastern.edu","username":"ritvikvinod"},"change_message_id":"92287e0ffe2dd76f5ee525185163abcdaf605cbb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"c8abbe81_6bca8870","updated":"2021-12-01 22:04:44.000000000","message":"recheck","commit_id":"9297e224e394849874fd9570db3adf998b39b1bd"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4be71c77ae312c2ebb0733c9964b6fb01585c72d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"44df1456_969af07e","updated":"2022-01-14 19:12:57.000000000","message":"Trivial merge conflict","commit_id":"b5a2714b83d4ce1991aae775381dcfb02ff59e9d"}],"openstackclient/compute/v2/service.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7f6f1bb34175ff1a79f228e11cb5c7619c047c93","unresolved":true,"context_lines":[{"line_number":49,"context_line":"        result \u003d 0"},{"line_number":50,"context_line":"        for s in parsed_args.service:"},{"line_number":51,"context_line":"            try:"},{"line_number":52,"context_line":"                compute_client.delete_service(s, False)"},{"line_number":53,"context_line":"            except Exception as e:"},{"line_number":54,"context_line":"                result +\u003d 1"},{"line_number":55,"context_line":"                LOG.error(_(\"Failed to delete compute service with \""}],"source_content_type":"text/x-python","patch_set":3,"id":"d77905bb_015abaf4","line":52,"range":{"start_line":52,"start_character":49,"end_line":52,"end_character":54},"updated":"2021-11-19 16:57:54.000000000","message":"Can you make this explicit?\n\n  compute_client.delete_service(s, ignore_missing\u003dFalse)","commit_id":"0026ef0ea871eb7d38fb541ad6ee7ffe67279da3"},{"author":{"_account_id":34060,"name":"Ritvik Vinodkumar","email":"vinodkumar.r@northeastern.edu","username":"ritvikvinod"},"change_message_id":"28b890979adbfe9528568755f0369944a180730d","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        result \u003d 0"},{"line_number":50,"context_line":"        for s in parsed_args.service:"},{"line_number":51,"context_line":"            try:"},{"line_number":52,"context_line":"                compute_client.delete_service(s, False)"},{"line_number":53,"context_line":"            except Exception as e:"},{"line_number":54,"context_line":"                result +\u003d 1"},{"line_number":55,"context_line":"                LOG.error(_(\"Failed to delete compute service with \""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a685314_2b672fdf","line":52,"range":{"start_line":52,"start_character":49,"end_line":52,"end_character":54},"in_reply_to":"d77905bb_015abaf4","updated":"2021-11-19 20:44:21.000000000","message":"Done","commit_id":"0026ef0ea871eb7d38fb541ad6ee7ffe67279da3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7f6f1bb34175ff1a79f228e11cb5c7619c047c93","unresolved":true,"context_lines":[{"line_number":97,"context_line":"                \"ID\","},{"line_number":98,"context_line":"                \"Binary\","},{"line_number":99,"context_line":"                \"Host\","},{"line_number":100,"context_line":"                \"Availability Zone\","},{"line_number":101,"context_line":"                \"Status\","},{"line_number":102,"context_line":"                \"State\","},{"line_number":103,"context_line":"                \"Updated At\","}],"source_content_type":"text/x-python","patch_set":3,"id":"fe4f0f30_f1fc0cd9","line":100,"updated":"2021-11-19 16:57:54.000000000","message":"Let\u0027s not change this...","commit_id":"0026ef0ea871eb7d38fb541ad6ee7ffe67279da3"},{"author":{"_account_id":34060,"name":"Ritvik Vinodkumar","email":"vinodkumar.r@northeastern.edu","username":"ritvikvinod"},"change_message_id":"28b890979adbfe9528568755f0369944a180730d","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                \"ID\","},{"line_number":98,"context_line":"                \"Binary\","},{"line_number":99,"context_line":"                \"Host\","},{"line_number":100,"context_line":"                \"Availability Zone\","},{"line_number":101,"context_line":"                \"Status\","},{"line_number":102,"context_line":"                \"State\","},{"line_number":103,"context_line":"                \"Updated At\","}],"source_content_type":"text/x-python","patch_set":3,"id":"e104ffd3_fd59d67c","line":100,"in_reply_to":"fe4f0f30_f1fc0cd9","updated":"2021-11-19 20:44:21.000000000","message":"Created \u0027column_headers\u0027 to deal with this","commit_id":"0026ef0ea871eb7d38fb541ad6ee7ffe67279da3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7f6f1bb34175ff1a79f228e11cb5c7619c047c93","unresolved":true,"context_lines":[{"line_number":106,"context_line":"            has_forced_down \u003d ("},{"line_number":107,"context_line":"                sdk_utils.supports_microversion(compute_client, \u00272.11\u0027))"},{"line_number":108,"context_line":"            if has_forced_down:"},{"line_number":109,"context_line":"                columns +\u003d (\"Is Forced Down\",)"},{"line_number":110,"context_line":"        else:"},{"line_number":111,"context_line":"            columns \u003d ("},{"line_number":112,"context_line":"                \"ID\","}],"source_content_type":"text/x-python","patch_set":3,"id":"042cfc5c_0428aaa0","line":109,"updated":"2021-11-19 16:57:54.000000000","message":"or this...","commit_id":"0026ef0ea871eb7d38fb541ad6ee7ffe67279da3"},{"author":{"_account_id":34060,"name":"Ritvik Vinodkumar","email":"vinodkumar.r@northeastern.edu","username":"ritvikvinod"},"change_message_id":"28b890979adbfe9528568755f0369944a180730d","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            has_forced_down \u003d ("},{"line_number":107,"context_line":"                sdk_utils.supports_microversion(compute_client, \u00272.11\u0027))"},{"line_number":108,"context_line":"            if has_forced_down:"},{"line_number":109,"context_line":"                columns +\u003d (\"Is Forced Down\",)"},{"line_number":110,"context_line":"        else:"},{"line_number":111,"context_line":"            columns \u003d ("},{"line_number":112,"context_line":"                \"ID\","}],"source_content_type":"text/x-python","patch_set":3,"id":"ad27b60e_e25a7e96","line":109,"in_reply_to":"042cfc5c_0428aaa0","updated":"2021-11-19 20:44:21.000000000","message":"Created \u0027column_headers\u0027 to deal with this","commit_id":"0026ef0ea871eb7d38fb541ad6ee7ffe67279da3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7f6f1bb34175ff1a79f228e11cb5c7619c047c93","unresolved":true,"context_lines":[{"line_number":112,"context_line":"                \"ID\","},{"line_number":113,"context_line":"                \"Binary\","},{"line_number":114,"context_line":"                \"Host\","},{"line_number":115,"context_line":"                \"Availability Zone\","},{"line_number":116,"context_line":"                \"Status\","},{"line_number":117,"context_line":"                \"State\","},{"line_number":118,"context_line":"                \"Updated At\""}],"source_content_type":"text/x-python","patch_set":3,"id":"cc04c2af_6751ab1d","line":115,"updated":"2021-11-19 16:57:54.000000000","message":"or this...","commit_id":"0026ef0ea871eb7d38fb541ad6ee7ffe67279da3"},{"author":{"_account_id":34060,"name":"Ritvik Vinodkumar","email":"vinodkumar.r@northeastern.edu","username":"ritvikvinod"},"change_message_id":"28b890979adbfe9528568755f0369944a180730d","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                \"ID\","},{"line_number":113,"context_line":"                \"Binary\","},{"line_number":114,"context_line":"                \"Host\","},{"line_number":115,"context_line":"                \"Availability Zone\","},{"line_number":116,"context_line":"                \"Status\","},{"line_number":117,"context_line":"                \"State\","},{"line_number":118,"context_line":"                \"Updated At\""}],"source_content_type":"text/x-python","patch_set":3,"id":"5357830d_980b1401","line":115,"in_reply_to":"cc04c2af_6751ab1d","updated":"2021-11-19 20:44:21.000000000","message":"Created \u0027column_headers\u0027 to deal with this","commit_id":"0026ef0ea871eb7d38fb541ad6ee7ffe67279da3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7f6f1bb34175ff1a79f228e11cb5c7619c047c93","unresolved":true,"context_lines":[{"line_number":116,"context_line":"                \"Status\","},{"line_number":117,"context_line":"                \"State\","},{"line_number":118,"context_line":"                \"Updated At\""},{"line_number":119,"context_line":"            )"},{"line_number":120,"context_line":"        data \u003d compute_client.services("},{"line_number":121,"context_line":"            host\u003dparsed_args.host,"},{"line_number":122,"context_line":"            binary\u003dparsed_args.service"}],"source_content_type":"text/x-python","patch_set":3,"id":"f649c2cc_09782e27","line":119,"updated":"2021-11-19 16:57:54.000000000","message":"What you should do instead if provide two lists: \u0027columns\u0027 and \u0027column_headers\u0027. The former should be the terms that the SDK uses like \u0027is_forced_down\u0027 while the latter should be what we have here. You\u0027ll find plenty of examples of this in-tree","commit_id":"0026ef0ea871eb7d38fb541ad6ee7ffe67279da3"},{"author":{"_account_id":34060,"name":"Ritvik Vinodkumar","email":"vinodkumar.r@northeastern.edu","username":"ritvikvinod"},"change_message_id":"28b890979adbfe9528568755f0369944a180730d","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                \"Status\","},{"line_number":117,"context_line":"                \"State\","},{"line_number":118,"context_line":"                \"Updated At\""},{"line_number":119,"context_line":"            )"},{"line_number":120,"context_line":"        data \u003d compute_client.services("},{"line_number":121,"context_line":"            host\u003dparsed_args.host,"},{"line_number":122,"context_line":"            binary\u003dparsed_args.service"}],"source_content_type":"text/x-python","patch_set":3,"id":"0ea3a6ee_571cdfed","line":119,"in_reply_to":"f649c2cc_09782e27","updated":"2021-11-19 20:44:21.000000000","message":"I split this into \u0027columns\u0027 and \u0027column_headers\u0027 similar to how its done for other commands.","commit_id":"0026ef0ea871eb7d38fb541ad6ee7ffe67279da3"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6710c6912d7a641937d0c37c7f99a4ce809841c4","unresolved":true,"context_lines":[{"line_number":42,"context_line":"                   \"a UUID which can be retrieved by listing compute services \""},{"line_number":43,"context_line":"                   \"using the same 2.53+ microversion.\")"},{"line_number":44,"context_line":"        )"},{"line_number":45,"context_line":"        return parser"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def take_action(self, parsed_args):"},{"line_number":48,"context_line":"        compute_client \u003d self.app.client_manager.sdk_connection.compute"}],"source_content_type":"text/x-python","patch_set":10,"id":"15468e3c_28d05e3c","line":45,"updated":"2021-11-29 11:09:04.000000000","message":"I couldn\u0027t test this without messing up my deployment. It looks sensible enough though so I\u0027m happy. We might want to add a note here about stopping the compute service on the host before running this, as was done in novaclient a while back [1] A possible follow-up?\n\n[1] https://opendev.org/openstack/python-novaclient/commit/4ceba48697201dede5d17020ca7bc4f5af244ea5","commit_id":"45fc3afb86de5cd69990da94059601e4fcd2c32d"},{"author":{"_account_id":34060,"name":"Ritvik Vinodkumar","email":"vinodkumar.r@northeastern.edu","username":"ritvikvinod"},"change_message_id":"7bcb0ec04a32f3aed1b99bc03abef52188040ae6","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                   \"a UUID which can be retrieved by listing compute services \""},{"line_number":43,"context_line":"                   \"using the same 2.53+ microversion.\")"},{"line_number":44,"context_line":"        )"},{"line_number":45,"context_line":"        return parser"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def take_action(self, parsed_args):"},{"line_number":48,"context_line":"        compute_client \u003d self.app.client_manager.sdk_connection.compute"}],"source_content_type":"text/x-python","patch_set":10,"id":"e3647991_66bd77fe","line":45,"in_reply_to":"15468e3c_28d05e3c","updated":"2021-11-29 21:03:38.000000000","message":"I added this to the help field. I hope this is good","commit_id":"45fc3afb86de5cd69990da94059601e4fcd2c32d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6710c6912d7a641937d0c37c7f99a4ce809841c4","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            default\u003dFalse,"},{"line_number":92,"context_line":"            help\u003d_(\"List additional fields in output\")"},{"line_number":93,"context_line":"        )"},{"line_number":94,"context_line":"        return parser"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def take_action(self, parsed_args):"},{"line_number":97,"context_line":"        compute_client \u003d self.app.client_manager.sdk_connection.compute"}],"source_content_type":"text/x-python","patch_set":10,"id":"a60f742e_cb1d9369","line":94,"updated":"2021-11-29 11:09:04.000000000","message":"Played with this an all of these options work as expected 👍","commit_id":"45fc3afb86de5cd69990da94059601e4fcd2c32d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6710c6912d7a641937d0c37c7f99a4ce809841c4","unresolved":true,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def take_action(self, parsed_args):"},{"line_number":97,"context_line":"        compute_client \u003d self.app.client_manager.sdk_connection.compute"},{"line_number":98,"context_line":"        if parsed_args.long:"},{"line_number":99,"context_line":"            columns \u003d ("},{"line_number":100,"context_line":"                \"id\","},{"line_number":101,"context_line":"                \"binary\","},{"line_number":102,"context_line":"                \"host\","},{"line_number":103,"context_line":"                \"availability_zone\","},{"line_number":104,"context_line":"                \"status\","},{"line_number":105,"context_line":"                \"state\","},{"line_number":106,"context_line":"                \"updated_at\","},{"line_number":107,"context_line":"                \"disabled_reason\""},{"line_number":108,"context_line":"            )"},{"line_number":109,"context_line":"            column_headers \u003d ("},{"line_number":110,"context_line":"                \"ID\","},{"line_number":111,"context_line":"                \"Binary\","},{"line_number":112,"context_line":"                \"Host\","},{"line_number":113,"context_line":"                \"Zone\","},{"line_number":114,"context_line":"                \"Status\","},{"line_number":115,"context_line":"                \"State\","},{"line_number":116,"context_line":"                \"Updated At\","},{"line_number":117,"context_line":"                \"Disabled Reason\""},{"line_number":118,"context_line":"            )"},{"line_number":119,"context_line":"            has_forced_down \u003d ("},{"line_number":120,"context_line":"                sdk_utils.supports_microversion(compute_client, \u00272.11\u0027))"},{"line_number":121,"context_line":"            if has_forced_down:"},{"line_number":122,"context_line":"                columns +\u003d (\"is_forced_down\",)"},{"line_number":123,"context_line":"                column_headers +\u003d (\"Forced Down\",)"},{"line_number":124,"context_line":"        else:"},{"line_number":125,"context_line":"            columns \u003d ("},{"line_number":126,"context_line":"                \"id\","},{"line_number":127,"context_line":"                \"binary\","},{"line_number":128,"context_line":"                \"host\","},{"line_number":129,"context_line":"                \"availability_zone\","},{"line_number":130,"context_line":"                \"status\","},{"line_number":131,"context_line":"                \"state\","},{"line_number":132,"context_line":"                \"updated_at\""},{"line_number":133,"context_line":"            )"},{"line_number":134,"context_line":"            column_headers \u003d ("},{"line_number":135,"context_line":"                \"ID\","},{"line_number":136,"context_line":"                \"Binary\","},{"line_number":137,"context_line":"                \"Host\","},{"line_number":138,"context_line":"                \"Zone\","},{"line_number":139,"context_line":"                \"Status\","},{"line_number":140,"context_line":"                \"State\","},{"line_number":141,"context_line":"                \"Updated At\""},{"line_number":142,"context_line":"            )"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        data \u003d compute_client.services("},{"line_number":145,"context_line":"            host\u003dparsed_args.host,"}],"source_content_type":"text/x-python","patch_set":10,"id":"578536e9_23679b1a","line":142,"range":{"start_line":98,"start_character":0,"end_line":142,"end_character":13},"updated":"2021-11-29 11:09:04.000000000","message":"This isn\u0027t entirely on you, but this is more complicated than necessary. Since we\u0027re only appending to the end, we could do e.g.\n\n    columns \u003d (\n        \"id\",\n        \"binary\",\n        \"host\",\n        \"availability_zone\",\n        \"status\",\n        \"state\",\n        \"updated_at\",\n    )\n    column_headers \u003d (\n        \"ID\",\n        \"Binary\",\n        \"Host\",\n        \"Zone\",\n        \"Status\",\n        \"State\",\n        \"Updated At\",\n    )\n    if parsed_args.long:\n        columns +\u003d (\"disabled_reason\",)\n        column_headers +\u003d (\"Disabled Reason\",)\n        if sdk_utils.supports_microversion(compute_client, \u00272.11\u0027):\n            columns +\u003d (\"is_forced_down\",)\n            column_headers +\u003d (\"Forced Down\",)\n\nwhich is much shorter and easier to grok, IMO","commit_id":"45fc3afb86de5cd69990da94059601e4fcd2c32d"},{"author":{"_account_id":34060,"name":"Ritvik Vinodkumar","email":"vinodkumar.r@northeastern.edu","username":"ritvikvinod"},"change_message_id":"7bcb0ec04a32f3aed1b99bc03abef52188040ae6","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def take_action(self, parsed_args):"},{"line_number":97,"context_line":"        compute_client \u003d self.app.client_manager.sdk_connection.compute"},{"line_number":98,"context_line":"        if parsed_args.long:"},{"line_number":99,"context_line":"            columns \u003d ("},{"line_number":100,"context_line":"                \"id\","},{"line_number":101,"context_line":"                \"binary\","},{"line_number":102,"context_line":"                \"host\","},{"line_number":103,"context_line":"                \"availability_zone\","},{"line_number":104,"context_line":"                \"status\","},{"line_number":105,"context_line":"                \"state\","},{"line_number":106,"context_line":"                \"updated_at\","},{"line_number":107,"context_line":"                \"disabled_reason\""},{"line_number":108,"context_line":"            )"},{"line_number":109,"context_line":"            column_headers \u003d ("},{"line_number":110,"context_line":"                \"ID\","},{"line_number":111,"context_line":"                \"Binary\","},{"line_number":112,"context_line":"                \"Host\","},{"line_number":113,"context_line":"                \"Zone\","},{"line_number":114,"context_line":"                \"Status\","},{"line_number":115,"context_line":"                \"State\","},{"line_number":116,"context_line":"                \"Updated At\","},{"line_number":117,"context_line":"                \"Disabled Reason\""},{"line_number":118,"context_line":"            )"},{"line_number":119,"context_line":"            has_forced_down \u003d ("},{"line_number":120,"context_line":"                sdk_utils.supports_microversion(compute_client, \u00272.11\u0027))"},{"line_number":121,"context_line":"            if has_forced_down:"},{"line_number":122,"context_line":"                columns +\u003d (\"is_forced_down\",)"},{"line_number":123,"context_line":"                column_headers +\u003d (\"Forced Down\",)"},{"line_number":124,"context_line":"        else:"},{"line_number":125,"context_line":"            columns \u003d ("},{"line_number":126,"context_line":"                \"id\","},{"line_number":127,"context_line":"                \"binary\","},{"line_number":128,"context_line":"                \"host\","},{"line_number":129,"context_line":"                \"availability_zone\","},{"line_number":130,"context_line":"                \"status\","},{"line_number":131,"context_line":"                \"state\","},{"line_number":132,"context_line":"                \"updated_at\""},{"line_number":133,"context_line":"            )"},{"line_number":134,"context_line":"            column_headers \u003d ("},{"line_number":135,"context_line":"                \"ID\","},{"line_number":136,"context_line":"                \"Binary\","},{"line_number":137,"context_line":"                \"Host\","},{"line_number":138,"context_line":"                \"Zone\","},{"line_number":139,"context_line":"                \"Status\","},{"line_number":140,"context_line":"                \"State\","},{"line_number":141,"context_line":"                \"Updated At\""},{"line_number":142,"context_line":"            )"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        data \u003d compute_client.services("},{"line_number":145,"context_line":"            host\u003dparsed_args.host,"}],"source_content_type":"text/x-python","patch_set":10,"id":"91500cfe_e9616df0","line":142,"range":{"start_line":98,"start_character":0,"end_line":142,"end_character":13},"in_reply_to":"578536e9_23679b1a","updated":"2021-11-29 21:03:38.000000000","message":"Done","commit_id":"45fc3afb86de5cd69990da94059601e4fcd2c32d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6710c6912d7a641937d0c37c7f99a4ce809841c4","unresolved":true,"context_lines":[{"line_number":145,"context_line":"            host\u003dparsed_args.host,"},{"line_number":146,"context_line":"            binary\u003dparsed_args.service"},{"line_number":147,"context_line":"        )"},{"line_number":148,"context_line":"        return (column_headers,"},{"line_number":149,"context_line":"                (utils.get_item_properties("},{"line_number":150,"context_line":"                    s, columns,"},{"line_number":151,"context_line":"                ) for s in data))"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"class SetService(command.Command):"}],"source_content_type":"text/x-python","patch_set":10,"id":"9e5c42d5_167b140f","line":151,"range":{"start_line":148,"start_character":0,"end_line":151,"end_character":33},"updated":"2021-11-29 11:09:04.000000000","message":"style nit:\n\n  return (\n      column_headers,\n      (utils.get_item_properties(s, columns) for s in data),\n  )","commit_id":"45fc3afb86de5cd69990da94059601e4fcd2c32d"},{"author":{"_account_id":34060,"name":"Ritvik Vinodkumar","email":"vinodkumar.r@northeastern.edu","username":"ritvikvinod"},"change_message_id":"7bcb0ec04a32f3aed1b99bc03abef52188040ae6","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            host\u003dparsed_args.host,"},{"line_number":146,"context_line":"            binary\u003dparsed_args.service"},{"line_number":147,"context_line":"        )"},{"line_number":148,"context_line":"        return (column_headers,"},{"line_number":149,"context_line":"                (utils.get_item_properties("},{"line_number":150,"context_line":"                    s, columns,"},{"line_number":151,"context_line":"                ) for s in data))"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"class SetService(command.Command):"}],"source_content_type":"text/x-python","patch_set":10,"id":"9f655c8c_a6c214de","line":151,"range":{"start_line":148,"start_character":0,"end_line":151,"end_character":33},"in_reply_to":"9e5c42d5_167b140f","updated":"2021-11-29 21:03:38.000000000","message":"Done","commit_id":"45fc3afb86de5cd69990da94059601e4fcd2c32d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6710c6912d7a641937d0c37c7f99a4ce809841c4","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            action\u003d\u0027store_true\u0027,"},{"line_number":198,"context_line":"            help\u003d_(\u0027Force down service. Requires ``--os-compute-api-version`` \u0027"},{"line_number":199,"context_line":"                   \u00272.11 or greater.\u0027),"},{"line_number":200,"context_line":"        )"},{"line_number":201,"context_line":"        return parser"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":10,"id":"d69108ea_0c6ecb5b","line":200,"updated":"2021-11-29 11:09:04.000000000","message":"Played with all of these options also and they worked as expected, once I fixed the bug below 👍","commit_id":"45fc3afb86de5cd69990da94059601e4fcd2c32d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6710c6912d7a641937d0c37c7f99a4ce809841c4","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        :returns: novaclient.v2.services.Service dict-like object"},{"line_number":210,"context_line":"        :raises: CommandError if no or multiple results were found"},{"line_number":211,"context_line":"        \"\"\""},{"line_number":212,"context_line":"        services \u003d compute_client.services(host\u003dhost, binary\u003dbinary)"},{"line_number":213,"context_line":"        # Did we find anything?"},{"line_number":214,"context_line":"        if not len(services):"},{"line_number":215,"context_line":"            msg \u003d _(\u0027Compute service for host \"%(host)s\" and binary \u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"e0d867a6_65000138","line":212,"updated":"2021-11-29 11:09:04.000000000","message":"This returns a generator...","commit_id":"45fc3afb86de5cd69990da94059601e4fcd2c32d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6710c6912d7a641937d0c37c7f99a4ce809841c4","unresolved":true,"context_lines":[{"line_number":211,"context_line":"        \"\"\""},{"line_number":212,"context_line":"        services \u003d compute_client.services(host\u003dhost, binary\u003dbinary)"},{"line_number":213,"context_line":"        # Did we find anything?"},{"line_number":214,"context_line":"        if not len(services):"},{"line_number":215,"context_line":"            msg \u003d _(\u0027Compute service for host \"%(host)s\" and binary \u0027"},{"line_number":216,"context_line":"                    \u0027\"%(binary)s\" not found.\u0027) % {"},{"line_number":217,"context_line":"                        \u0027host\u0027: host, \u0027binary\u0027: binary}"}],"source_content_type":"text/x-python","patch_set":10,"id":"230f04a0_13e23f74","line":214,"updated":"2021-11-29 11:09:04.000000000","message":"...but generators don\u0027t have a __len__ property. You need to wrap the above in \u0027list()\u0027 to convert it to a list. See below for more info","commit_id":"45fc3afb86de5cd69990da94059601e4fcd2c32d"},{"author":{"_account_id":34060,"name":"Ritvik Vinodkumar","email":"vinodkumar.r@northeastern.edu","username":"ritvikvinod"},"change_message_id":"7bcb0ec04a32f3aed1b99bc03abef52188040ae6","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        \"\"\""},{"line_number":212,"context_line":"        services \u003d compute_client.services(host\u003dhost, binary\u003dbinary)"},{"line_number":213,"context_line":"        # Did we find anything?"},{"line_number":214,"context_line":"        if not len(services):"},{"line_number":215,"context_line":"            msg \u003d _(\u0027Compute service for host \"%(host)s\" and binary \u0027"},{"line_number":216,"context_line":"                    \u0027\"%(binary)s\" not found.\u0027) % {"},{"line_number":217,"context_line":"                        \u0027host\u0027: host, \u0027binary\u0027: binary}"}],"source_content_type":"text/x-python","patch_set":10,"id":"27ab11ce_3aff8bcd","line":214,"in_reply_to":"230f04a0_13e23f74","updated":"2021-11-29 21:03:38.000000000","message":"Just changed it to len(list(services))","commit_id":"45fc3afb86de5cd69990da94059601e4fcd2c32d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6710c6912d7a641937d0c37c7f99a4ce809841c4","unresolved":true,"context_lines":[{"line_number":274,"context_line":"                        parsed_args.host,"},{"line_number":275,"context_line":"                        parsed_args.service,"},{"line_number":276,"context_line":"                        parsed_args.disable_reason"},{"line_number":277,"context_line":"                    )"},{"line_number":278,"context_line":"        except Exception:"},{"line_number":279,"context_line":"            status \u003d \"enabled\" if enabled else \"disabled\""},{"line_number":280,"context_line":"            LOG.error(\"Failed to set service status to %s\", status)"}],"source_content_type":"text/x-python","patch_set":10,"id":"221cfe82_8812d80c","line":277,"updated":"2021-11-29 11:09:04.000000000","message":"This is failing for me:\n\n  $ openstack compute service list --host stephenfin-devstack-controller                                                                                                                                             \n  +--------------------------------------+----------------+--------------------------------+---\n  | ID                                   | Binary         | Host                           | ..\n  +--------------------------------------+----------------+--------------------------------+---\n  | 172c0fc6-611b-450f-b980-9f6c76d9d38d | nova-scheduler | stephenfin-devstack-controller | ..\n  | e9c93ce7-eb19-4ca4-8f28-eb3582536011 | nova-conductor | stephenfin-devstack-controller | ..\n  | 1b5ef388-a123-4d59-9d72-de313423e24c | nova-conductor | stephenfin-devstack-controller | ..\n  | 0b7418e4-ef42-427e-84c8-80bcd8e072c9 | nova-compute   | stephenfin-devstack-controller | ..\n  +--------------------------------------+----------------+--------------------------------+---\n  $ openstack compute service set --disable --disable-reason \"Because I can\" stephenfin-devstack-compute nova-compute\n  object of type \u0027generator\u0027 has no len()\n\nPassing \u0027--debug\u0027 shows why:\n\n    object of type \u0027generator\u0027 has no len()\n    Traceback (most recent call last):\n      File \".../.venv/lib/python3.8/site-packages/cliff/app.py\", line 407, in run_subcommand\n        result \u003d cmd.run(parsed_args)\n      File \".../.venv/lib/python3.8/site-packages/osc_lib/command/command.py\", line 39, in run\n        return super(Command, self).run(parsed_args)\n      File \".../.venv/lib/python3.8/site-packages/cliff/command.py\", line 186, in run\n        return_code \u003d self.take_action(parsed_args) or 0\n      File \".../openstackclient/compute/v2/service.py\", line 250, in take_action\n        service_id \u003d SetService._find_service_by_host_and_binary(\n      File \".../openstackclient/compute/v2/service.py\", line 214, in _find_service_by_host_and_binary\n        if not len(services):\n    TypeError: object of type \u0027generator\u0027 has no len()\n\nEvidently you need to convert that generator to a list, as noted above","commit_id":"45fc3afb86de5cd69990da94059601e4fcd2c32d"},{"author":{"_account_id":34060,"name":"Ritvik Vinodkumar","email":"vinodkumar.r@northeastern.edu","username":"ritvikvinod"},"change_message_id":"7bcb0ec04a32f3aed1b99bc03abef52188040ae6","unresolved":false,"context_lines":[{"line_number":274,"context_line":"                        parsed_args.host,"},{"line_number":275,"context_line":"                        parsed_args.service,"},{"line_number":276,"context_line":"                        parsed_args.disable_reason"},{"line_number":277,"context_line":"                    )"},{"line_number":278,"context_line":"        except Exception:"},{"line_number":279,"context_line":"            status \u003d \"enabled\" if enabled else \"disabled\""},{"line_number":280,"context_line":"            LOG.error(\"Failed to set service status to %s\", status)"}],"source_content_type":"text/x-python","patch_set":10,"id":"d1498a0c_72d774ff","line":277,"in_reply_to":"221cfe82_8812d80c","updated":"2021-11-29 21:03:38.000000000","message":"Done","commit_id":"45fc3afb86de5cd69990da94059601e4fcd2c32d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"cceb6f308d014e0aaee7495c17c78802356cd97c","unresolved":true,"context_lines":[{"line_number":40,"context_line":"            help\u003d_(\"Compute service(s) to delete (ID only). If using \""},{"line_number":41,"context_line":"                   \"``--os-compute-api-version`` 2.53 or greater, the ID is \""},{"line_number":42,"context_line":"                   \"a UUID which can be retrieved by listing compute services \""},{"line_number":43,"context_line":"                   \"using the same 2.53+ microversion.\""},{"line_number":44,"context_line":"                   \"If deleting a compute service, be sure to stop the actual \""},{"line_number":45,"context_line":"                   \"compute process on the physical host before deleting the \""},{"line_number":46,"context_line":"                   \"service with this command. Failing to do so can lead to \""}],"source_content_type":"text/x-python","patch_set":12,"id":"3aa2031c_da67430d","line":43,"range":{"start_line":43,"start_character":54,"end_line":43,"end_character":55},"updated":"2021-11-30 16:20:35.000000000","message":"Missing trailing space before the quote. This prints as:\n\n  ...microversion.If deleting...","commit_id":"55613b68ec52bc568ce7188ee09b45295b7c9c8d"},{"author":{"_account_id":34060,"name":"Ritvik Vinodkumar","email":"vinodkumar.r@northeastern.edu","username":"ritvikvinod"},"change_message_id":"8bff5d67a118725e65ab6fe3e2e2be2066ff0ac1","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            help\u003d_(\"Compute service(s) to delete (ID only). If using \""},{"line_number":41,"context_line":"                   \"``--os-compute-api-version`` 2.53 or greater, the ID is \""},{"line_number":42,"context_line":"                   \"a UUID which can be retrieved by listing compute services \""},{"line_number":43,"context_line":"                   \"using the same 2.53+ microversion.\""},{"line_number":44,"context_line":"                   \"If deleting a compute service, be sure to stop the actual \""},{"line_number":45,"context_line":"                   \"compute process on the physical host before deleting the \""},{"line_number":46,"context_line":"                   \"service with this command. Failing to do so can lead to \""}],"source_content_type":"text/x-python","patch_set":12,"id":"2729d97f_96ff1e91","line":43,"range":{"start_line":43,"start_character":54,"end_line":43,"end_character":55},"in_reply_to":"3aa2031c_da67430d","updated":"2021-12-01 00:43:47.000000000","message":"Done","commit_id":"55613b68ec52bc568ce7188ee09b45295b7c9c8d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"cceb6f308d014e0aaee7495c17c78802356cd97c","unresolved":true,"context_lines":[{"line_number":194,"context_line":"        :raises: CommandError if no or multiple results were found"},{"line_number":195,"context_line":"        \"\"\""},{"line_number":196,"context_line":"        services \u003d compute_client.services(host\u003dhost, binary\u003dbinary)"},{"line_number":197,"context_line":"        print(list(services))"},{"line_number":198,"context_line":"        # Did we find anything?"},{"line_number":199,"context_line":"        if not len(list(services)):"},{"line_number":200,"context_line":"            msg \u003d _(\u0027Compute service for host \"%(host)s\" and binary \u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"1e7834b5_b4a9888b","line":197,"updated":"2021-11-30 16:20:35.000000000","message":"whoops","commit_id":"55613b68ec52bc568ce7188ee09b45295b7c9c8d"},{"author":{"_account_id":34060,"name":"Ritvik Vinodkumar","email":"vinodkumar.r@northeastern.edu","username":"ritvikvinod"},"change_message_id":"8bff5d67a118725e65ab6fe3e2e2be2066ff0ac1","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        :raises: CommandError if no or multiple results were found"},{"line_number":195,"context_line":"        \"\"\""},{"line_number":196,"context_line":"        services \u003d compute_client.services(host\u003dhost, binary\u003dbinary)"},{"line_number":197,"context_line":"        print(list(services))"},{"line_number":198,"context_line":"        # Did we find anything?"},{"line_number":199,"context_line":"        if not len(list(services)):"},{"line_number":200,"context_line":"            msg \u003d _(\u0027Compute service for host \"%(host)s\" and binary \u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"9eef7f27_c8dea9f6","line":197,"in_reply_to":"1e7834b5_b4a9888b","updated":"2021-12-01 00:43:47.000000000","message":"Oops! Removed it now","commit_id":"55613b68ec52bc568ce7188ee09b45295b7c9c8d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"cceb6f308d014e0aaee7495c17c78802356cd97c","unresolved":true,"context_lines":[{"line_number":196,"context_line":"        services \u003d compute_client.services(host\u003dhost, binary\u003dbinary)"},{"line_number":197,"context_line":"        print(list(services))"},{"line_number":198,"context_line":"        # Did we find anything?"},{"line_number":199,"context_line":"        if not len(list(services)):"},{"line_number":200,"context_line":"            msg \u003d _(\u0027Compute service for host \"%(host)s\" and binary \u0027"},{"line_number":201,"context_line":"                    \u0027\"%(binary)s\" not found.\u0027) % {"},{"line_number":202,"context_line":"                        \u0027host\u0027: host, \u0027binary\u0027: binary}"}],"source_content_type":"text/x-python","patch_set":12,"id":"3746ec49_cb578cf5","line":199,"updated":"2021-11-30 16:20:35.000000000","message":"You can\u0027t do this. A generator is a function that uses yield instead of return. They can only be consumed once. Once consumed, they\u0027re empty. For example:\n\n  \u003e\u003e\u003e def num_sequence():\n  ...     num \u003d 0\n  ...     while num \u003c 10:\n  ...         yield num\n  ...         num +\u003d 1\n  ... \n  \u003e\u003e\u003e x \u003d num_sequence()\n  \u003e\u003e\u003e len(x)\n  Traceback (most recent call last):\n    File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\n  TypeError: object of type \u0027generator\u0027 has no len()\n  \u003e\u003e\u003e len(list(x))\n  10\n  \u003e\u003e\u003e len(list(x))\n  0\n\nYou need to wrap the all to \u0027compute_client.services\u0027 above, rather than doing it each time.","commit_id":"55613b68ec52bc568ce7188ee09b45295b7c9c8d"},{"author":{"_account_id":34060,"name":"Ritvik Vinodkumar","email":"vinodkumar.r@northeastern.edu","username":"ritvikvinod"},"change_message_id":"8bff5d67a118725e65ab6fe3e2e2be2066ff0ac1","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        services \u003d compute_client.services(host\u003dhost, binary\u003dbinary)"},{"line_number":197,"context_line":"        print(list(services))"},{"line_number":198,"context_line":"        # Did we find anything?"},{"line_number":199,"context_line":"        if not len(list(services)):"},{"line_number":200,"context_line":"            msg \u003d _(\u0027Compute service for host \"%(host)s\" and binary \u0027"},{"line_number":201,"context_line":"                    \u0027\"%(binary)s\" not found.\u0027) % {"},{"line_number":202,"context_line":"                        \u0027host\u0027: host, \u0027binary\u0027: binary}"}],"source_content_type":"text/x-python","patch_set":12,"id":"60dae2fa_ca15a010","line":199,"in_reply_to":"3746ec49_cb578cf5","updated":"2021-12-01 00:43:47.000000000","message":"Oh I didn\u0027t know about this. Just made the change","commit_id":"55613b68ec52bc568ce7188ee09b45295b7c9c8d"}],"openstackclient/tests/unit/compute/v2/fakes.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6710c6912d7a641937d0c37c7f99a4ce809841c4","unresolved":true,"context_lines":[{"line_number":764,"context_line":"        :param dict attrs:"},{"line_number":765,"context_line":"            A dictionary with all attributes"},{"line_number":766,"context_line":"        :return:"},{"line_number":767,"context_line":"            A FakeResource object, with id, host, binary, and so on"},{"line_number":768,"context_line":"        \"\"\""},{"line_number":769,"context_line":"        attrs \u003d attrs or {}"},{"line_number":770,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"d64d9f82_9c951e11","line":767,"range":{"start_line":767,"start_character":14,"end_line":767,"end_character":26},"updated":"2021-11-29 11:09:04.000000000","message":"This is no longer true","commit_id":"45fc3afb86de5cd69990da94059601e4fcd2c32d"},{"author":{"_account_id":34060,"name":"Ritvik Vinodkumar","email":"vinodkumar.r@northeastern.edu","username":"ritvikvinod"},"change_message_id":"7bcb0ec04a32f3aed1b99bc03abef52188040ae6","unresolved":false,"context_lines":[{"line_number":764,"context_line":"        :param dict attrs:"},{"line_number":765,"context_line":"            A dictionary with all attributes"},{"line_number":766,"context_line":"        :return:"},{"line_number":767,"context_line":"            A FakeResource object, with id, host, binary, and so on"},{"line_number":768,"context_line":"        \"\"\""},{"line_number":769,"context_line":"        attrs \u003d attrs or {}"},{"line_number":770,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"83dcbf0b_20d8538f","line":767,"range":{"start_line":767,"start_character":14,"end_line":767,"end_character":26},"in_reply_to":"d64d9f82_9c951e11","updated":"2021-11-29 21:03:38.000000000","message":"Changed \u0027FakeResource\u0027 to \u0027Fake service object\u0027","commit_id":"45fc3afb86de5cd69990da94059601e4fcd2c32d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"cceb6f308d014e0aaee7495c17c78802356cd97c","unresolved":true,"context_lines":[{"line_number":764,"context_line":"        :param dict attrs:"},{"line_number":765,"context_line":"            A dictionary with all attributes"},{"line_number":766,"context_line":"        :return:"},{"line_number":767,"context_line":"            A Fake Service object, with id, host, binary, and so on"},{"line_number":768,"context_line":"        \"\"\""},{"line_number":769,"context_line":"        attrs \u003d attrs or {}"},{"line_number":770,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"cad1c90c_a303430d","line":767,"range":{"start_line":767,"start_character":14,"end_line":767,"end_character":18},"updated":"2021-11-30 16:20:35.000000000","message":"nit: fake (i.e. lowercase - uppercase makes it sound like it\u0027s a code thing)","commit_id":"55613b68ec52bc568ce7188ee09b45295b7c9c8d"},{"author":{"_account_id":34060,"name":"Ritvik Vinodkumar","email":"vinodkumar.r@northeastern.edu","username":"ritvikvinod"},"change_message_id":"8bff5d67a118725e65ab6fe3e2e2be2066ff0ac1","unresolved":false,"context_lines":[{"line_number":764,"context_line":"        :param dict attrs:"},{"line_number":765,"context_line":"            A dictionary with all attributes"},{"line_number":766,"context_line":"        :return:"},{"line_number":767,"context_line":"            A Fake Service object, with id, host, binary, and so on"},{"line_number":768,"context_line":"        \"\"\""},{"line_number":769,"context_line":"        attrs \u003d attrs or {}"},{"line_number":770,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"e25bdfcb_dce810e6","line":767,"range":{"start_line":767,"start_character":14,"end_line":767,"end_character":18},"in_reply_to":"cad1c90c_a303430d","updated":"2021-12-01 00:43:47.000000000","message":"Done","commit_id":"55613b68ec52bc568ce7188ee09b45295b7c9c8d"}]}
