)]}'
{"doc/source/contributor/api.rst":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"66fe644b1e8e79e4c8a1702e8e2ddd882347a299","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Background"},{"line_number":5,"context_line":"----------"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Nova used to have two API plugin frameworks, one for the original v2 API and"},{"line_number":8,"context_line":"one for what we call v2.1 which also supports V2.1 microversions."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"The v2 API framework is removed now and Nova has only v2.1 framework"},{"line_number":11,"context_line":"for API implementation. For more details refer :doc:`/reference/stable-api`"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This document covers how to write new API plugins for the v2.1 framework. A"},{"line_number":14,"context_line":":doc:`microversions specific document \u003cmicroversions\u003e` covers the details"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f436f4f_2e02670c","line":11,"range":{"start_line":7,"start_character":0,"end_line":11,"end_character":75},"updated":"2017-08-11 20:21:18.000000000","message":"The old removed framework just makes confusions and I don\u0027t think it is worth keeping it on the document.\nSo it is nice to remove it completely.","commit_id":"f23d3e5154103a464213d5acc9a92a678b985e3f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"12818e12dfc455ddd09aee7aa18b8f9951fc4bd0","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Background"},{"line_number":5,"context_line":"----------"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Nova used to have two API plugin frameworks, one for the original v2 API and"},{"line_number":8,"context_line":"one for what we call v2.1 which also supports V2.1 microversions."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"The v2 API framework is removed now and Nova has only v2.1 framework"},{"line_number":11,"context_line":"for API implementation. For more details refer :doc:`/reference/stable-api`"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This document covers how to write new API plugins for the v2.1 framework. A"},{"line_number":14,"context_line":":doc:`microversions specific document \u003cmicroversions\u003e` covers the details"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f436f4f_7c3380f7","line":11,"range":{"start_line":7,"start_character":0,"end_line":11,"end_character":75},"in_reply_to":"9f436f4f_2e02670c","updated":"2017-08-12 02:47:59.000000000","message":"yea, that\u0027s much better i think.","commit_id":"f23d3e5154103a464213d5acc9a92a678b985e3f"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"66fe644b1e8e79e4c8a1702e8e2ddd882347a299","unresolved":false,"context_lines":[{"line_number":10,"context_line":"The v2 API framework is removed now and Nova has only v2.1 framework"},{"line_number":11,"context_line":"for API implementation. For more details refer :doc:`/reference/stable-api`"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This document covers how to write new API plugins for the v2.1 framework. A"},{"line_number":14,"context_line":":doc:`microversions specific document \u003cmicroversions\u003e` covers the details"},{"line_number":15,"context_line":"around what is required for the microversions part."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f436f4f_b90b3f22","line":13,"range":{"start_line":13,"start_character":34,"end_line":13,"end_character":38},"updated":"2017-08-11 20:21:18.000000000","message":"Related to the above, it is nice to remove this \"new\".","commit_id":"f23d3e5154103a464213d5acc9a92a678b985e3f"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"66fe644b1e8e79e4c8a1702e8e2ddd882347a299","unresolved":false,"context_lines":[{"line_number":10,"context_line":"The v2 API framework is removed now and Nova has only v2.1 framework"},{"line_number":11,"context_line":"for API implementation. For more details refer :doc:`/reference/stable-api`"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This document covers how to write new API plugins for the v2.1 framework. A"},{"line_number":14,"context_line":":doc:`microversions specific document \u003cmicroversions\u003e` covers the details"},{"line_number":15,"context_line":"around what is required for the microversions part."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f436f4f_192a4b7e","line":13,"range":{"start_line":13,"start_character":49,"end_line":13,"end_character":72},"updated":"2017-08-11 20:21:18.000000000","message":"ditto: nice to remove","commit_id":"f23d3e5154103a464213d5acc9a92a678b985e3f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"12818e12dfc455ddd09aee7aa18b8f9951fc4bd0","unresolved":false,"context_lines":[{"line_number":10,"context_line":"The v2 API framework is removed now and Nova has only v2.1 framework"},{"line_number":11,"context_line":"for API implementation. For more details refer :doc:`/reference/stable-api`"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This document covers how to write new API plugins for the v2.1 framework. A"},{"line_number":14,"context_line":":doc:`microversions specific document \u003cmicroversions\u003e` covers the details"},{"line_number":15,"context_line":"around what is required for the microversions part."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f436f4f_bc3d68c5","line":13,"range":{"start_line":13,"start_character":34,"end_line":13,"end_character":38},"in_reply_to":"9f436f4f_b90b3f22","updated":"2017-08-12 02:47:59.000000000","message":"Done","commit_id":"f23d3e5154103a464213d5acc9a92a678b985e3f"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"66fe644b1e8e79e4c8a1702e8e2ddd882347a299","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    \"\"\"Basic Test Extension\"\"\""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    from nova.api.openstack.compute.schemas import xyz"},{"line_number":34,"context_line":"    from nova.api.openstack import extensions"},{"line_number":35,"context_line":"    from nova.api.openstack import wsgi"},{"line_number":36,"context_line":"    from nova.api import validation"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f436f4f_4e46cbc2","line":34,"range":{"start_line":34,"start_character":4,"end_line":34,"end_character":45},"updated":"2017-08-11 20:21:18.000000000","message":"Off-topic: I think most of us are not fun of \"extensions\" now and the reason why we still need to import the extension is only for \"expected_errors\". It would be nice to move the method into wsgi module or some place to avoid importing \"extensions\" in the future.","commit_id":"f23d3e5154103a464213d5acc9a92a678b985e3f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"12818e12dfc455ddd09aee7aa18b8f9951fc4bd0","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    \"\"\"Basic Test Extension\"\"\""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    from nova.api.openstack.compute.schemas import xyz"},{"line_number":34,"context_line":"    from nova.api.openstack import extensions"},{"line_number":35,"context_line":"    from nova.api.openstack import wsgi"},{"line_number":36,"context_line":"    from nova.api import validation"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f436f4f_fc1f7058","line":34,"range":{"start_line":34,"start_character":4,"end_line":34,"end_character":45},"in_reply_to":"9f436f4f_4e46cbc2","updated":"2017-08-12 02:47:59.000000000","message":"yea, make sense. I can check how big that change will be and accordingly change.","commit_id":"f23d3e5154103a464213d5acc9a92a678b985e3f"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"66fe644b1e8e79e4c8a1702e8e2ddd882347a299","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        ."},{"line_number":92,"context_line":"    )"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Complete Routing list can be found in `routes.py \u003chttps://git.openstack.org/cgit/openstack/nova/tree/nova/api/openstack/compute/routes.py\u003e`_."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"Policy"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f436f4f_793a77cc","line":94,"range":{"start_line":94,"start_character":9,"end_line":94,"end_character":16},"updated":"2017-08-11 20:21:18.000000000","message":"nit: s/Routing/routing/","commit_id":"f23d3e5154103a464213d5acc9a92a678b985e3f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"12818e12dfc455ddd09aee7aa18b8f9951fc4bd0","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        ."},{"line_number":92,"context_line":"    )"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Complete Routing list can be found in `routes.py \u003chttps://git.openstack.org/cgit/openstack/nova/tree/nova/api/openstack/compute/routes.py\u003e`_."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"Policy"}],"source_content_type":"text/x-rst","patch_set":3,"id":"9f436f4f_5c179c46","line":94,"range":{"start_line":94,"start_character":9,"end_line":94,"end_character":16},"in_reply_to":"9f436f4f_793a77cc","updated":"2017-08-12 02:47:59.000000000","message":"Done","commit_id":"f23d3e5154103a464213d5acc9a92a678b985e3f"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"72c56f7c6385f16cbc70c50d36089e933bec3056","unresolved":false,"context_lines":[{"line_number":1,"context_line":"Extending the API"},{"line_number":2,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"Background"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f436f4f_b0757f34","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":17},"updated":"2017-08-14 06:50:35.000000000","message":"We can remove this doc https://docs.openstack.org/nova/latest/contributor/api-2.html.\n\nAnd how about we name this as \"add an API to the OpenStack compute API\"","commit_id":"740909f05402fa2d463c28d28ff376bc24b8c7e7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"02d429a11bb2ca12e9f7a969048fd0578092c5f0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"Extending the API"},{"line_number":2,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"Background"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f436f4f_7a96c4f2","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":17},"in_reply_to":"9f436f4f_b0757f34","updated":"2017-08-14 17:16:19.000000000","message":"yea, i will add that in next part. After giving the framework overview i will merge api_v2.rst and add section \"Add an API to the OpenStack Compute\" with step by step.","commit_id":"740909f05402fa2d463c28d28ff376bc24b8c7e7"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"72c56f7c6385f16cbc70c50d36089e933bec3056","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Background"},{"line_number":5,"context_line":"----------"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Nova has v2.1 API plugin frameworks which also supports microversions."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This document covers how to write API plugins for the v2.1 framework. A"},{"line_number":10,"context_line":":doc:`microversions specific document \u003cmicroversions\u003e` covers the details"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f436f4f_d0a12396","line":7,"range":{"start_line":7,"start_character":18,"end_line":7,"end_character":35},"updated":"2017-08-14 06:50:35.000000000","message":"I don\u0027t think we should call it as \u0027plugin frameworks\u0027 anyway.","commit_id":"740909f05402fa2d463c28d28ff376bc24b8c7e7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"02d429a11bb2ca12e9f7a969048fd0578092c5f0","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Background"},{"line_number":5,"context_line":"----------"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Nova has v2.1 API plugin frameworks which also supports microversions."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This document covers how to write API plugins for the v2.1 framework. A"},{"line_number":10,"context_line":":doc:`microversions specific document \u003cmicroversions\u003e` covers the details"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f436f4f_5a9b0017","line":7,"range":{"start_line":7,"start_character":18,"end_line":7,"end_character":35},"in_reply_to":"9f436f4f_d0a12396","updated":"2017-08-14 17:16:19.000000000","message":"Done","commit_id":"740909f05402fa2d463c28d28ff376bc24b8c7e7"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"72c56f7c6385f16cbc70c50d36089e933bec3056","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Nova has v2.1 API plugin frameworks which also supports microversions."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This document covers how to write API plugins for the v2.1 framework. A"},{"line_number":10,"context_line":":doc:`microversions specific document \u003cmicroversions\u003e` covers the details"},{"line_number":11,"context_line":"around what is required for the microversions part."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f436f4f_50bf73af","line":9,"range":{"start_line":9,"start_character":21,"end_line":9,"end_character":45},"updated":"2017-08-14 06:50:35.000000000","message":"how to add API for the v2.1 API framework?","commit_id":"740909f05402fa2d463c28d28ff376bc24b8c7e7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"02d429a11bb2ca12e9f7a969048fd0578092c5f0","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Nova has v2.1 API plugin frameworks which also supports microversions."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This document covers how to write API plugins for the v2.1 framework. A"},{"line_number":10,"context_line":":doc:`microversions specific document \u003cmicroversions\u003e` covers the details"},{"line_number":11,"context_line":"around what is required for the microversions part."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f436f4f_fa8994c9","line":9,"range":{"start_line":9,"start_character":21,"end_line":9,"end_character":45},"in_reply_to":"9f436f4f_50bf73af","updated":"2017-08-14 17:16:19.000000000","message":"Done","commit_id":"740909f05402fa2d463c28d28ff376bc24b8c7e7"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"72c56f7c6385f16cbc70c50d36089e933bec3056","unresolved":false,"context_lines":[{"line_number":10,"context_line":":doc:`microversions specific document \u003cmicroversions\u003e` covers the details"},{"line_number":11,"context_line":"around what is required for the microversions part."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The v2.1 framework and plugins live in ``nova/api/openstack/compute``."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Note that any change to the Nova API to be merged will first require a"},{"line_number":16,"context_line":"spec be approved first. See `here \u003chttps://github.com/openstack/nova-specs\u003e`_"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f436f4f_b0d8df1d","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":70},"updated":"2017-08-14 06:50:35.000000000","message":"The framework is under \u0027nova/api\u0027, the implement of each API in \u0027nova/api/openstack/compute;","commit_id":"740909f05402fa2d463c28d28ff376bc24b8c7e7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"02d429a11bb2ca12e9f7a969048fd0578092c5f0","unresolved":false,"context_lines":[{"line_number":10,"context_line":":doc:`microversions specific document \u003cmicroversions\u003e` covers the details"},{"line_number":11,"context_line":"around what is required for the microversions part."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The v2.1 framework and plugins live in ``nova/api/openstack/compute``."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Note that any change to the Nova API to be merged will first require a"},{"line_number":16,"context_line":"spec be approved first. See `here \u003chttps://github.com/openstack/nova-specs\u003e`_"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f436f4f_baa8ac1f","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":70},"in_reply_to":"9f436f4f_b0d8df1d","updated":"2017-08-14 17:16:19.000000000","message":"Done","commit_id":"740909f05402fa2d463c28d28ff376bc24b8c7e7"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"72c56f7c6385f16cbc70c50d36089e933bec3056","unresolved":false,"context_lines":[{"line_number":19,"context_line":"\u003chttps://wiki.openstack.org/wiki/API_Working_Group\u003e`_"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Basic plugin structure"},{"line_number":23,"context_line":"----------------------"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"A very basic skeleton of a v2.1 plugin::"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f436f4f_d06b631b","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":22},"updated":"2017-08-14 06:50:35.000000000","message":"A basic controller?\n\nThen, in the beginning, we can talk about what is the controller. Probably controller is a thing to implement the API method for a resource.","commit_id":"740909f05402fa2d463c28d28ff376bc24b8c7e7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"02d429a11bb2ca12e9f7a969048fd0578092c5f0","unresolved":false,"context_lines":[{"line_number":19,"context_line":"\u003chttps://wiki.openstack.org/wiki/API_Working_Group\u003e`_"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Basic plugin structure"},{"line_number":23,"context_line":"----------------------"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"A very basic skeleton of a v2.1 plugin::"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f436f4f_ba566c29","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":22},"in_reply_to":"9f436f4f_d06b631b","updated":"2017-08-14 17:16:19.000000000","message":"Done","commit_id":"740909f05402fa2d463c28d28ff376bc24b8c7e7"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"72c56f7c6385f16cbc70c50d36089e933bec3056","unresolved":false,"context_lines":[{"line_number":22,"context_line":"Basic plugin structure"},{"line_number":23,"context_line":"----------------------"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"A very basic skeleton of a v2.1 plugin::"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    \"\"\"Basic Test Extension\"\"\""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f436f4f_b0745fff","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":40},"updated":"2017-08-14 06:50:35.000000000","message":"A very basic controller.","commit_id":"740909f05402fa2d463c28d28ff376bc24b8c7e7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"02d429a11bb2ca12e9f7a969048fd0578092c5f0","unresolved":false,"context_lines":[{"line_number":22,"context_line":"Basic plugin structure"},{"line_number":23,"context_line":"----------------------"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"A very basic skeleton of a v2.1 plugin::"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    \"\"\"Basic Test Extension\"\"\""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f436f4f_da5db047","line":25,"range":{"start_line":25,"start_character":0,"end_line":25,"end_character":40},"in_reply_to":"9f436f4f_b0745fff","updated":"2017-08-14 17:16:19.000000000","message":"Done","commit_id":"740909f05402fa2d463c28d28ff376bc24b8c7e7"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"72c56f7c6385f16cbc70c50d36089e933bec3056","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"A very basic skeleton of a v2.1 plugin::"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    \"\"\"Basic Test Extension\"\"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    from nova.api.openstack.compute.schemas import xyz"},{"line_number":30,"context_line":"    from nova.api.openstack import extensions"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f436f4f_7064b74a","line":27,"range":{"start_line":27,"start_character":4,"end_line":27,"end_character":30},"updated":"2017-08-14 06:50:35.000000000","message":"We can remove the \u0027Extension\u0027","commit_id":"740909f05402fa2d463c28d28ff376bc24b8c7e7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"02d429a11bb2ca12e9f7a969048fd0578092c5f0","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"A very basic skeleton of a v2.1 plugin::"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    \"\"\"Basic Test Extension\"\"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    from nova.api.openstack.compute.schemas import xyz"},{"line_number":30,"context_line":"    from nova.api.openstack import extensions"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f436f4f_3a383cec","line":27,"range":{"start_line":27,"start_character":4,"end_line":27,"end_character":30},"in_reply_to":"9f436f4f_7064b74a","updated":"2017-08-14 17:16:19.000000000","message":"Done","commit_id":"740909f05402fa2d463c28d28ff376bc24b8c7e7"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"72c56f7c6385f16cbc70c50d36089e933bec3056","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    \"\"\"Basic Test Extension\"\"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    from nova.api.openstack.compute.schemas import xyz"},{"line_number":30,"context_line":"    from nova.api.openstack import extensions"},{"line_number":31,"context_line":"    from nova.api.openstack import wsgi"},{"line_number":32,"context_line":"    from nova.api import validation"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f436f4f_5069b31e","line":30,"updated":"2017-08-14 06:50:35.000000000","message":"This import can be removed","commit_id":"740909f05402fa2d463c28d28ff376bc24b8c7e7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"02d429a11bb2ca12e9f7a969048fd0578092c5f0","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    \"\"\"Basic Test Extension\"\"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    from nova.api.openstack.compute.schemas import xyz"},{"line_number":30,"context_line":"    from nova.api.openstack import extensions"},{"line_number":31,"context_line":"    from nova.api.openstack import wsgi"},{"line_number":32,"context_line":"    from nova.api import validation"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f436f4f_9a016809","line":30,"in_reply_to":"9f436f4f_5069b31e","updated":"2017-08-14 17:16:19.000000000","message":"actually i showed extensions.expected_errors() in example so need to include this import","commit_id":"740909f05402fa2d463c28d28ff376bc24b8c7e7"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"72c56f7c6385f16cbc70c50d36089e933bec3056","unresolved":false,"context_lines":[{"line_number":38,"context_line":"            data \u003d {\u0027param\u0027: \u0027val\u0027}"},{"line_number":39,"context_line":"            return data"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        @extensions.expected_errors((400, 409))"},{"line_number":42,"context_line":"        @validation.schema(xyz.create)"},{"line_number":43,"context_line":"        def create(self, req, body):"},{"line_number":44,"context_line":"            write_body_here \u003d ok"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f436f4f_30cf4f2a","line":42,"range":{"start_line":41,"start_character":8,"end_line":42,"end_character":38},"updated":"2017-08-14 06:50:35.000000000","message":"It would be great to have very sort explain for all of those decorators. We may not to use them all in this example, we can just have a list in the bottom to explain those.","commit_id":"740909f05402fa2d463c28d28ff376bc24b8c7e7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"02d429a11bb2ca12e9f7a969048fd0578092c5f0","unresolved":false,"context_lines":[{"line_number":38,"context_line":"            data \u003d {\u0027param\u0027: \u0027val\u0027}"},{"line_number":39,"context_line":"            return data"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        @extensions.expected_errors((400, 409))"},{"line_number":42,"context_line":"        @validation.schema(xyz.create)"},{"line_number":43,"context_line":"        def create(self, req, body):"},{"line_number":44,"context_line":"            write_body_here \u003d ok"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f436f4f_9d160249","line":42,"range":{"start_line":41,"start_character":8,"end_line":42,"end_character":38},"in_reply_to":"9f436f4f_30cf4f2a","updated":"2017-08-14 17:16:19.000000000","message":"agree. i will do this in part2 when we will explain the step by step explanation of API methods.","commit_id":"740909f05402fa2d463c28d28ff376bc24b8c7e7"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"72c56f7c6385f16cbc70c50d36089e933bec3056","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        @extensions.expected_errors((400, 409))"},{"line_number":42,"context_line":"        @validation.schema(xyz.create)"},{"line_number":43,"context_line":"        def create(self, req, body):"},{"line_number":44,"context_line":"            write_body_here \u003d ok"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        # Defining a method implements the following API responses:"},{"line_number":47,"context_line":"        #   delete -\u003e DELETE"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f436f4f_b0fb3f45","line":44,"updated":"2017-08-14 06:50:35.000000000","message":"Let us return fake, like \u0027return body\u0027. And add the decorator \u0027@wsgi.response(201)\u0027, since the create API should return 201 when there is body. Let us show an example more close in real world.","commit_id":"740909f05402fa2d463c28d28ff376bc24b8c7e7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"02d429a11bb2ca12e9f7a969048fd0578092c5f0","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        @extensions.expected_errors((400, 409))"},{"line_number":42,"context_line":"        @validation.schema(xyz.create)"},{"line_number":43,"context_line":"        def create(self, req, body):"},{"line_number":44,"context_line":"            write_body_here \u003d ok"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        # Defining a method implements the following API responses:"},{"line_number":47,"context_line":"        #   delete -\u003e DELETE"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f436f4f_1d2452ae","line":44,"in_reply_to":"9f436f4f_b0fb3f45","updated":"2017-08-14 17:16:19.000000000","message":"Done","commit_id":"740909f05402fa2d463c28d28ff376bc24b8c7e7"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"72c56f7c6385f16cbc70c50d36089e933bec3056","unresolved":false,"context_lines":[{"line_number":90,"context_line":"Complete routing list can be found in `routes.py \u003chttps://git.openstack.org/cgit/openstack/nova/tree/nova/api/openstack/compute/routes.py\u003e`_."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"Policy"},{"line_number":94,"context_line":"~~~~~~"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"Policy (permission) is defined ``etc/nova/policy.json``. Implementation of policy"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f436f4f_506ad3ed","line":93,"range":{"start_line":93,"start_character":0,"end_line":93,"end_character":6},"updated":"2017-08-14 06:50:35.000000000","message":"We need to update this. Probably, about the policy in the code, but I\u0027m ok to update this in separate patch.","commit_id":"740909f05402fa2d463c28d28ff376bc24b8c7e7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"02d429a11bb2ca12e9f7a969048fd0578092c5f0","unresolved":false,"context_lines":[{"line_number":90,"context_line":"Complete routing list can be found in `routes.py \u003chttps://git.openstack.org/cgit/openstack/nova/tree/nova/api/openstack/compute/routes.py\u003e`_."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"Policy"},{"line_number":94,"context_line":"~~~~~~"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"Policy (permission) is defined ``etc/nova/policy.json``. Implementation of policy"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f436f4f_bd32e6f0","line":93,"range":{"start_line":93,"start_character":0,"end_line":93,"end_character":6},"in_reply_to":"9f436f4f_506ad3ed","updated":"2017-08-14 17:16:19.000000000","message":"yea, i have not touched these in this. ll take this for next patch","commit_id":"740909f05402fa2d463c28d28ff376bc24b8c7e7"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"72c56f7c6385f16cbc70c50d36089e933bec3056","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"Policy (permission) is defined ``etc/nova/policy.json``. Implementation of policy"},{"line_number":97,"context_line":"is changing a bit at the moment. Will add more to this document or reference"},{"line_number":98,"context_line":"another one in the future. Note that a \u0027discoverable\u0027 policy needs to be added"},{"line_number":99,"context_line":"for each plugin that you wish to appear in the ``/extension`` output. Also"},{"line_number":100,"context_line":"look at the authorize call in plugins currently merged."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Modularity"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f436f4f_d0b0038d","line":99,"range":{"start_line":98,"start_character":27,"end_line":99,"end_character":68},"updated":"2017-08-14 06:50:35.000000000","message":"This can be removed.","commit_id":"740909f05402fa2d463c28d28ff376bc24b8c7e7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"02d429a11bb2ca12e9f7a969048fd0578092c5f0","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"Policy (permission) is defined ``etc/nova/policy.json``. Implementation of policy"},{"line_number":97,"context_line":"is changing a bit at the moment. Will add more to this document or reference"},{"line_number":98,"context_line":"another one in the future. Note that a \u0027discoverable\u0027 policy needs to be added"},{"line_number":99,"context_line":"for each plugin that you wish to appear in the ``/extension`` output. Also"},{"line_number":100,"context_line":"look at the authorize call in plugins currently merged."},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Modularity"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f436f4f_1d59f233","line":99,"range":{"start_line":98,"start_character":27,"end_line":99,"end_character":68},"in_reply_to":"9f436f4f_d0b0038d","updated":"2017-08-14 17:16:19.000000000","message":"Done","commit_id":"740909f05402fa2d463c28d28ff376bc24b8c7e7"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"72c56f7c6385f16cbc70c50d36089e933bec3056","unresolved":false,"context_lines":[{"line_number":102,"context_line":"Modularity"},{"line_number":103,"context_line":"~~~~~~~~~~"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"The Nova REST API is separated into different plugins in the directory"},{"line_number":106,"context_line":"\u0027nova/api/openstack/compute/\u0027"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"Because microversions are supported in the Nova REST API, the API can be"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f436f4f_306bcff1","line":105,"range":{"start_line":105,"start_character":46,"end_line":105,"end_character":53},"updated":"2017-08-14 06:50:35.000000000","message":"separated into different controllers","commit_id":"740909f05402fa2d463c28d28ff376bc24b8c7e7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"02d429a11bb2ca12e9f7a969048fd0578092c5f0","unresolved":false,"context_lines":[{"line_number":102,"context_line":"Modularity"},{"line_number":103,"context_line":"~~~~~~~~~~"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"The Nova REST API is separated into different plugins in the directory"},{"line_number":106,"context_line":"\u0027nova/api/openstack/compute/\u0027"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"Because microversions are supported in the Nova REST API, the API can be"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f436f4f_fd418e3a","line":105,"range":{"start_line":105,"start_character":46,"end_line":105,"end_character":53},"in_reply_to":"9f436f4f_306bcff1","updated":"2017-08-14 17:16:19.000000000","message":"Done","commit_id":"740909f05402fa2d463c28d28ff376bc24b8c7e7"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"72c56f7c6385f16cbc70c50d36089e933bec3056","unresolved":false,"context_lines":[{"line_number":140,"context_line":"Similarly to plugin modularity, JSON-Schema definitions can be added"},{"line_number":141,"context_line":"in same or separate JSON-Schema module."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"The following are the combinations of extensible API and method name"},{"line_number":144,"context_line":"which returns additional Schema parameters:"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"* Create a server API  - get_server_create_schema()"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"For example, keypairs extension(Keypairs class) contains the method"},{"line_number":149,"context_line":"get_server_create_schema() which returns::"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f436f4f_503893ed","line":146,"range":{"start_line":143,"start_character":0,"end_line":146,"end_character":51},"updated":"2017-08-14 06:50:35.000000000","message":"I plan to remove this in our code probably.","commit_id":"740909f05402fa2d463c28d28ff376bc24b8c7e7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"02d429a11bb2ca12e9f7a969048fd0578092c5f0","unresolved":false,"context_lines":[{"line_number":140,"context_line":"Similarly to plugin modularity, JSON-Schema definitions can be added"},{"line_number":141,"context_line":"in same or separate JSON-Schema module."},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"The following are the combinations of extensible API and method name"},{"line_number":144,"context_line":"which returns additional Schema parameters:"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"* Create a server API  - get_server_create_schema()"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"For example, keypairs extension(Keypairs class) contains the method"},{"line_number":149,"context_line":"get_server_create_schema() which returns::"}],"source_content_type":"text/x-rst","patch_set":4,"id":"9f436f4f_9d44c248","line":146,"range":{"start_line":143,"start_character":0,"end_line":146,"end_character":51},"in_reply_to":"9f436f4f_503893ed","updated":"2017-08-14 17:16:19.000000000","message":"yea.","commit_id":"740909f05402fa2d463c28d28ff376bc24b8c7e7"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"58d67abc5a4722cc71aa11e1a9b2e6811d16b219","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Background"},{"line_number":5,"context_line":"----------"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Nova has v2.1 API frameworks which also supports microversions."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This document covers how to add API for the v2.1 API framework. A"},{"line_number":10,"context_line":":doc:`microversions specific document \u003cmicroversions\u003e` covers the details"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_e971d077","line":7,"range":{"start_line":7,"start_character":35,"end_line":7,"end_character":40},"updated":"2017-08-14 20:06:23.000000000","message":"this \"also\" seems unnecessary..","commit_id":"506befc18a9a156bbc49f3db103d987ba0b25d1f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"b200b2e5a92c2baeb7e066de3cc71033430e8a42","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Background"},{"line_number":5,"context_line":"----------"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Nova has v2.1 API frameworks which also supports microversions."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This document covers how to add API for the v2.1 API framework. A"},{"line_number":10,"context_line":":doc:`microversions specific document \u003cmicroversions\u003e` covers the details"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_39203c48","line":7,"range":{"start_line":7,"start_character":35,"end_line":7,"end_character":40},"in_reply_to":"9f436f4f_e971d077","updated":"2017-08-15 05:45:37.000000000","message":"Done","commit_id":"506befc18a9a156bbc49f3db103d987ba0b25d1f"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"cc325760e6913fcd0028774978e105c56cf805ea","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            write_body_here \u003d ok"},{"line_number":49,"context_line":"            return response_body"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        # Defining a method implements the following API responses:"},{"line_number":52,"context_line":"        #   delete -\u003e DELETE"},{"line_number":53,"context_line":"        #   update -\u003e PUT"},{"line_number":54,"context_line":"        #   show -\u003e GET"},{"line_number":55,"context_line":"        # If a method is not defined a request to it will be a 404 response"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        # It is also possible to define support for further responses"},{"line_number":58,"context_line":"        # See `servers.py \u003chttp://git.openstack.org/cgit/openstack/nova/tree/nova/nova/api/openstack/compute/servers.py\u003e`_."}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_390cbc3f","line":55,"range":{"start_line":51,"start_character":8,"end_line":55,"end_character":75},"updated":"2017-08-15 06:37:51.000000000","message":"It also depends on the definition of plain routes? So I think we can remove this comments.","commit_id":"506befc18a9a156bbc49f3db103d987ba0b25d1f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"1968a21bb67e9f5071f341dc8f1808405e662065","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            write_body_here \u003d ok"},{"line_number":49,"context_line":"            return response_body"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        # Defining a method implements the following API responses:"},{"line_number":52,"context_line":"        #   delete -\u003e DELETE"},{"line_number":53,"context_line":"        #   update -\u003e PUT"},{"line_number":54,"context_line":"        #   show -\u003e GET"},{"line_number":55,"context_line":"        # If a method is not defined a request to it will be a 404 response"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        # It is also possible to define support for further responses"},{"line_number":58,"context_line":"        # See `servers.py \u003chttp://git.openstack.org/cgit/openstack/nova/tree/nova/nova/api/openstack/compute/servers.py\u003e`_."}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_acc2ac57","line":55,"range":{"start_line":51,"start_character":8,"end_line":55,"end_character":75},"in_reply_to":"9f436f4f_390cbc3f","updated":"2017-08-15 07:02:51.000000000","message":"Done","commit_id":"506befc18a9a156bbc49f3db103d987ba0b25d1f"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"cc325760e6913fcd0028774978e105c56cf805ea","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        # If a method is not defined a request to it will be a 404 response"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        # It is also possible to define support for further responses"},{"line_number":58,"context_line":"        # See `servers.py \u003chttp://git.openstack.org/cgit/openstack/nova/tree/nova/nova/api/openstack/compute/servers.py\u003e`_."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"All of these controller files should live in the ``nova/api/openstack/compute`` directory."}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_b920acad","line":58,"updated":"2017-08-15 06:37:51.000000000","message":"Emm... a little confuse what is this comment about.","commit_id":"506befc18a9a156bbc49f3db103d987ba0b25d1f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"1968a21bb67e9f5071f341dc8f1808405e662065","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        # If a method is not defined a request to it will be a 404 response"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        # It is also possible to define support for further responses"},{"line_number":58,"context_line":"        # See `servers.py \u003chttp://git.openstack.org/cgit/openstack/nova/tree/nova/nova/api/openstack/compute/servers.py\u003e`_."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"All of these controller files should live in the ``nova/api/openstack/compute`` directory."}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_ec98b475","line":58,"in_reply_to":"9f436f4f_b920acad","updated":"2017-08-15 07:02:51.000000000","message":"i think we wanted to show a complete example for controller. let me modify the comment here.","commit_id":"506befc18a9a156bbc49f3db103d987ba0b25d1f"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"58d67abc5a4722cc71aa11e1a9b2e6811d16b219","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        # See `servers.py \u003chttp://git.openstack.org/cgit/openstack/nova/tree/nova/nova/api/openstack/compute/servers.py\u003e`_."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"All of these controller files should live in the ``nova/api/openstack/compute`` directory."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"URL Mapping to API"},{"line_number":64,"context_line":"~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_89bda4d9","line":61,"range":{"start_line":61,"start_character":24,"end_line":61,"end_character":29},"updated":"2017-08-14 20:06:23.000000000","message":"s/files/modules/","commit_id":"506befc18a9a156bbc49f3db103d987ba0b25d1f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"b200b2e5a92c2baeb7e066de3cc71033430e8a42","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        # See `servers.py \u003chttp://git.openstack.org/cgit/openstack/nova/tree/nova/nova/api/openstack/compute/servers.py\u003e`_."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"All of these controller files should live in the ``nova/api/openstack/compute`` directory."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"URL Mapping to API"},{"line_number":64,"context_line":"~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_79dfe439","line":61,"range":{"start_line":61,"start_character":24,"end_line":61,"end_character":29},"in_reply_to":"9f436f4f_89bda4d9","updated":"2017-08-15 05:45:37.000000000","message":"Done","commit_id":"506befc18a9a156bbc49f3db103d987ba0b25d1f"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"cc325760e6913fcd0028774978e105c56cf805ea","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    import nova.api.openstack"},{"line_number":77,"context_line":"    from nova.api.openstack.compute import basic_api"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    basic_controller \u003d functools.partial("},{"line_number":80,"context_line":"        _create_controller, basic_api.BasicController, [], [])"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    ROUTE_LIST \u003d ("}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_2c111c53","line":79,"updated":"2017-08-15 06:37:51.000000000","message":"A comment at here to say \u0027create a controller object\u0027","commit_id":"506befc18a9a156bbc49f3db103d987ba0b25d1f"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"cc325760e6913fcd0028774978e105c56cf805ea","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        ."},{"line_number":84,"context_line":"        ."},{"line_number":85,"context_line":"        ."},{"line_number":86,"context_line":"        (\u0027/basic\u0027, {"},{"line_number":87,"context_line":"            \u0027GET\u0027: [basic_controller, \u0027index\u0027],"},{"line_number":88,"context_line":"            \u0027POST\u0027: [basic_controller, \u0027create\u0027]"},{"line_number":89,"context_line":"        }),"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_4c3d80c2","line":86,"updated":"2017-08-15 06:37:51.000000000","message":"Maybe copy this comment https://github.com/openstack/nova/blob/master/nova/api/openstack/compute/routes.py#L391  at here. To explain the meaning of this dict","commit_id":"506befc18a9a156bbc49f3db103d987ba0b25d1f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"1968a21bb67e9f5071f341dc8f1808405e662065","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        ."},{"line_number":84,"context_line":"        ."},{"line_number":85,"context_line":"        ."},{"line_number":86,"context_line":"        (\u0027/basic\u0027, {"},{"line_number":87,"context_line":"            \u0027GET\u0027: [basic_controller, \u0027index\u0027],"},{"line_number":88,"context_line":"            \u0027POST\u0027: [basic_controller, \u0027create\u0027]"},{"line_number":89,"context_line":"        }),"}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_ac7f4cde","line":86,"in_reply_to":"9f436f4f_4c3d80c2","updated":"2017-08-15 07:02:51.000000000","message":"Done","commit_id":"506befc18a9a156bbc49f3db103d987ba0b25d1f"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"58d67abc5a4722cc71aa11e1a9b2e6811d16b219","unresolved":false,"context_lines":[{"line_number":144,"context_line":"in same or separate JSON-Schema module."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"The following are the combinations of extensible API and method name"},{"line_number":147,"context_line":"which returns additional Schema parameters:"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"* Create a server API  - get_server_create_schema()"},{"line_number":150,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_49afbc7c","line":147,"range":{"start_line":147,"start_character":25,"end_line":147,"end_character":32},"updated":"2017-08-14 20:06:23.000000000","message":"s/Schema/JSON-Schema/","commit_id":"506befc18a9a156bbc49f3db103d987ba0b25d1f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"b200b2e5a92c2baeb7e066de3cc71033430e8a42","unresolved":false,"context_lines":[{"line_number":144,"context_line":"in same or separate JSON-Schema module."},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"The following are the combinations of extensible API and method name"},{"line_number":147,"context_line":"which returns additional Schema parameters:"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"* Create a server API  - get_server_create_schema()"},{"line_number":150,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"9f436f4f_39e5dc09","line":147,"range":{"start_line":147,"start_character":25,"end_line":147,"end_character":32},"in_reply_to":"9f436f4f_49afbc7c","updated":"2017-08-15 05:45:37.000000000","message":"Done","commit_id":"506befc18a9a156bbc49f3db103d987ba0b25d1f"}]}
