)]}'
{"ironic/api/controllers/v1/node.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"d17985c6bc7f476f7c6c840dcc9caf644f113704","unresolved":false,"context_lines":[{"line_number":240,"context_line":"    reservation \u003d wtypes.text"},{"line_number":241,"context_line":"    \"The hostname of the conductor that holds an exclusive lock on the node.\""},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    maintenance \u003d wsme.wsattr(bool)"},{"line_number":244,"context_line":"    \"Indicates whether the node is in maintenance mode.\""},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    target_provision_state \u003d wtypes.text"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAU3%2F%2FneE%3D","line":243,"updated":"2014-02-25 16:45:40.000000000","message":"maintenance \u003d bool","commit_id":"9c70a193b6d655cc546ed0f07b16b6d5b4e38560"},{"author":{"_account_id":8125,"name":"Michael Davies","email":"michael@the-davies.net","username":"mrda"},"change_message_id":"e8acd91d9022a6019abe1efe78cd54ba065812bf","unresolved":false,"context_lines":[{"line_number":240,"context_line":"    reservation \u003d wtypes.text"},{"line_number":241,"context_line":"    \"The hostname of the conductor that holds an exclusive lock on the node.\""},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    maintenance \u003d wsme.wsattr(bool)"},{"line_number":244,"context_line":"    \"Indicates whether the node is in maintenance mode.\""},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    target_provision_state \u003d wtypes.text"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVX%2F%2F%2FgA%3D","line":243,"in_reply_to":"AAAAU3%2F%2Fdi4%3D","updated":"2014-02-26 23:38:03.000000000","message":"Done","commit_id":"9c70a193b6d655cc546ed0f07b16b6d5b4e38560"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d660e4319779755397ca0d724d9bb198f8d92679","unresolved":false,"context_lines":[{"line_number":240,"context_line":"    reservation \u003d wtypes.text"},{"line_number":241,"context_line":"    \"The hostname of the conductor that holds an exclusive lock on the node.\""},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    maintenance \u003d wsme.wsattr(bool)"},{"line_number":244,"context_line":"    \"Indicates whether the node is in maintenance mode.\""},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    target_provision_state \u003d wtypes.text"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAU3%2F%2Fdi4%3D","line":243,"in_reply_to":"AAAAU3%2F%2Fgi0%3D","updated":"2014-02-26 14:11:20.000000000","message":"I would prefer if you use our custom wsme boolean type here[1]:\n\nmaintenance \u003d types.boolean \n\nThe reason is because the python native bool() type is tricky, e.g:\n\nIn [1]: bool(False)\n\nOut[1]: False\n\nIn [2]: bool(True)\n\nOut[2]: True\n\nIn [3]: bool(\"true\")\n\nOut[3]: True\n\nIn [4]: bool(\"false\")\n\nOut[4]: True\n\nIn [5]: bool(\"whatever\")\n\nOut[5]: True\n\n-----------------------------------------\n\nWhile ours use the strutils.bool_from_string() method to convert the values to their respective boolean type, e.g\n\nIn [11]: types.boolean.frombasetype(True)\n\nOut[11]: True\n\nIn [12]: types.boolean.frombasetype(False)\n\nOut[12]: False\n\nIn [8]: types.boolean.frombasetype(\"true\")\n\nOut[8]: True\n\nIn [9]: types.boolean.frombasetype(\"false\")\n\nOut[9]: False\n\nIn [10]: types.boolean.frombasetype(\"whatever\")\n\nraises Invalid: Unrecognized value \u0027whatever\u0027, acceptable values are: \u00270\u0027, \u00271\u0027, \u0027f\u0027, \u0027false\u0027, \u0027n\u0027, \u0027no\u0027, \u0027off\u0027, \u0027on\u0027, \u0027t\u0027, \u0027true\u0027, \u0027y\u0027, \u0027yes\u0027\n\n[1] https://github.com/openstack/ironic/blob/master/ironic/api/controllers/v1/types.py#L66","commit_id":"9c70a193b6d655cc546ed0f07b16b6d5b4e38560"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"399704536bebd6d705b683e3ebd9ba9821ca5a8c","unresolved":false,"context_lines":[{"line_number":240,"context_line":"    reservation \u003d wtypes.text"},{"line_number":241,"context_line":"    \"The hostname of the conductor that holds an exclusive lock on the node.\""},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    maintenance \u003d wsme.wsattr(bool)"},{"line_number":244,"context_line":"    \"Indicates whether the node is in maintenance mode.\""},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    target_provision_state \u003d wtypes.text"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAU3%2F%2Fgi0%3D","line":243,"in_reply_to":"AAAAU3%2F%2FiGw%3D","updated":"2014-02-26 08:18:18.000000000","message":"Yes, this is only small syntax nit.","commit_id":"9c70a193b6d655cc546ed0f07b16b6d5b4e38560"},{"author":{"_account_id":10486,"name":"Song Li","email":"lisongbj@cn.ibm.com","username":"sbookworm"},"change_message_id":"163b632671f4d3718f93958c5aab637286d615be","unresolved":false,"context_lines":[{"line_number":240,"context_line":"    reservation \u003d wtypes.text"},{"line_number":241,"context_line":"    \"The hostname of the conductor that holds an exclusive lock on the node.\""},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    maintenance \u003d wsme.wsattr(bool)"},{"line_number":244,"context_line":"    \"Indicates whether the node is in maintenance mode.\""},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    target_provision_state \u003d wtypes.text"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAU3%2F%2FiGw%3D","line":243,"in_reply_to":"AAAAU3%2F%2FjL8%3D","updated":"2014-02-26 03:27:29.000000000","message":"I saw the doc of wsme, and it wrote that \"the non-wsattr attributes will be replaced to wasttr\". I think \"maintenance \u003d bool\" might equal to \"maintenance \u003d wsme.wsattr(bool)\", right?","commit_id":"9c70a193b6d655cc546ed0f07b16b6d5b4e38560"},{"author":{"_account_id":8125,"name":"Michael Davies","email":"michael@the-davies.net","username":"mrda"},"change_message_id":"2b5a858ecd71ec4f5c454bf4aa2bb2f0a380c110","unresolved":false,"context_lines":[{"line_number":240,"context_line":"    reservation \u003d wtypes.text"},{"line_number":241,"context_line":"    \"The hostname of the conductor that holds an exclusive lock on the node.\""},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    maintenance \u003d wsme.wsattr(bool)"},{"line_number":244,"context_line":"    \"Indicates whether the node is in maintenance mode.\""},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    target_provision_state \u003d wtypes.text"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAU3%2F%2FjL8%3D","line":243,"in_reply_to":"AAAAU3%2F%2Fk2Y%3D","updated":"2014-02-26 00:45:20.000000000","message":"Yuriy, we want this field to be settable, but have it be not be mandatory, nor have a defualt value.  And we don\u0027t want to returned automatically, hence why it is left as having a wsme.wsattr(bool).","commit_id":"9c70a193b6d655cc546ed0f07b16b6d5b4e38560"},{"author":{"_account_id":8125,"name":"Michael Davies","email":"michael@the-davies.net","username":"mrda"},"change_message_id":"ce8de614d76aa2d2175627ddb653f35f76c524da","unresolved":false,"context_lines":[{"line_number":240,"context_line":"    reservation \u003d wtypes.text"},{"line_number":241,"context_line":"    \"The hostname of the conductor that holds an exclusive lock on the node.\""},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    maintenance \u003d wsme.wsattr(bool)"},{"line_number":244,"context_line":"    \"Indicates whether the node is in maintenance mode.\""},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"    target_provision_state \u003d wtypes.text"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAU3%2F%2Fk2Y%3D","line":243,"in_reply_to":"AAAAU3%2F%2FneE%3D","updated":"2014-02-25 20:54:15.000000000","message":"can you please explain?","commit_id":"9c70a193b6d655cc546ed0f07b16b6d5b4e38560"}],"ironic/tests/api/test_nodes.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d660e4319779755397ca0d724d9bb198f8d92679","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        self.assertNotIn(\u0027properties\u0027, data[\u0027nodes\u0027][0])"},{"line_number":85,"context_line":"        self.assertNotIn(\u0027chassis_uuid\u0027, data[\u0027nodes\u0027][0])"},{"line_number":86,"context_line":"        self.assertNotIn(\u0027reservation\u0027, data[\u0027nodes\u0027][0])"},{"line_number":87,"context_line":"        # never expose the chassis_id or maintenance"},{"line_number":88,"context_line":"        self.assertNotIn(\u0027chassis_id\u0027, data[\u0027nodes\u0027][0])"},{"line_number":89,"context_line":"        self.assertNotIn(\u0027maintenance\u0027, data[\u0027nodes\u0027][0])"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAU3%2F%2Fdek%3D","line":87,"updated":"2014-02-26 14:11:20.000000000","message":"I wouldn\u0027t add \"or maintenance\" to this comment, the reason is because the chassis_id is a \"special\" attribute and so different from the others. The chassis_id attribute on nodes is created on the fly by our API[1].\n\nIt\u0027s like this because in our API we always expose UUIDs, and numeric IDs are only used internally for performance reasons, so when the client input the chassis_uuid attribute we translate it to chassis_id for the internal use. \n\n[1] https://github.com/openstack/ironic/blob/master/ironic/api/controllers/v1/node.py#L211","commit_id":"9c70a193b6d655cc546ed0f07b16b6d5b4e38560"},{"author":{"_account_id":8125,"name":"Michael Davies","email":"michael@the-davies.net","username":"mrda"},"change_message_id":"e8acd91d9022a6019abe1efe78cd54ba065812bf","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        self.assertNotIn(\u0027properties\u0027, data[\u0027nodes\u0027][0])"},{"line_number":85,"context_line":"        self.assertNotIn(\u0027chassis_uuid\u0027, data[\u0027nodes\u0027][0])"},{"line_number":86,"context_line":"        self.assertNotIn(\u0027reservation\u0027, data[\u0027nodes\u0027][0])"},{"line_number":87,"context_line":"        # never expose the chassis_id or maintenance"},{"line_number":88,"context_line":"        self.assertNotIn(\u0027chassis_id\u0027, data[\u0027nodes\u0027][0])"},{"line_number":89,"context_line":"        self.assertNotIn(\u0027maintenance\u0027, data[\u0027nodes\u0027][0])"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVX%2F%2F%2FhU%3D","line":87,"in_reply_to":"AAAAU3%2F%2Fdek%3D","updated":"2014-02-26 23:38:03.000000000","message":"Done","commit_id":"9c70a193b6d655cc546ed0f07b16b6d5b4e38560"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"2d578a5f32d45904c37ad5820269adf660481be8","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        self.assertNotIn(\u0027reservation\u0027, data[\u0027nodes\u0027][0])"},{"line_number":88,"context_line":"        # never expose the chassis_id"},{"line_number":89,"context_line":"        self.assertNotIn(\u0027chassis_id\u0027, data[\u0027nodes\u0027][0])"},{"line_number":90,"context_line":"        self.assertNotIn(\u0027maintenance\u0027, data[\u0027nodes\u0027][0])"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def test_detail(self):"},{"line_number":93,"context_line":"        ndict \u003d dbutils.get_test_node()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVX%2F%2F%2Bdk%3D","line":90,"updated":"2014-02-27 02:29:56.000000000","message":"Not a big deal, but I probably would have put this before chassis_id.","commit_id":"8f0ffd99f682ed8ebe75aa6f1e3c2546fb8bb46d"},{"author":{"_account_id":8125,"name":"Michael Davies","email":"michael@the-davies.net","username":"mrda"},"change_message_id":"e86d2f74529f701238e5b12345b49db8d753842a","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        self.assertNotIn(\u0027reservation\u0027, data[\u0027nodes\u0027][0])"},{"line_number":88,"context_line":"        # never expose the chassis_id"},{"line_number":89,"context_line":"        self.assertNotIn(\u0027chassis_id\u0027, data[\u0027nodes\u0027][0])"},{"line_number":90,"context_line":"        self.assertNotIn(\u0027maintenance\u0027, data[\u0027nodes\u0027][0])"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def test_detail(self):"},{"line_number":93,"context_line":"        ndict \u003d dbutils.get_test_node()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVX%2F%2F9pE%3D","line":90,"in_reply_to":"AAAAVX%2F%2F%2Bdk%3D","updated":"2014-02-27 05:21:35.000000000","message":"Done","commit_id":"8f0ffd99f682ed8ebe75aa6f1e3c2546fb8bb46d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"2d578a5f32d45904c37ad5820269adf660481be8","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        self.assertNotIn(\u0027chassis_id\u0027, data[\u0027nodes\u0027][0])"},{"line_number":90,"context_line":"        self.assertNotIn(\u0027maintenance\u0027, data[\u0027nodes\u0027][0])"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def test_detail(self):"},{"line_number":93,"context_line":"        ndict \u003d dbutils.get_test_node()"},{"line_number":94,"context_line":"        node \u003d self.dbapi.create_node(ndict)"},{"line_number":95,"context_line":"        data \u003d self.get_json(\u0027/nodes/detail\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVX%2F%2F%2BdI%3D","line":92,"updated":"2014-02-27 02:29:56.000000000","message":"is maintenance In or NotIn detail? Would be good to put something here.","commit_id":"8f0ffd99f682ed8ebe75aa6f1e3c2546fb8bb46d"},{"author":{"_account_id":8125,"name":"Michael Davies","email":"michael@the-davies.net","username":"mrda"},"change_message_id":"e86d2f74529f701238e5b12345b49db8d753842a","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        self.assertNotIn(\u0027chassis_id\u0027, data[\u0027nodes\u0027][0])"},{"line_number":90,"context_line":"        self.assertNotIn(\u0027maintenance\u0027, data[\u0027nodes\u0027][0])"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def test_detail(self):"},{"line_number":93,"context_line":"        ndict \u003d dbutils.get_test_node()"},{"line_number":94,"context_line":"        node \u003d self.dbapi.create_node(ndict)"},{"line_number":95,"context_line":"        data \u003d self.get_json(\u0027/nodes/detail\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVX%2F%2F9pA%3D","line":92,"in_reply_to":"AAAAVX%2F%2F%2BdI%3D","updated":"2014-02-27 05:21:35.000000000","message":"Done\n\nThanks for the comments Ruby!","commit_id":"8f0ffd99f682ed8ebe75aa6f1e3c2546fb8bb46d"}]}
