)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f11570bc0dfac8c44a20a502b10587e31462558e","unresolved":false,"context_lines":[{"line_number":11,"context_line":"adds soft reboot and soft poweroff states."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Co-Authored-By: Naohiro Tamura \u003cnaohirot@jp.fujitsu.com\u003e"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Partial-Bug: #1526226"},{"line_number":16,"context_line":"Change-Id: Icd2859784f3df85c08162c14464bce58067aab1d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"da4df55a_d2137eb6","line":14,"updated":"2016-12-27 20:55:22.000000000","message":"Shouldn\u0027t this depend on I1c9bbd1f11f6a8565607c874b3c99aa10eeb62a5 ?\n\nIt doesn\u0027t make sense to land the client change until the REST API portion is merged.","commit_id":"4b80ca280c8586094461073c3e1e537ed08cd3c8"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"f0630b8fde5c0550a65085caddba1644febab9bf","unresolved":false,"context_lines":[{"line_number":11,"context_line":"adds soft reboot and soft poweroff states."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Co-Authored-By: Naohiro Tamura \u003cnaohirot@jp.fujitsu.com\u003e"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Partial-Bug: #1526226"},{"line_number":16,"context_line":"Change-Id: Icd2859784f3df85c08162c14464bce58067aab1d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"ba5201f7_d9ce83b3","line":14,"in_reply_to":"da4df55a_d2137eb6","updated":"2017-01-04 07:34:45.000000000","message":"I\u0027ll add that.","commit_id":"4b80ca280c8586094461073c3e1e537ed08cd3c8"}],"ironicclient/tests/unit/v1/test_node_shell.py":[{"author":{"_account_id":14937,"name":"Tang Chen","email":"imtangchen@163.com","username":"tangchen"},"change_message_id":"514010b96caec0dfb6c2484bb8fbe31f763a0018","unresolved":false,"context_lines":[{"line_number":399,"context_line":"    def test_do_node_set_power_state_soft_on(self):"},{"line_number":400,"context_line":"        self._do_node_set_power_state_helper(\u0027on\u0027, soft\u003dTrue)"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"    def test_do_node_set_power_state_soft_of(self):"},{"line_number":403,"context_line":"        self._do_node_set_power_state_helper(\u0027off\u0027, soft\u003dTrue)"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"    def test_do_node_set_power_state_soft_reboot(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3ac371cc_6fdc4146","line":402,"range":{"start_line":402,"start_character":42,"end_line":402,"end_character":44},"updated":"2016-08-18 11:27:52.000000000","message":"nit: off","commit_id":"c49980b2ffc72328ca99bbc1604d130886b7f6f0"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"5e59d149509ab69f701e05d5ea9d003d47a0e166","unresolved":false,"context_lines":[{"line_number":399,"context_line":"    def test_do_node_set_power_state_soft_on(self):"},{"line_number":400,"context_line":"        self._do_node_set_power_state_helper(\u0027on\u0027, soft\u003dTrue)"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"    def test_do_node_set_power_state_soft_of(self):"},{"line_number":403,"context_line":"        self._do_node_set_power_state_helper(\u0027off\u0027, soft\u003dTrue)"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"    def test_do_node_set_power_state_soft_reboot(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3ac371cc_ebd11331","line":402,"range":{"start_line":402,"start_character":42,"end_line":402,"end_character":44},"in_reply_to":"3ac371cc_6fdc4146","updated":"2016-08-19 01:33:30.000000000","message":"I\u0027ll fix that, thanks for the kind review!","commit_id":"c49980b2ffc72328ca99bbc1604d130886b7f6f0"}],"ironicclient/v1/node.py":[{"author":{"_account_id":14675,"name":"Hugo Nicodemos","email":"hugo.brito@windriver.com","username":"nicodemos"},"change_message_id":"d630d9a5c2b8c8e458f8cb857f8c596c675cb8f1","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    \u0027off\u0027: \u0027power off\u0027,"},{"line_number":28,"context_line":"    \u0027soft_off\u0027: \u0027soft power off\u0027,"},{"line_number":29,"context_line":"    \u0027reboot\u0027: \u0027rebooting\u0027,"},{"line_number":30,"context_line":"    \u0027soft off\u0027: \u0027soft power off\u0027,"},{"line_number":31,"context_line":"    \u0027soft reboot\u0027: \u0027soft rebooting\u0027,"},{"line_number":32,"context_line":"}"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3ac371cc_6d2cc602","line":30,"updated":"2016-08-16 15:19:08.000000000","message":"Is there a reason to have the same \u0027soft_off\u0027 state? Maybe is \u0027soft_on\u0027 here.","commit_id":"9277e8ff7db5b6c5df507373aa1a6ccf51a4d224"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"3b9914d2a68d5963e41e1fdaab532a65e5a6c2d4","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    \u0027off\u0027: \u0027power off\u0027,"},{"line_number":28,"context_line":"    \u0027soft_off\u0027: \u0027soft power off\u0027,"},{"line_number":29,"context_line":"    \u0027reboot\u0027: \u0027rebooting\u0027,"},{"line_number":30,"context_line":"    \u0027soft off\u0027: \u0027soft power off\u0027,"},{"line_number":31,"context_line":"    \u0027soft reboot\u0027: \u0027soft rebooting\u0027,"},{"line_number":32,"context_line":"}"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3ac371cc_573e9eda","line":30,"in_reply_to":"3ac371cc_6d2cc602","updated":"2016-08-16 23:49:02.000000000","message":"Hugo,\n\nThank for the kind review.\nThis is my merge mistake, L.28 is redundant.\nI\u0027ll fix that.\n\nBest regards,\nNaohiro","commit_id":"9277e8ff7db5b6c5df507373aa1a6ccf51a4d224"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"4e822f25b0767e1b12e94cef5f272162d33e0268","unresolved":false,"context_lines":[{"line_number":25,"context_line":"_power_states \u003d {"},{"line_number":26,"context_line":"    \u0027on\u0027: \u0027power on\u0027,"},{"line_number":27,"context_line":"    \u0027off\u0027: \u0027power off\u0027,"},{"line_number":28,"context_line":"    \u0027soft_off\u0027: \u0027soft power off\u0027,"},{"line_number":29,"context_line":"    \u0027reboot\u0027: \u0027rebooting\u0027,"},{"line_number":30,"context_line":"    \u0027soft off\u0027: \u0027soft power off\u0027,"},{"line_number":31,"context_line":"    \u0027soft reboot\u0027: \u0027soft rebooting\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"3ac371cc_57bf6c60","line":28,"range":{"start_line":28,"start_character":4,"end_line":28,"end_character":33},"updated":"2016-08-18 06:56:23.000000000","message":"TODO: remove","commit_id":"c49980b2ffc72328ca99bbc1604d130886b7f6f0"},{"author":{"_account_id":23883,"name":"Joanna Taryma","email":"joanna.taryma@intel.com","username":"jtaryma"},"change_message_id":"11750e9f74d6c7b60f92871886836a46358a311f","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        path \u003d \"%s/states/power\" % node_id"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        if soft:"},{"line_number":282,"context_line":"            target \u003d _power_states.get(\u0027soft \u0027 + state, state)"},{"line_number":283,"context_line":"        else:"},{"line_number":284,"context_line":"            target \u003d _power_states.get(state, state)"},{"line_number":285,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"ba5da102_54ca8fa2","line":282,"updated":"2016-10-27 03:13:24.000000000","message":"What if the state will be \"on\" and soft will be True?","commit_id":"4f9b20f66085a148f8628626c3857d9f8c04c12b"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"b547c7a59d39f97417a2870859b08d435e21f6e9","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        path \u003d \"%s/states/power\" % node_id"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        if soft:"},{"line_number":282,"context_line":"            target \u003d _power_states.get(\u0027soft \u0027 + state, state)"},{"line_number":283,"context_line":"        else:"},{"line_number":284,"context_line":"            target \u003d _power_states.get(state, state)"},{"line_number":285,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"ba5da102_250a47d3","line":282,"in_reply_to":"ba5da102_54ca8fa2","updated":"2016-10-27 08:02:38.000000000","message":"\"soft on\" has just same effect as \"on\".\n\n\u003e\u003e\u003e _power_states.get(\u0027soft \u0027 + \u0027on\u0027, \u0027on\u0027)\n\u0027on\u0027","commit_id":"4f9b20f66085a148f8628626c3857d9f8c04c12b"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d0435ede28d683ca9cd4d066f2d9ff6a121ac92e","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        else:"},{"line_number":276,"context_line":"            return self.delete(path)"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    def set_power_state(self, node_id, state, soft\u003dFalse, timeout\u003dNone):"},{"line_number":279,"context_line":"        path \u003d \"%s/states/power\" % node_id"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        if soft:"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_bc71d146","line":278,"range":{"start_line":278,"start_character":45,"end_line":278,"end_character":55},"updated":"2017-01-10 14:13:33.000000000","message":"It feels a bit awkward to me to have such flag because it doesn\u0027t work with all states, say \"on\", there\u0027s no such a thing as \"soft on\".\n\nI think we should tell the user to pass the state properly, e.g: \"on\", \"off\", \"reboot\", \"soft_off\" or \"soft_reboot\".","commit_id":"40f9ff3364d3b12bd97865953db95e0bb66f2661"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"932e211ed564b154f1e57662c5db1b4083d38176","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        else:"},{"line_number":276,"context_line":"            return self.delete(path)"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    def set_power_state(self, node_id, state, soft\u003dFalse, timeout\u003dNone):"},{"line_number":279,"context_line":"        path \u003d \"%s/states/power\" % node_id"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        if soft:"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_f791b247","line":278,"range":{"start_line":278,"start_character":45,"end_line":278,"end_character":55},"in_reply_to":"ba5201f7_bc71d146","updated":"2017-01-10 14:23:59.000000000","message":"I tend to agree, I think the CLI should look like \"set-power-state off --soft\", but the python API should look like `set_power_state(\u0027node\u0027, \u0027soft off\u0027)`.","commit_id":"40f9ff3364d3b12bd97865953db95e0bb66f2661"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"e9fbbcca8ef0c1142d998acd7f0578c31e55de37","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        else:"},{"line_number":276,"context_line":"            return self.delete(path)"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    def set_power_state(self, node_id, state, soft\u003dFalse, timeout\u003dNone):"},{"line_number":279,"context_line":"        path \u003d \"%s/states/power\" % node_id"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        if soft:"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_97aa2618","line":278,"range":{"start_line":278,"start_character":45,"end_line":278,"end_character":55},"in_reply_to":"ba5201f7_f791b247","updated":"2017-01-10 14:29:33.000000000","message":"+1","commit_id":"40f9ff3364d3b12bd97865953db95e0bb66f2661"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d0435ede28d683ca9cd4d066f2d9ff6a121ac92e","unresolved":false,"context_lines":[{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    def set_power_state(self, node_id, state, soft\u003dFalse, timeout\u003dNone):"},{"line_number":279,"context_line":"        path \u003d \"%s/states/power\" % node_id"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        if soft:"},{"line_number":282,"context_line":"            target \u003d _power_states.get(\u0027soft \u0027 + state, state)"},{"line_number":283,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_5c3f0525","line":280,"updated":"2017-01-10 14:13:33.000000000","message":"Continuing previous comment...\n\nAlso there\u0027s no validation on setting \"on\" with soft\u003dTrue, I get that it will fallback to \"on\" only, but it feels black magic-ish.","commit_id":"40f9ff3364d3b12bd97865953db95e0bb66f2661"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"34d7dc45a57029876053c1e297b1157631403f59","unresolved":false,"context_lines":[{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    def set_power_state(self, node_id, state, soft\u003dFalse, timeout\u003dNone):"},{"line_number":279,"context_line":"        path \u003d \"%s/states/power\" % node_id"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        if soft:"},{"line_number":282,"context_line":"            target \u003d _power_states.get(\u0027soft \u0027 + state, state)"},{"line_number":283,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_59e37333","line":280,"in_reply_to":"ba5201f7_5c3f0525","updated":"2017-01-11 07:06:27.000000000","message":"Okay, I\u0027ll raise CommandError() exception.","commit_id":"40f9ff3364d3b12bd97865953db95e0bb66f2661"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"2221b7df300de16fa3b7706b930e3e4453e3c836","unresolved":false,"context_lines":[{"line_number":281,"context_line":"        if soft:"},{"line_number":282,"context_line":"            target \u003d _power_states.get(\u0027soft \u0027 + state, state)"},{"line_number":283,"context_line":"        else:"},{"line_number":284,"context_line":"            target \u003d _power_states.get(state, state)"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"        if timeout:"},{"line_number":287,"context_line":"            body \u003d {\u0027target\u0027: target, \u0027timeout\u0027: timeout}"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a57fde8_9a250dad","line":284,"updated":"2017-01-12 20:04:06.000000000","message":"Don\u0027t we want to check for \u0027on\u0027 with the \u0027soft\u0027 argument here, instead of in node_shell? It isn\u0027t possible with the python API either.\n\nMaybe raise some error here, and in node_shell catch that error and raise a CommandError instead.\n\nShould we also validate that timeout \u003e 0?","commit_id":"b88d479d4a971cdb983c2eb42aaa49ca53128241"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"87d0f07a5da14b0c9ff7f8c94bb4660639c524aa","unresolved":false,"context_lines":[{"line_number":281,"context_line":"        if soft:"},{"line_number":282,"context_line":"            target \u003d _power_states.get(\u0027soft \u0027 + state, state)"},{"line_number":283,"context_line":"        else:"},{"line_number":284,"context_line":"            target \u003d _power_states.get(state, state)"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"        if timeout:"},{"line_number":287,"context_line":"            body \u003d {\u0027target\u0027: target, \u0027timeout\u0027: timeout}"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a3c09a3_df8ec126","line":284,"in_reply_to":"9a57fde8_9a250dad","updated":"2017-01-13 08:09:54.000000000","message":"And I tried to implement node_shell catch and re-throw an exception.\nBut the unit tests became very very complicated.\nSo I\u0027ll just move add soft option check here and add timeout option check.\nSo please advice me how to do better.","commit_id":"b88d479d4a971cdb983c2eb42aaa49ca53128241"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"2221b7df300de16fa3b7706b930e3e4453e3c836","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        if timeout:"},{"line_number":287,"context_line":"            body \u003d {\u0027target\u0027: target, \u0027timeout\u0027: timeout}"},{"line_number":288,"context_line":"        else:"},{"line_number":289,"context_line":"            body \u003d {\u0027target\u0027: target}"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        return self.update(path, body, http_method\u003d\u0027PUT\u0027)"},{"line_number":292,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"9a57fde8_ff060b1f","line":289,"updated":"2017-01-12 20:04:06.000000000","message":"nit: I\u0027d probably do it like the following to remove some duplication, but your code is fine too:\n\n    body \u003d {\u0027target\u0027: target}\n    if timeout:\n        body[\u0027timeout\u0027] \u003d timeout","commit_id":"b88d479d4a971cdb983c2eb42aaa49ca53128241"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"87d0f07a5da14b0c9ff7f8c94bb4660639c524aa","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        if timeout:"},{"line_number":287,"context_line":"            body \u003d {\u0027target\u0027: target, \u0027timeout\u0027: timeout}"},{"line_number":288,"context_line":"        else:"},{"line_number":289,"context_line":"            body \u003d {\u0027target\u0027: target}"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        return self.update(path, body, http_method\u003d\u0027PUT\u0027)"},{"line_number":292,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"7a3c09a3_bfed7890","line":289,"in_reply_to":"9a57fde8_ff060b1f","updated":"2017-01-13 08:09:54.000000000","message":"I\u0027ll fix that.","commit_id":"b88d479d4a971cdb983c2eb42aaa49ca53128241"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"c37806d3e849d340cbb4f6f66f8e02f7410a2c32","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        :returns: The status of the request"},{"line_number":287,"context_line":"        \"\"\""},{"line_number":288,"context_line":"        if state \u003d\u003d \u0027on\u0027 and soft:"},{"line_number":289,"context_line":"            raise exc.CommandError("},{"line_number":290,"context_line":"                _(\"\u0027--soft\u0027 option is invalid for the power-state \u0027on\u0027\"))"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        path \u003d \"%s/states/power\" % node_id"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a3c09a3_b00042ac","line":289,"range":{"start_line":289,"start_character":22,"end_line":289,"end_character":34},"updated":"2017-01-13 09:03:00.000000000","message":"should it be InvalidAttribute?","commit_id":"54843ce1ab1691ce5dffea4f391a60830cce7233"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"1c54dabdf9a559fb93bf55f293df869e8b6a38d2","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        :returns: The status of the request"},{"line_number":287,"context_line":"        \"\"\""},{"line_number":288,"context_line":"        if state \u003d\u003d \u0027on\u0027 and soft:"},{"line_number":289,"context_line":"            raise exc.CommandError("},{"line_number":290,"context_line":"                _(\"\u0027--soft\u0027 option is invalid for the power-state \u0027on\u0027\"))"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        path \u003d \"%s/states/power\" % node_id"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a3c09a3_8812fdb2","line":289,"range":{"start_line":289,"start_character":22,"end_line":289,"end_character":34},"in_reply_to":"7a3c09a3_58365904","updated":"2017-01-16 02:05:18.000000000","message":"I\u0027ll fix that.","commit_id":"54843ce1ab1691ce5dffea4f391a60830cce7233"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"2ed71b4679157b71374a292fa17d56ada9e5dc39","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        :returns: The status of the request"},{"line_number":287,"context_line":"        \"\"\""},{"line_number":288,"context_line":"        if state \u003d\u003d \u0027on\u0027 and soft:"},{"line_number":289,"context_line":"            raise exc.CommandError("},{"line_number":290,"context_line":"                _(\"\u0027--soft\u0027 option is invalid for the power-state \u0027on\u0027\"))"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        path \u003d \"%s/states/power\" % node_id"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a3c09a3_58365904","line":289,"range":{"start_line":289,"start_character":22,"end_line":289,"end_character":34},"in_reply_to":"7a3c09a3_b00042ac","updated":"2017-01-13 13:43:50.000000000","message":"That seems fine, or you could create a new exception called InvalidArgument or so.","commit_id":"54843ce1ab1691ce5dffea4f391a60830cce7233"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"c37806d3e849d340cbb4f6f66f8e02f7410a2c32","unresolved":false,"context_lines":[{"line_number":301,"context_line":"            if isinstance(timeout, int) and int(timeout) \u003e 0:"},{"line_number":302,"context_line":"                body \u003d {\u0027target\u0027: target, \u0027timeout\u0027: timeout}"},{"line_number":303,"context_line":"            else:"},{"line_number":304,"context_line":"                raise exc.CommandError("},{"line_number":305,"context_line":"                    _(\"\u0027--timeout\u0027 option must have positive integer \""},{"line_number":306,"context_line":"                      \"value (\u003e 0)\"))"},{"line_number":307,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"7a3c09a3_10267668","line":304,"range":{"start_line":304,"start_character":26,"end_line":304,"end_character":39},"updated":"2017-01-13 09:03:00.000000000","message":"should it be InvalidAttribute?","commit_id":"54843ce1ab1691ce5dffea4f391a60830cce7233"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"2ed71b4679157b71374a292fa17d56ada9e5dc39","unresolved":false,"context_lines":[{"line_number":301,"context_line":"            if isinstance(timeout, int) and int(timeout) \u003e 0:"},{"line_number":302,"context_line":"                body \u003d {\u0027target\u0027: target, \u0027timeout\u0027: timeout}"},{"line_number":303,"context_line":"            else:"},{"line_number":304,"context_line":"                raise exc.CommandError("},{"line_number":305,"context_line":"                    _(\"\u0027--timeout\u0027 option must have positive integer \""},{"line_number":306,"context_line":"                      \"value (\u003e 0)\"))"},{"line_number":307,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"7a3c09a3_182db1a7","line":304,"range":{"start_line":304,"start_character":26,"end_line":304,"end_character":39},"in_reply_to":"7a3c09a3_10267668","updated":"2017-01-13 13:43:50.000000000","message":"Ditto","commit_id":"54843ce1ab1691ce5dffea4f391a60830cce7233"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"1c54dabdf9a559fb93bf55f293df869e8b6a38d2","unresolved":false,"context_lines":[{"line_number":301,"context_line":"            if isinstance(timeout, int) and int(timeout) \u003e 0:"},{"line_number":302,"context_line":"                body \u003d {\u0027target\u0027: target, \u0027timeout\u0027: timeout}"},{"line_number":303,"context_line":"            else:"},{"line_number":304,"context_line":"                raise exc.CommandError("},{"line_number":305,"context_line":"                    _(\"\u0027--timeout\u0027 option must have positive integer \""},{"line_number":306,"context_line":"                      \"value (\u003e 0)\"))"},{"line_number":307,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"7a3c09a3_a815f99b","line":304,"range":{"start_line":304,"start_character":26,"end_line":304,"end_character":39},"in_reply_to":"7a3c09a3_182db1a7","updated":"2017-01-16 02:05:18.000000000","message":"I\u0027ll fix that.","commit_id":"54843ce1ab1691ce5dffea4f391a60830cce7233"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"9e9c034bcade3517fe5b7b2d43e95f3ca9d06eea","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        \"\"\""},{"line_number":288,"context_line":"        if state \u003d\u003d \u0027on\u0027 and soft:"},{"line_number":289,"context_line":"            raise exc.InvalidArgument("},{"line_number":290,"context_line":"                _(\"\u0027--soft\u0027 option is invalid for the power-state \u0027on\u0027\"))"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        path \u003d \"%s/states/power\" % node_id"},{"line_number":293,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_f926e7cc","line":290,"updated":"2017-01-16 11:28:48.000000000","message":"This should probably be s/--soft/soft/. --soft doesn\u0027t make much sense when using the python API (when one would pass soft\u003dTrue)","commit_id":"fc846971d6134ebfe53f6e5e4e0568d659e85702"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"b2c6ea58a0b0a1e20c1fbe994ad5cc0ffd449794","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        \"\"\""},{"line_number":288,"context_line":"        if state \u003d\u003d \u0027on\u0027 and soft:"},{"line_number":289,"context_line":"            raise exc.InvalidArgument("},{"line_number":290,"context_line":"                _(\"\u0027--soft\u0027 option is invalid for the power-state \u0027on\u0027\"))"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        path \u003d \"%s/states/power\" % node_id"},{"line_number":293,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_19570c27","line":290,"in_reply_to":"7a3c09a3_f926e7cc","updated":"2017-01-17 01:45:32.000000000","message":"I\u0027ll fix that.","commit_id":"fc846971d6134ebfe53f6e5e4e0568d659e85702"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"9e9c034bcade3517fe5b7b2d43e95f3ca9d06eea","unresolved":false,"context_lines":[{"line_number":297,"context_line":"            target \u003d _power_states.get(state, state)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        body \u003d {\u0027target\u0027: target}"},{"line_number":300,"context_line":"        if timeout is not None:"},{"line_number":301,"context_line":"            if isinstance(timeout, int) and int(timeout) \u003e 0:"},{"line_number":302,"context_line":"                body \u003d {\u0027target\u0027: target, \u0027timeout\u0027: timeout}"},{"line_number":303,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_842736b5","line":300,"updated":"2017-01-16 11:28:48.000000000","message":"Does timeout make sense if soft is False?","commit_id":"fc846971d6134ebfe53f6e5e4e0568d659e85702"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"b2c6ea58a0b0a1e20c1fbe994ad5cc0ffd449794","unresolved":false,"context_lines":[{"line_number":297,"context_line":"            target \u003d _power_states.get(state, state)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        body \u003d {\u0027target\u0027: target}"},{"line_number":300,"context_line":"        if timeout is not None:"},{"line_number":301,"context_line":"            if isinstance(timeout, int) and int(timeout) \u003e 0:"},{"line_number":302,"context_line":"                body \u003d {\u0027target\u0027: target, \u0027timeout\u0027: timeout}"},{"line_number":303,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_99393cf5","line":300,"in_reply_to":"7a3c09a3_842736b5","updated":"2017-01-17 01:45:32.000000000","message":"Yes, it\u0027s by design.","commit_id":"fc846971d6134ebfe53f6e5e4e0568d659e85702"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"9e9c034bcade3517fe5b7b2d43e95f3ca9d06eea","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        body \u003d {\u0027target\u0027: target}"},{"line_number":300,"context_line":"        if timeout is not None:"},{"line_number":301,"context_line":"            if isinstance(timeout, int) and int(timeout) \u003e 0:"},{"line_number":302,"context_line":"                body \u003d {\u0027target\u0027: target, \u0027timeout\u0027: timeout}"},{"line_number":303,"context_line":"            else:"},{"line_number":304,"context_line":"                raise exc.InvalidArgument("}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_04742666","line":301,"updated":"2017-01-16 11:28:48.000000000","message":"The timeout is a string when passed from the CLI, we\u0027ll need to convert it somewhere before passing it into this method. Also, the int() call here is redundant as we just checked if it\u0027s an int :)\n\nexample:\n    stack@jroll-devstack:~/python-ironicclient$ ironic node-set-power-state --power-timeout 2 foo on\n    usage: ironic node-set-power-state [--soft] [--power-timeout \u003cpower-timeout\u003e]\n                                       \u003cnode\u003e \u003cpower-state\u003e\n    ironic node-set-power-state: error: \u0027--power-timeout\u0027 option must have positive integer value (\u003e 0)","commit_id":"fc846971d6134ebfe53f6e5e4e0568d659e85702"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"b2c6ea58a0b0a1e20c1fbe994ad5cc0ffd449794","unresolved":false,"context_lines":[{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        body \u003d {\u0027target\u0027: target}"},{"line_number":300,"context_line":"        if timeout is not None:"},{"line_number":301,"context_line":"            if isinstance(timeout, int) and int(timeout) \u003e 0:"},{"line_number":302,"context_line":"                body \u003d {\u0027target\u0027: target, \u0027timeout\u0027: timeout}"},{"line_number":303,"context_line":"            else:"},{"line_number":304,"context_line":"                raise exc.InvalidArgument("}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_f92400c6","line":301,"in_reply_to":"7a3c09a3_04742666","updated":"2017-01-17 01:45:32.000000000","message":"Oh, I\u0027ll fix that, thanks!","commit_id":"fc846971d6134ebfe53f6e5e4e0568d659e85702"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"b2c6ea58a0b0a1e20c1fbe994ad5cc0ffd449794","unresolved":false,"context_lines":[{"line_number":302,"context_line":"                body \u003d {\u0027target\u0027: target, \u0027timeout\u0027: timeout}"},{"line_number":303,"context_line":"            else:"},{"line_number":304,"context_line":"                raise exc.InvalidArgument("},{"line_number":305,"context_line":"                    _(\"\u0027--power-timeout\u0027 option must have positive \""},{"line_number":306,"context_line":"                      \"integer value (\u003e 0)\"))"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        return self.update(path, body, http_method\u003d\u0027PUT\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_99105c5b","line":305,"range":{"start_line":305,"start_character":23,"end_line":305,"end_character":38},"updated":"2017-01-17 01:45:32.000000000","message":"I\u0027ll fix that too.","commit_id":"fc846971d6134ebfe53f6e5e4e0568d659e85702"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"aafe5fc42866bd4d39648eed537818d073c1084c","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        :returns: The status of the request"},{"line_number":287,"context_line":"        \"\"\""},{"line_number":288,"context_line":"        if state \u003d\u003d \u0027on\u0027 and soft:"},{"line_number":289,"context_line":"            raise exc.InvalidArgument("},{"line_number":290,"context_line":"                _(\"\u0027soft\u0027 option is invalid for the power-state \u0027on\u0027\"))"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        path \u003d \"%s/states/power\" % node_id"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_02b2214c","line":289,"updated":"2017-01-17 10:11:23.000000000","message":"let\u0027s not invent new exceptions and reuse standard ValueError instead","commit_id":"e7c0576d108def26c6ae91d9787e1e24ecb6ae0d"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"0ab3ccba6039e4dd51a2ecd91f3b7f649d19f01e","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        :returns: The status of the request"},{"line_number":287,"context_line":"        \"\"\""},{"line_number":288,"context_line":"        if state \u003d\u003d \u0027on\u0027 and soft:"},{"line_number":289,"context_line":"            raise exc.InvalidArgument("},{"line_number":290,"context_line":"                _(\"\u0027soft\u0027 option is invalid for the power-state \u0027on\u0027\"))"},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        path \u003d \"%s/states/power\" % node_id"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_ade02b2a","line":289,"in_reply_to":"7a3c09a3_02b2214c","updated":"2017-01-18 05:34:48.000000000","message":"I\u0027ll fix that.","commit_id":"e7c0576d108def26c6ae91d9787e1e24ecb6ae0d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"60641ba0117aff8ce730efccefb21565e216b24f","unresolved":false,"context_lines":[{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        path \u003d \"%s/states/power\" % node_id"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"        if soft:"},{"line_number":295,"context_line":"            target \u003d _power_states.get(\u0027soft \u0027 + state, state)"},{"line_number":296,"context_line":"        else:"},{"line_number":297,"context_line":"            target \u003d _power_states.get(state, state)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        body \u003d {\u0027target\u0027: target}"},{"line_number":300,"context_line":"        if timeout is not None:"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_625125d8","line":297,"range":{"start_line":294,"start_character":0,"end_line":297,"end_character":52},"updated":"2017-01-17 10:15:33.000000000","message":"nit: Just code style, don\u0027t need to change if you don\u0027t want to\n\n\n requested_state \u003d \u0027soft \u0027 + state if soft else state\n target \u003d _power_states.get(requested_states, state)","commit_id":"e7c0576d108def26c6ae91d9787e1e24ecb6ae0d"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"0ab3ccba6039e4dd51a2ecd91f3b7f649d19f01e","unresolved":false,"context_lines":[{"line_number":291,"context_line":""},{"line_number":292,"context_line":"        path \u003d \"%s/states/power\" % node_id"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"        if soft:"},{"line_number":295,"context_line":"            target \u003d _power_states.get(\u0027soft \u0027 + state, state)"},{"line_number":296,"context_line":"        else:"},{"line_number":297,"context_line":"            target \u003d _power_states.get(state, state)"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"        body \u003d {\u0027target\u0027: target}"},{"line_number":300,"context_line":"        if timeout is not None:"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_cdc2d784","line":297,"range":{"start_line":294,"start_character":0,"end_line":297,"end_character":52},"in_reply_to":"7a3c09a3_625125d8","updated":"2017-01-18 05:34:48.000000000","message":"I\u0027ll fix that.","commit_id":"e7c0576d108def26c6ae91d9787e1e24ecb6ae0d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"aafe5fc42866bd4d39648eed537818d073c1084c","unresolved":false,"context_lines":[{"line_number":302,"context_line":"                    \"positive integer value (\u003e 0)\")"},{"line_number":303,"context_line":"            try:"},{"line_number":304,"context_line":"                timeout \u003d int(timeout)"},{"line_number":305,"context_line":"            except ValueError:"},{"line_number":306,"context_line":"                raise exc.InvalidArgument(msg)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"            if int(timeout) \u003e 0:"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_22af1de3","line":305,"updated":"2017-01-17 10:11:23.000000000","message":"this can also raise TypeError in some exotic cases","commit_id":"e7c0576d108def26c6ae91d9787e1e24ecb6ae0d"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"0ab3ccba6039e4dd51a2ecd91f3b7f649d19f01e","unresolved":false,"context_lines":[{"line_number":302,"context_line":"                    \"positive integer value (\u003e 0)\")"},{"line_number":303,"context_line":"            try:"},{"line_number":304,"context_line":"                timeout \u003d int(timeout)"},{"line_number":305,"context_line":"            except ValueError:"},{"line_number":306,"context_line":"                raise exc.InvalidArgument(msg)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"            if int(timeout) \u003e 0:"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_cd49f732","line":305,"in_reply_to":"7a3c09a3_22af1de3","updated":"2017-01-18 05:34:48.000000000","message":"I\u0027ll fix that.","commit_id":"e7c0576d108def26c6ae91d9787e1e24ecb6ae0d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"aafe5fc42866bd4d39648eed537818d073c1084c","unresolved":false,"context_lines":[{"line_number":303,"context_line":"            try:"},{"line_number":304,"context_line":"                timeout \u003d int(timeout)"},{"line_number":305,"context_line":"            except ValueError:"},{"line_number":306,"context_line":"                raise exc.InvalidArgument(msg)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"            if int(timeout) \u003e 0:"},{"line_number":309,"context_line":"                body \u003d {\u0027target\u0027: target, \u0027timeout\u0027: timeout}"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_42b8a92a","line":306,"updated":"2017-01-17 10:11:23.000000000","message":"ditto about reusing standard Python errors (ValueError I guess is more suitable)","commit_id":"e7c0576d108def26c6ae91d9787e1e24ecb6ae0d"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"0ab3ccba6039e4dd51a2ecd91f3b7f649d19f01e","unresolved":false,"context_lines":[{"line_number":303,"context_line":"            try:"},{"line_number":304,"context_line":"                timeout \u003d int(timeout)"},{"line_number":305,"context_line":"            except ValueError:"},{"line_number":306,"context_line":"                raise exc.InvalidArgument(msg)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"            if int(timeout) \u003e 0:"},{"line_number":309,"context_line":"                body \u003d {\u0027target\u0027: target, \u0027timeout\u0027: timeout}"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_4d6427b8","line":306,"in_reply_to":"7a3c09a3_42b8a92a","updated":"2017-01-18 05:34:48.000000000","message":"I\u0027ll fix that.","commit_id":"e7c0576d108def26c6ae91d9787e1e24ecb6ae0d"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"60641ba0117aff8ce730efccefb21565e216b24f","unresolved":false,"context_lines":[{"line_number":305,"context_line":"            except ValueError:"},{"line_number":306,"context_line":"                raise exc.InvalidArgument(msg)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"            if int(timeout) \u003e 0:"},{"line_number":309,"context_line":"                body \u003d {\u0027target\u0027: target, \u0027timeout\u0027: timeout}"},{"line_number":310,"context_line":"            else:"},{"line_number":311,"context_line":"                raise exc.InvalidArgument(msg)"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_62192579","line":308,"range":{"start_line":308,"start_character":15,"end_line":308,"end_character":27},"updated":"2017-01-17 10:15:33.000000000","message":"It\u0027s being already converted to integer at L304.\n\n...\n\n\nCode style:\n\n if timeout \u003c\u003d 0:\n     raise exc.InvalidArgument(msg)\n\n body \u003d { ... }\n return self.update(...)","commit_id":"e7c0576d108def26c6ae91d9787e1e24ecb6ae0d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"aafe5fc42866bd4d39648eed537818d073c1084c","unresolved":false,"context_lines":[{"line_number":305,"context_line":"            except ValueError:"},{"line_number":306,"context_line":"                raise exc.InvalidArgument(msg)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"            if int(timeout) \u003e 0:"},{"line_number":309,"context_line":"                body \u003d {\u0027target\u0027: target, \u0027timeout\u0027: timeout}"},{"line_number":310,"context_line":"            else:"},{"line_number":311,"context_line":"                raise exc.InvalidArgument(msg)"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_62b5a52f","line":308,"updated":"2017-01-17 10:11:23.000000000","message":"int() is redundant now","commit_id":"e7c0576d108def26c6ae91d9787e1e24ecb6ae0d"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"0ab3ccba6039e4dd51a2ecd91f3b7f649d19f01e","unresolved":false,"context_lines":[{"line_number":305,"context_line":"            except ValueError:"},{"line_number":306,"context_line":"                raise exc.InvalidArgument(msg)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"            if int(timeout) \u003e 0:"},{"line_number":309,"context_line":"                body \u003d {\u0027target\u0027: target, \u0027timeout\u0027: timeout}"},{"line_number":310,"context_line":"            else:"},{"line_number":311,"context_line":"                raise exc.InvalidArgument(msg)"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_2d08bbd9","line":308,"range":{"start_line":308,"start_character":15,"end_line":308,"end_character":27},"in_reply_to":"7a3c09a3_62192579","updated":"2017-01-18 05:34:48.000000000","message":"I\u0027ll fix that.","commit_id":"e7c0576d108def26c6ae91d9787e1e24ecb6ae0d"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"0ab3ccba6039e4dd51a2ecd91f3b7f649d19f01e","unresolved":false,"context_lines":[{"line_number":305,"context_line":"            except ValueError:"},{"line_number":306,"context_line":"                raise exc.InvalidArgument(msg)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"            if int(timeout) \u003e 0:"},{"line_number":309,"context_line":"                body \u003d {\u0027target\u0027: target, \u0027timeout\u0027: timeout}"},{"line_number":310,"context_line":"            else:"},{"line_number":311,"context_line":"                raise exc.InvalidArgument(msg)"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_ed6b1383","line":308,"in_reply_to":"7a3c09a3_62b5a52f","updated":"2017-01-18 05:34:48.000000000","message":"I\u0027ll fix that.","commit_id":"e7c0576d108def26c6ae91d9787e1e24ecb6ae0d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"aafe5fc42866bd4d39648eed537818d073c1084c","unresolved":false,"context_lines":[{"line_number":308,"context_line":"            if int(timeout) \u003e 0:"},{"line_number":309,"context_line":"                body \u003d {\u0027target\u0027: target, \u0027timeout\u0027: timeout}"},{"line_number":310,"context_line":"            else:"},{"line_number":311,"context_line":"                raise exc.InvalidArgument(msg)"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"        return self.update(path, body, http_method\u003d\u0027PUT\u0027)"},{"line_number":314,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_8284515e","line":311,"updated":"2017-01-17 10:11:23.000000000","message":"ditto about ValueError","commit_id":"e7c0576d108def26c6ae91d9787e1e24ecb6ae0d"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"0ab3ccba6039e4dd51a2ecd91f3b7f649d19f01e","unresolved":false,"context_lines":[{"line_number":308,"context_line":"            if int(timeout) \u003e 0:"},{"line_number":309,"context_line":"                body \u003d {\u0027target\u0027: target, \u0027timeout\u0027: timeout}"},{"line_number":310,"context_line":"            else:"},{"line_number":311,"context_line":"                raise exc.InvalidArgument(msg)"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"        return self.update(path, body, http_method\u003d\u0027PUT\u0027)"},{"line_number":314,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_cd1e570b","line":311,"in_reply_to":"7a3c09a3_8284515e","updated":"2017-01-18 05:34:48.000000000","message":"I\u0027ll fix that.","commit_id":"e7c0576d108def26c6ae91d9787e1e24ecb6ae0d"}],"ironicclient/v1/node_shell.py":[{"author":{"_account_id":23883,"name":"Joanna Taryma","email":"joanna.taryma@intel.com","username":"jtaryma"},"change_message_id":"11750e9f74d6c7b60f92871886836a46358a311f","unresolved":false,"context_lines":[{"line_number":419,"context_line":"    \u0027--power-timeout\u0027,"},{"line_number":420,"context_line":"    metavar\u003d\u0027\u003cpower-timeout\u003e\u0027,"},{"line_number":421,"context_line":"    default\u003dNone,"},{"line_number":422,"context_line":"    help\u003d\"Timeout positive integer value(\u003e 0) for any \u0027power-state\u0027.\")"},{"line_number":423,"context_line":"def do_node_set_power_state(cc, args):"},{"line_number":424,"context_line":"    \"\"\"Power a node on or off or reboot.\"\"\""},{"line_number":425,"context_line":"    cc.node.set_power_state(args.node, args.power_state, args.soft,"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba5da102_94c42793","line":422,"updated":"2016-10-27 03:13:24.000000000","message":"I\u0027d prefer a 0 as a default, while 0 should mean no timeout. \nNo information about unit (seconds/milliseconds?) is provided","commit_id":"4f9b20f66085a148f8628626c3857d9f8c04c12b"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"b547c7a59d39f97417a2870859b08d435e21f6e9","unresolved":false,"context_lines":[{"line_number":419,"context_line":"    \u0027--power-timeout\u0027,"},{"line_number":420,"context_line":"    metavar\u003d\u0027\u003cpower-timeout\u003e\u0027,"},{"line_number":421,"context_line":"    default\u003dNone,"},{"line_number":422,"context_line":"    help\u003d\"Timeout positive integer value(\u003e 0) for any \u0027power-state\u0027.\")"},{"line_number":423,"context_line":"def do_node_set_power_state(cc, args):"},{"line_number":424,"context_line":"    \"\"\"Power a node on or off or reboot.\"\"\""},{"line_number":425,"context_line":"    cc.node.set_power_state(args.node, args.power_state, args.soft,"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba5da102_c5f18bcf","line":422,"in_reply_to":"ba5da102_94c42793","updated":"2016-10-27 08:02:38.000000000","message":"I\u0027ll add the unit.\n\nIn terms of \"no timeout\" and the default value \"None\", please see my reply at [1]\n\n [1] https://review.openstack.org/#/c/357627/5/ironicclient/osc/v1/baremetal_node.py@724","commit_id":"4f9b20f66085a148f8628626c3857d9f8c04c12b"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d0435ede28d683ca9cd4d066f2d9ff6a121ac92e","unresolved":false,"context_lines":[{"line_number":409,"context_line":"    metavar\u003d\u0027\u003cpower-state\u003e\u0027,"},{"line_number":410,"context_line":"    choices\u003d[\u0027on\u0027, \u0027off\u0027, \u0027reboot\u0027],"},{"line_number":411,"context_line":"    help\u003d\"\u0027on\u0027, \u0027off\u0027, or \u0027reboot\u0027.\")"},{"line_number":412,"context_line":"@cliutils.arg("},{"line_number":413,"context_line":"    \u0027--soft\u0027,"},{"line_number":414,"context_line":"    dest\u003d\u0027soft\u0027,"},{"line_number":415,"context_line":"    action\u003d\u0027store_true\u0027,"},{"line_number":416,"context_line":"    default\u003dFalse,"},{"line_number":417,"context_line":"    help\u003d\"power graceful off/reboot.\")"},{"line_number":418,"context_line":"@cliutils.arg("},{"line_number":419,"context_line":"    \u0027--power-timeout\u0027,"},{"line_number":420,"context_line":"    metavar\u003d\u0027\u003cpower-timeout\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_fcdfd909","line":417,"range":{"start_line":412,"start_character":0,"end_line":417,"end_character":38},"updated":"2017-01-10 14:13:33.000000000","message":"ditto re having a flag for it, why not just have \"soft_reboot\" and \"soft_off\" as proper power state values ?\n\nI see the spec talks about a --soft flag [0] but it looks bad form for me.\n\n[0] http://specs.openstack.org/openstack/ironic-specs/specs/approved/enhance-power-interface-for-soft-reboot-and-nmi.html#client-cli-impact","commit_id":"40f9ff3364d3b12bd97865953db95e0bb66f2661"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"34d7dc45a57029876053c1e297b1157631403f59","unresolved":false,"context_lines":[{"line_number":409,"context_line":"    metavar\u003d\u0027\u003cpower-state\u003e\u0027,"},{"line_number":410,"context_line":"    choices\u003d[\u0027on\u0027, \u0027off\u0027, \u0027reboot\u0027],"},{"line_number":411,"context_line":"    help\u003d\"\u0027on\u0027, \u0027off\u0027, or \u0027reboot\u0027.\")"},{"line_number":412,"context_line":"@cliutils.arg("},{"line_number":413,"context_line":"    \u0027--soft\u0027,"},{"line_number":414,"context_line":"    dest\u003d\u0027soft\u0027,"},{"line_number":415,"context_line":"    action\u003d\u0027store_true\u0027,"},{"line_number":416,"context_line":"    default\u003dFalse,"},{"line_number":417,"context_line":"    help\u003d\"power graceful off/reboot.\")"},{"line_number":418,"context_line":"@cliutils.arg("},{"line_number":419,"context_line":"    \u0027--power-timeout\u0027,"},{"line_number":420,"context_line":"    metavar\u003d\u0027\u003cpower-timeout\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_5ec4395e","line":417,"range":{"start_line":412,"start_character":0,"end_line":417,"end_character":38},"in_reply_to":"ba5201f7_97778601","updated":"2017-01-11 07:06:27.000000000","message":"Okay, I understood, but I couldn\u0027t find the conversation since it seems IRC log server was down during UTC 09:39 - 14:29.","commit_id":"40f9ff3364d3b12bd97865953db95e0bb66f2661"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"51b3342a5c9875a39dc8f02fa086b54c90d1c49f","unresolved":false,"context_lines":[{"line_number":409,"context_line":"    metavar\u003d\u0027\u003cpower-state\u003e\u0027,"},{"line_number":410,"context_line":"    choices\u003d[\u0027on\u0027, \u0027off\u0027, \u0027reboot\u0027],"},{"line_number":411,"context_line":"    help\u003d\"\u0027on\u0027, \u0027off\u0027, or \u0027reboot\u0027.\")"},{"line_number":412,"context_line":"@cliutils.arg("},{"line_number":413,"context_line":"    \u0027--soft\u0027,"},{"line_number":414,"context_line":"    dest\u003d\u0027soft\u0027,"},{"line_number":415,"context_line":"    action\u003d\u0027store_true\u0027,"},{"line_number":416,"context_line":"    default\u003dFalse,"},{"line_number":417,"context_line":"    help\u003d\"power graceful off/reboot.\")"},{"line_number":418,"context_line":"@cliutils.arg("},{"line_number":419,"context_line":"    \u0027--power-timeout\u0027,"},{"line_number":420,"context_line":"    metavar\u003d\u0027\u003cpower-timeout\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba5201f7_97778601","line":417,"range":{"start_line":412,"start_character":0,"end_line":417,"end_character":38},"in_reply_to":"ba5201f7_fcdfd909","updated":"2017-01-10 14:28:17.000000000","message":"[Update] talked to jroll and dtantsur on IRC and we agree to keep the --soft flag.\n\nLogs at http://eavesdrop.openstack.org/irclogs/%23openstack-ironic/%23openstack-ironic.2017-01-10.log.html","commit_id":"40f9ff3364d3b12bd97865953db95e0bb66f2661"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"c37806d3e849d340cbb4f6f66f8e02f7410a2c32","unresolved":false,"context_lines":[{"line_number":423,"context_line":"          \"any \u0027power-state\u0027.\"))"},{"line_number":424,"context_line":"def do_node_set_power_state(cc, args):"},{"line_number":425,"context_line":"    \"\"\"Power a node on or off or reboot.\"\"\""},{"line_number":426,"context_line":"    cc.node.set_power_state(args.node, args.power_state, args.soft,"},{"line_number":427,"context_line":"                            timeout\u003dargs.power_timeout)"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"@cliutils.arg(\u0027node\u0027, metavar\u003d\u0027\u003cnode\u003e\u0027, help\u003d\"Name or UUID of the node.\")"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a3c09a3_909fc65e","line":427,"range":{"start_line":426,"start_character":3,"end_line":427,"end_character":55},"updated":"2017-01-13 09:03:00.000000000","message":"should it be like this?\n\n try:\n        cc.node.set_power_state(args.node, args.power_state, args.soft,\n                                timeout\u003dargs.power_timeout)\n except exc.InvalidAttribute as e:\n        raise exc.CommandError(e)","commit_id":"54843ce1ab1691ce5dffea4f391a60830cce7233"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"2ed71b4679157b71374a292fa17d56ada9e5dc39","unresolved":false,"context_lines":[{"line_number":423,"context_line":"          \"any \u0027power-state\u0027.\"))"},{"line_number":424,"context_line":"def do_node_set_power_state(cc, args):"},{"line_number":425,"context_line":"    \"\"\"Power a node on or off or reboot.\"\"\""},{"line_number":426,"context_line":"    cc.node.set_power_state(args.node, args.power_state, args.soft,"},{"line_number":427,"context_line":"                            timeout\u003dargs.power_timeout)"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"@cliutils.arg(\u0027node\u0027, metavar\u003d\u0027\u003cnode\u003e\u0027, help\u003d\"Name or UUID of the node.\")"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a3c09a3_d8096933","line":427,"range":{"start_line":426,"start_character":3,"end_line":427,"end_character":55},"in_reply_to":"7a3c09a3_909fc65e","updated":"2017-01-13 13:43:50.000000000","message":"+1","commit_id":"54843ce1ab1691ce5dffea4f391a60830cce7233"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"1c54dabdf9a559fb93bf55f293df869e8b6a38d2","unresolved":false,"context_lines":[{"line_number":423,"context_line":"          \"any \u0027power-state\u0027.\"))"},{"line_number":424,"context_line":"def do_node_set_power_state(cc, args):"},{"line_number":425,"context_line":"    \"\"\"Power a node on or off or reboot.\"\"\""},{"line_number":426,"context_line":"    cc.node.set_power_state(args.node, args.power_state, args.soft,"},{"line_number":427,"context_line":"                            timeout\u003dargs.power_timeout)"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"@cliutils.arg(\u0027node\u0027, metavar\u003d\u0027\u003cnode\u003e\u0027, help\u003d\"Name or UUID of the node.\")"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a3c09a3_0827ed12","line":427,"range":{"start_line":426,"start_character":3,"end_line":427,"end_character":55},"in_reply_to":"7a3c09a3_d8096933","updated":"2017-01-16 02:05:18.000000000","message":"I\u0027ll fix that.","commit_id":"54843ce1ab1691ce5dffea4f391a60830cce7233"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"9e9c034bcade3517fe5b7b2d43e95f3ca9d06eea","unresolved":false,"context_lines":[{"line_number":414,"context_line":"    dest\u003d\u0027soft\u0027,"},{"line_number":415,"context_line":"    action\u003d\u0027store_true\u0027,"},{"line_number":416,"context_line":"    default\u003dFalse,"},{"line_number":417,"context_line":"    help\u003d\"power graceful off/reboot.\")"},{"line_number":418,"context_line":"@cliutils.arg("},{"line_number":419,"context_line":"    \u0027--power-timeout\u0027,"},{"line_number":420,"context_line":"    metavar\u003d\u0027\u003cpower-timeout\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_0415063f","line":417,"updated":"2017-01-16 11:28:48.000000000","message":"Maybe \"Gracefully change the power state. Only valid for \u0027off\u0027 and \u0027reboot\u0027 power states.","commit_id":"fc846971d6134ebfe53f6e5e4e0568d659e85702"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"b2c6ea58a0b0a1e20c1fbe994ad5cc0ffd449794","unresolved":false,"context_lines":[{"line_number":414,"context_line":"    dest\u003d\u0027soft\u0027,"},{"line_number":415,"context_line":"    action\u003d\u0027store_true\u0027,"},{"line_number":416,"context_line":"    default\u003dFalse,"},{"line_number":417,"context_line":"    help\u003d\"power graceful off/reboot.\")"},{"line_number":418,"context_line":"@cliutils.arg("},{"line_number":419,"context_line":"    \u0027--power-timeout\u0027,"},{"line_number":420,"context_line":"    metavar\u003d\u0027\u003cpower-timeout\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_b9ea78aa","line":417,"in_reply_to":"7a3c09a3_0415063f","updated":"2017-01-17 01:45:32.000000000","message":"I\u0027ll fix that.","commit_id":"fc846971d6134ebfe53f6e5e4e0568d659e85702"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"9e9c034bcade3517fe5b7b2d43e95f3ca9d06eea","unresolved":false,"context_lines":[{"line_number":420,"context_line":"    metavar\u003d\u0027\u003cpower-timeout\u003e\u0027,"},{"line_number":421,"context_line":"    default\u003dNone,"},{"line_number":422,"context_line":"    help\u003d(\"Timeout (in seconds) positive integer value (\u003e 0) for \""},{"line_number":423,"context_line":"          \"any \u0027power-state\u0027.\"))"},{"line_number":424,"context_line":"def do_node_set_power_state(cc, args):"},{"line_number":425,"context_line":"    \"\"\"Power a node on or off or reboot.\"\"\""},{"line_number":426,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_441f0e5f","line":423,"updated":"2017-01-16 11:28:48.000000000","message":"Does timeout make sense if --soft is false?","commit_id":"fc846971d6134ebfe53f6e5e4e0568d659e85702"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"b2c6ea58a0b0a1e20c1fbe994ad5cc0ffd449794","unresolved":false,"context_lines":[{"line_number":420,"context_line":"    metavar\u003d\u0027\u003cpower-timeout\u003e\u0027,"},{"line_number":421,"context_line":"    default\u003dNone,"},{"line_number":422,"context_line":"    help\u003d(\"Timeout (in seconds) positive integer value (\u003e 0) for \""},{"line_number":423,"context_line":"          \"any \u0027power-state\u0027.\"))"},{"line_number":424,"context_line":"def do_node_set_power_state(cc, args):"},{"line_number":425,"context_line":"    \"\"\"Power a node on or off or reboot.\"\"\""},{"line_number":426,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_798010c1","line":423,"in_reply_to":"7a3c09a3_441f0e5f","updated":"2017-01-17 01:45:32.000000000","message":"Timeout is valid for all operations by design.\n\nhttps://review.openstack.org/#/c/186700/31/specs/approved/enhance-power-interface-for-soft-reboot-and-nmi.rst@136","commit_id":"fc846971d6134ebfe53f6e5e4e0568d659e85702"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"aafe5fc42866bd4d39648eed537818d073c1084c","unresolved":false,"context_lines":[{"line_number":420,"context_line":"    \u0027--power-timeout\u0027,"},{"line_number":421,"context_line":"    metavar\u003d\u0027\u003cpower-timeout\u003e\u0027,"},{"line_number":422,"context_line":"    default\u003dNone,"},{"line_number":423,"context_line":"    help\u003d(\"Timeout (in seconds) positive integer value (\u003e 0) for \""},{"line_number":424,"context_line":"          \"any \u0027power-state\u0027.\"))"},{"line_number":425,"context_line":"def do_node_set_power_state(cc, args):"},{"line_number":426,"context_line":"    \"\"\"Power a node on or off or reboot.\"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_a2894d77","line":423,"updated":"2017-01-17 10:11:23.000000000","message":"\"seconds\" kind of imply \"positive integer\" already, and \"positive\" implies \"\u003e 0\". instead, I\u0027d leave an explanation what this timeout is for. E.g. \"Timeout (in seconds, positive integer) to wait for the target power state before erroring out.\" or something like that","commit_id":"e7c0576d108def26c6ae91d9787e1e24ecb6ae0d"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"e11028f731846eccbbce040480aa0e2cb7071a59","unresolved":false,"context_lines":[{"line_number":420,"context_line":"    \u0027--power-timeout\u0027,"},{"line_number":421,"context_line":"    metavar\u003d\u0027\u003cpower-timeout\u003e\u0027,"},{"line_number":422,"context_line":"    default\u003dNone,"},{"line_number":423,"context_line":"    help\u003d(\"Timeout (in seconds) positive integer value (\u003e 0) for \""},{"line_number":424,"context_line":"          \"any \u0027power-state\u0027.\"))"},{"line_number":425,"context_line":"def do_node_set_power_state(cc, args):"},{"line_number":426,"context_line":"    \"\"\"Power a node on or off or reboot.\"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_b925f109","line":423,"in_reply_to":"7a3c09a3_a2894d77","updated":"2017-01-17 16:44:30.000000000","message":"Also, I think you could just add type\u003dint and it will get converted by argparse itself. Might be even worth adding some checkers in future to other places. https://github.com/python/cpython/blob/4cf77ee1a3665c6915f10866f7e8b58f042f7bf8/Lib/argparse.py#L769-L772","commit_id":"e7c0576d108def26c6ae91d9787e1e24ecb6ae0d"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"0ab3ccba6039e4dd51a2ecd91f3b7f649d19f01e","unresolved":false,"context_lines":[{"line_number":420,"context_line":"    \u0027--power-timeout\u0027,"},{"line_number":421,"context_line":"    metavar\u003d\u0027\u003cpower-timeout\u003e\u0027,"},{"line_number":422,"context_line":"    default\u003dNone,"},{"line_number":423,"context_line":"    help\u003d(\"Timeout (in seconds) positive integer value (\u003e 0) for \""},{"line_number":424,"context_line":"          \"any \u0027power-state\u0027.\"))"},{"line_number":425,"context_line":"def do_node_set_power_state(cc, args):"},{"line_number":426,"context_line":"    \"\"\"Power a node on or off or reboot.\"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_2d66fb29","line":423,"in_reply_to":"7a3c09a3_a2894d77","updated":"2017-01-18 05:34:48.000000000","message":"I\u0027ll fix that.","commit_id":"e7c0576d108def26c6ae91d9787e1e24ecb6ae0d"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"0ab3ccba6039e4dd51a2ecd91f3b7f649d19f01e","unresolved":false,"context_lines":[{"line_number":420,"context_line":"    \u0027--power-timeout\u0027,"},{"line_number":421,"context_line":"    metavar\u003d\u0027\u003cpower-timeout\u003e\u0027,"},{"line_number":422,"context_line":"    default\u003dNone,"},{"line_number":423,"context_line":"    help\u003d(\"Timeout (in seconds) positive integer value (\u003e 0) for \""},{"line_number":424,"context_line":"          \"any \u0027power-state\u0027.\"))"},{"line_number":425,"context_line":"def do_node_set_power_state(cc, args):"},{"line_number":426,"context_line":"    \"\"\"Power a node on or off or reboot.\"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_cd7ad723","line":423,"in_reply_to":"7a3c09a3_b925f109","updated":"2017-01-18 05:34:48.000000000","message":"I\u0027ll add \u0027type\u003dint\u0027.","commit_id":"e7c0576d108def26c6ae91d9787e1e24ecb6ae0d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"aafe5fc42866bd4d39648eed537818d073c1084c","unresolved":false,"context_lines":[{"line_number":428,"context_line":"        cc.node.set_power_state(args.node, args.power_state, args.soft,"},{"line_number":429,"context_line":"                                timeout\u003dargs.power_timeout)"},{"line_number":430,"context_line":"    except exc.InvalidArgument as e:"},{"line_number":431,"context_line":"        raise exc.CommandError(e)"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"@cliutils.arg(\u0027node\u0027, metavar\u003d\u0027\u003cnode\u003e\u0027, help\u003d\"Name or UUID of the node.\")"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_c27ad976","line":431,"updated":"2017-01-17 10:11:23.000000000","message":"I think you need to use str(e) in this case","commit_id":"e7c0576d108def26c6ae91d9787e1e24ecb6ae0d"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"0ab3ccba6039e4dd51a2ecd91f3b7f649d19f01e","unresolved":false,"context_lines":[{"line_number":428,"context_line":"        cc.node.set_power_state(args.node, args.power_state, args.soft,"},{"line_number":429,"context_line":"                                timeout\u003dargs.power_timeout)"},{"line_number":430,"context_line":"    except exc.InvalidArgument as e:"},{"line_number":431,"context_line":"        raise exc.CommandError(e)"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"@cliutils.arg(\u0027node\u0027, metavar\u003d\u0027\u003cnode\u003e\u0027, help\u003d\"Name or UUID of the node.\")"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_2dbd1bd8","line":431,"in_reply_to":"7a3c09a3_c27ad976","updated":"2017-01-18 05:34:48.000000000","message":"I\u0027ll fix that.","commit_id":"e7c0576d108def26c6ae91d9787e1e24ecb6ae0d"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"f5e3f1c9877292db3accaf491f63a160e827b915","unresolved":false,"context_lines":[{"line_number":429,"context_line":"        cc.node.set_power_state(args.node, args.power_state, args.soft,"},{"line_number":430,"context_line":"                                timeout\u003dargs.power_timeout)"},{"line_number":431,"context_line":"    except ValueError as e:"},{"line_number":432,"context_line":"        raise exc.CommandError(str(e))"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"@cliutils.arg(\u0027node\u0027, metavar\u003d\u0027\u003cnode\u003e\u0027, help\u003d\"Name or UUID of the node.\")"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a3c09a3_f7e2ebd3","line":432,"updated":"2017-01-18 13:23:48.000000000","message":"I agree, sorry for causing confusing in the previous patch.","commit_id":"d088fa2df2c51c4d51f597e8464c11eb8992c529"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"63258f2e5702eb32503100b9c06b70c86aa099a8","unresolved":false,"context_lines":[{"line_number":429,"context_line":"        cc.node.set_power_state(args.node, args.power_state, args.soft,"},{"line_number":430,"context_line":"                                timeout\u003dargs.power_timeout)"},{"line_number":431,"context_line":"    except ValueError as e:"},{"line_number":432,"context_line":"        raise exc.CommandError(str(e))"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"@cliutils.arg(\u0027node\u0027, metavar\u003d\u0027\u003cnode\u003e\u0027, help\u003d\"Name or UUID of the node.\")"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a3c09a3_cf5479cb","line":432,"range":{"start_line":432,"start_character":31,"end_line":432,"end_character":34},"updated":"2017-01-18 12:28:07.000000000","message":"Ugh, this can be a translated string, six.text_type should be used here I suppose :(","commit_id":"d088fa2df2c51c4d51f597e8464c11eb8992c529"}]}
