)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"aa60c91d7c0eba156fa3cb1c646b646e83fba2a1","unresolved":false,"context_lines":[{"line_number":14,"context_line":"The doc includes:"},{"line_number":15,"context_line":"* request and response body"},{"line_number":16,"context_line":"* query parameters"},{"line_number":17,"context_line":"* microversion support"},{"line_number":18,"context_line":"* expected errror status code."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"More thing need TODO"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"5a2ca52d_fb64474a","line":17,"updated":"2015-10-13 10:23:53.000000000","message":"So I think the plan is to generate a separate swagger tree for each microversion.\n\nSo the latest doc will note the previous changes, maybe linking to the doc that holds the previous version, eventually.\n\nBut I could be miss-remembering that.","commit_id":"8a3fdb88b1f7d99d1b0a2f3db0a62c5a429542eb"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4cc97f7841863494fbc526f56c69302651aeea26","unresolved":false,"context_lines":[{"line_number":14,"context_line":"The doc includes:"},{"line_number":15,"context_line":"* request and response body"},{"line_number":16,"context_line":"* query parameters"},{"line_number":17,"context_line":"* microversion support"},{"line_number":18,"context_line":"* expected errror status code."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"More thing need TODO"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3a29b11f_fbd511b9","line":17,"in_reply_to":"5a2ca52d_fb64474a","updated":"2015-10-19 05:50:35.000000000","message":"yea, let me talk with doc team, to see how their UI parses the swagger spec","commit_id":"8a3fdb88b1f7d99d1b0a2f3db0a62c5a429542eb"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"aa60c91d7c0eba156fa3cb1c646b646e83fba2a1","unresolved":false,"context_lines":[{"line_number":15,"context_line":"* request and response body"},{"line_number":16,"context_line":"* query parameters"},{"line_number":17,"context_line":"* microversion support"},{"line_number":18,"context_line":"* expected errror status code."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"More thing need TODO"},{"line_number":21,"context_line":"* action support"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"5a2ca52d_fbc0c7e2","line":18,"updated":"2015-10-13 10:23:53.000000000","message":"we probably need to talk about what the user can do about the error code, but lets not run before we can walk.","commit_id":"8a3fdb88b1f7d99d1b0a2f3db0a62c5a429542eb"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4cc97f7841863494fbc526f56c69302651aeea26","unresolved":false,"context_lines":[{"line_number":15,"context_line":"* request and response body"},{"line_number":16,"context_line":"* query parameters"},{"line_number":17,"context_line":"* microversion support"},{"line_number":18,"context_line":"* expected errror status code."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"More thing need TODO"},{"line_number":21,"context_line":"* action support"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3a29b11f_fb10b1aa","line":18,"in_reply_to":"5a2ca52d_fbc0c7e2","updated":"2015-10-19 05:50:35.000000000","message":"Emm....Actually for a single status code is used by multiple error case. (The best thing is we have sub-error-code status code in the future.) I think the user need to know when an error status code return, that status code means what kind of errors. Without this doc, the user only can knowing that after checking nova code.\n\nAfter user know exactly an error code meaning, they can do different process depend on different error case.  Just like how we use neutron api, depend on different error case doing different process https://github.com/openstack/nova/blob/master/nova/network/neutronv2/api.py#L1454","commit_id":"8a3fdb88b1f7d99d1b0a2f3db0a62c5a429542eb"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"aa60c91d7c0eba156fa3cb1c646b646e83fba2a1","unresolved":false,"context_lines":[{"line_number":20,"context_line":"More thing need TODO"},{"line_number":21,"context_line":"* action support"},{"line_number":22,"context_line":"* doc the parameter in the url"},{"line_number":23,"context_line":"* reference the api samples"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"The problem of current nova code base"},{"line_number":26,"context_line":"* The Microversion should declare on the top of method"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"5a2ca52d_5b253bc0","line":23,"updated":"2015-10-13 10:23:53.000000000","message":"just to be clear, there are auto generated already? wonder if we just auto generate them into the swagger?","commit_id":"8a3fdb88b1f7d99d1b0a2f3db0a62c5a429542eb"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4cc97f7841863494fbc526f56c69302651aeea26","unresolved":false,"context_lines":[{"line_number":20,"context_line":"More thing need TODO"},{"line_number":21,"context_line":"* action support"},{"line_number":22,"context_line":"* doc the parameter in the url"},{"line_number":23,"context_line":"* reference the api samples"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"The problem of current nova code base"},{"line_number":26,"context_line":"* The Microversion should declare on the top of method"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3a29b11f_bb231905","line":23,"in_reply_to":"5a2ca52d_5b253bc0","updated":"2015-10-19 05:50:35.000000000","message":"yea, this is more about how can we mapping each api entry in swagger doc with api samples","commit_id":"8a3fdb88b1f7d99d1b0a2f3db0a62c5a429542eb"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"aa60c91d7c0eba156fa3cb1c646b646e83fba2a1","unresolved":false,"context_lines":[{"line_number":25,"context_line":"The problem of current nova code base"},{"line_number":26,"context_line":"* The Microversion should declare on the top of method"},{"line_number":27,"context_line":"* The api sample test should enable all the extensions"},{"line_number":28,"context_line":"* We haven\u0027t schema and validation for query parameters"},{"line_number":29,"context_line":"* We haven\u0027t schema for api response (but tempest have)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"generate swagger doc:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"5a2ca52d_7eaca5ed","line":28,"updated":"2015-10-13 10:23:53.000000000","message":"Yeah, I have been worried about that, we really should add that.","commit_id":"8a3fdb88b1f7d99d1b0a2f3db0a62c5a429542eb"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4cc97f7841863494fbc526f56c69302651aeea26","unresolved":false,"context_lines":[{"line_number":25,"context_line":"The problem of current nova code base"},{"line_number":26,"context_line":"* The Microversion should declare on the top of method"},{"line_number":27,"context_line":"* The api sample test should enable all the extensions"},{"line_number":28,"context_line":"* We haven\u0027t schema and validation for query parameters"},{"line_number":29,"context_line":"* We haven\u0027t schema for api response (but tempest have)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"generate swagger doc:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3a29b11f_5b20c5f7","line":28,"in_reply_to":"5a2ca52d_7eaca5ed","updated":"2015-10-19 05:50:35.000000000","message":"yea","commit_id":"8a3fdb88b1f7d99d1b0a2f3db0a62c5a429542eb"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"aa60c91d7c0eba156fa3cb1c646b646e83fba2a1","unresolved":false,"context_lines":[{"line_number":26,"context_line":"* The Microversion should declare on the top of method"},{"line_number":27,"context_line":"* The api sample test should enable all the extensions"},{"line_number":28,"context_line":"* We haven\u0027t schema and validation for query parameters"},{"line_number":29,"context_line":"* We haven\u0027t schema for api response (but tempest have)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"generate swagger doc:"},{"line_number":32,"context_line":"    GENERATE_SWAGGER\u003dtrue tox -e functional test_api_doc"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"5a2ca52d_5e41a938","line":29,"updated":"2015-10-13 10:23:53.000000000","message":"Agree we should move them into nova, seems odd they live in tempest anyways.\n\nMaybe a test to check the generated API samples match the schema is needed here, at a minimum, make sure we are self consistent in the docs.\n\nMaybe we should really then have a functional test that validates the docs are correct, or something like that?","commit_id":"8a3fdb88b1f7d99d1b0a2f3db0a62c5a429542eb"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4cc97f7841863494fbc526f56c69302651aeea26","unresolved":false,"context_lines":[{"line_number":26,"context_line":"* The Microversion should declare on the top of method"},{"line_number":27,"context_line":"* The api sample test should enable all the extensions"},{"line_number":28,"context_line":"* We haven\u0027t schema and validation for query parameters"},{"line_number":29,"context_line":"* We haven\u0027t schema for api response (but tempest have)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"generate swagger doc:"},{"line_number":32,"context_line":"    GENERATE_SWAGGER\u003dtrue tox -e functional test_api_doc"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3a29b11f_db593590","line":29,"in_reply_to":"5a2ca52d_5e41a938","updated":"2015-10-19 05:50:35.000000000","message":"yea, actually I plan nova/tests/functional/test_api_doc.py will validate the docs we generated.","commit_id":"8a3fdb88b1f7d99d1b0a2f3db0a62c5a429542eb"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"a08699c67282eab7a96ce1de3f39c8f03432f1e1","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     He Jie Xu \u003chejie.xu@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-11-17 15:44:06 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"POC: generate swagger spec from api code base"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This code just show how to generate swagger from nova code base.(Limited"},{"line_number":10,"context_line":"to only show keypairs api)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"ba8a016a_aa8dca32","line":7,"updated":"2015-11-17 09:45:17.000000000","message":"This patch doesn\u0027t generate swagger spec.\n\nThis should be\n\nPoC: Add swagger spec and apply to API code\n\ninstead","commit_id":"c2747ff2b89d0a7b4c6b925e3ad93a35799a5cc1"}],"doc/source/swagger.json":[{"author":{"_account_id":964,"name":"Anne Gentle","email":"annegentle@justwriteclick.com","username":"annegentle"},"change_message_id":"fa03c4198f059cc7e57c7fffe1d3639176c32fa2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"basePath\": \"/\", "},{"line_number":3,"context_line":"    \"swagger\": \"2.0\", "},{"line_number":4,"context_line":"    \"schemes\": ["}],"source_content_type":"application/json","patch_set":6,"id":"5a2ca52d_96906fee","line":1,"updated":"2015-11-06 05:43:42.000000000","message":"Technically this should be stored in /build/ not source, right?","commit_id":"8a3fdb88b1f7d99d1b0a2f3db0a62c5a429542eb"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"433743ded98791eb488c80fb0a0c41ccfd7f1f57","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"basePath\": \"/\", "},{"line_number":3,"context_line":"    \"swagger\": \"2.0\", "},{"line_number":4,"context_line":"    \"schemes\": ["}],"source_content_type":"application/json","patch_set":6,"id":"da85f559_b893b44e","line":1,"in_reply_to":"5a2ca52d_96906fee","updated":"2015-11-10 13:18:04.000000000","message":"I put at here just similar to the api sample files. This file actually generated when running the functional test. \u0027/build\u0027 acutally only updated when build the source.","commit_id":"8a3fdb88b1f7d99d1b0a2f3db0a62c5a429542eb"}],"doc/source/swagger_specs/swagger_2.1.json":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"a08699c67282eab7a96ce1de3f39c8f03432f1e1","unresolved":false,"context_lines":[{"line_number":23,"context_line":"                        \"in\": \"body\", "},{"line_number":24,"context_line":"                        \"name\": \"body\", "},{"line_number":25,"context_line":"                        \"description\": \"\\n                params:\\n                    name - The name to associate with the keypair.\\n                    public_key - The public ssh key to import. If not\\n                        provided, a key is generated.\\n            \", "},{"line_number":26,"context_line":"                        \"schema\": {"},{"line_number":27,"context_line":"                            \"type\": \"object\", "},{"line_number":28,"context_line":"                            \"required\": ["},{"line_number":29,"context_line":"                                \"keypair\""}],"source_content_type":"application/json","patch_set":7,"id":"ba8a016a_aabb8ac3","line":26,"updated":"2015-11-17 09:45:17.000000000","message":"Can we change this file to python module file and import schema module like the following ?\n\n from nova.api.openstack.compute.schemas import keypairs\n [..]\n\n \"schema\": keypairs.create\n\nfor avoiding a single huge code?","commit_id":"c2747ff2b89d0a7b4c6b925e3ad93a35799a5cc1"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"91d0357844044383d4e856ea2058c3cd807f966c","unresolved":false,"context_lines":[{"line_number":23,"context_line":"                        \"in\": \"body\", "},{"line_number":24,"context_line":"                        \"name\": \"body\", "},{"line_number":25,"context_line":"                        \"description\": \"\\n                params:\\n                    name - The name to associate with the keypair.\\n                    public_key - The public ssh key to import. If not\\n                        provided, a key is generated.\\n            \", "},{"line_number":26,"context_line":"                        \"schema\": {"},{"line_number":27,"context_line":"                            \"type\": \"object\", "},{"line_number":28,"context_line":"                            \"required\": ["},{"line_number":29,"context_line":"                                \"keypair\""}],"source_content_type":"application/json","patch_set":7,"id":"ba8a016a_cbddb143","line":26,"in_reply_to":"ba8a016a_aabb8ac3","updated":"2015-11-17 10:15:12.000000000","message":"yea, let me check if there is any support for including file in swagger.","commit_id":"c2747ff2b89d0a7b4c6b925e3ad93a35799a5cc1"}],"nova/api/openstack/compute/keypairs.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5ea68025573dc8e004eb8df769fc3bec164d5416","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        fingerprint."},{"line_number":68,"context_line":"        Keypair will have the type ssh or x509, specified by type."},{"line_number":69,"context_line":"        You can send a public_key to add an existing ssh/x509 key.\"\"\")"},{"line_number":70,"context_line":"    def create(self, req, body):"},{"line_number":71,"context_line":"        # handle optional user-id for admin only"},{"line_number":72,"context_line":"        user_id \u003d body[\u0027keypair\u0027].get(\u0027user_id\u0027)"},{"line_number":73,"context_line":"        return self._create(req, body, type\u003dTrue, user_id\u003duser_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a2fa921_0b251c5b","line":70,"updated":"2015-10-13 09:41:40.000000000","message":"I wonder if we could just get the doc string using something like this:\nhttps://docs.python.org/2/library/inspect.html#inspect.getdoc\n\nRather than having to put all that text in a decorator?","commit_id":"c83e00f97f22fe5218fb145e0fec2a8c5612aab4"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"9c4f569243c90355683b118442bec8c221f4f2fb","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        Keypair will have the type ssh or x509, specified by type."},{"line_number":69,"context_line":"        You can send a public_key to add an existing ssh/x509 key.\"\"\")"},{"line_number":70,"context_line":"    def create(self, req, body):"},{"line_number":71,"context_line":"        # handle optional user-id for admin only"},{"line_number":72,"context_line":"        user_id \u003d body[\u0027keypair\u0027].get(\u0027user_id\u0027)"},{"line_number":73,"context_line":"        return self._create(req, body, type\u003dTrue, user_id\u003duser_id)"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5a2ca52d_bb5c8fee","line":71,"updated":"2015-10-13 10:06:30.000000000","message":"yea that (John idea in PS5) will be good or another idea is to keep doc string with schema. There we can add \u0027Description\u0027 element and have particular API description in its schema.","commit_id":"8a3fdb88b1f7d99d1b0a2f3db0a62c5a429542eb"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"4cc97f7841863494fbc526f56c69302651aeea26","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        Keypair will have the type ssh or x509, specified by type."},{"line_number":69,"context_line":"        You can send a public_key to add an existing ssh/x509 key.\"\"\")"},{"line_number":70,"context_line":"    def create(self, req, body):"},{"line_number":71,"context_line":"        # handle optional user-id for admin only"},{"line_number":72,"context_line":"        user_id \u003d body[\u0027keypair\u0027].get(\u0027user_id\u0027)"},{"line_number":73,"context_line":"        return self._create(req, body, type\u003dTrue, user_id\u003duser_id)"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a29b11f_bbff9933","line":71,"in_reply_to":"5a2ca52d_3baabf71","updated":"2015-10-19 05:50:35.000000000","message":"yea, I also think about just put in doc str. Let me think about more which way is more simple and easy for developer.","commit_id":"8a3fdb88b1f7d99d1b0a2f3db0a62c5a429542eb"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"2448763629e50bfc426ab449bdb78cc679cd5e20","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        Keypair will have the type ssh or x509, specified by type."},{"line_number":69,"context_line":"        You can send a public_key to add an existing ssh/x509 key.\"\"\")"},{"line_number":70,"context_line":"    def create(self, req, body):"},{"line_number":71,"context_line":"        # handle optional user-id for admin only"},{"line_number":72,"context_line":"        user_id \u003d body[\u0027keypair\u0027].get(\u0027user_id\u0027)"},{"line_number":73,"context_line":"        return self._create(req, body, type\u003dTrue, user_id\u003duser_id)"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5a2ca52d_3baabf71","line":71,"in_reply_to":"5a2ca52d_bb5c8fee","updated":"2015-10-13 10:12:01.000000000","message":"The description can just be the first line of the doc string, I think.\n\nSo it just a case of dropping the params, I think.\n\nNot sure if the translators can work with that though...","commit_id":"8a3fdb88b1f7d99d1b0a2f3db0a62c5a429542eb"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"590b40e71e38f48a62235bb79f648511245d9a8c","unresolved":false,"context_lines":[{"line_number":248,"context_line":"    @validation.schema(keypairs.index_v22)"},{"line_number":249,"context_line":"    @extensions.expected_errors(())"},{"line_number":250,"context_line":"    @wsgi.doc(summary\u003d\"List of keypairs for a user.\","},{"line_number":251,"context_line":"              description\u003d\"List of keypairs for a user.\")"},{"line_number":252,"context_line":"    def index(self, req):"},{"line_number":253,"context_line":"        return self._index(req, type\u003dTrue)"},{"line_number":254,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ba8a016a_5d597f59","line":251,"updated":"2015-11-17 12:18:28.000000000","message":"I honestly really prefer this approach.","commit_id":"8a3fdb88b1f7d99d1b0a2f3db0a62c5a429542eb"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"30954c62f9a2cbf9cb4860898ce656cde3aa9c06","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        return clean"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    @wsgi.Controller.api_version(\"2.10\")"},{"line_number":56,"context_line":"    @swagger.swagger(keypairs.create_swagger_v210)"},{"line_number":57,"context_line":"    def create(self, req, body):"},{"line_number":58,"context_line":"        # handle optional user-id for admin only"},{"line_number":59,"context_line":"        user_id \u003d body[\u0027keypair\u0027].get(\u0027user_id\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_dbaa6619","line":56,"updated":"2015-11-17 07:42:05.000000000","message":"the python code can reduce few lines, this feels more clear.","commit_id":"c2747ff2b89d0a7b4c6b925e3ad93a35799a5cc1"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"a08699c67282eab7a96ce1de3f39c8f03432f1e1","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        return clean"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    @wsgi.Controller.api_version(\"2.10\")"},{"line_number":56,"context_line":"    @swagger.swagger(keypairs.create_swagger_v210)"},{"line_number":57,"context_line":"    def create(self, req, body):"},{"line_number":58,"context_line":"        # handle optional user-id for admin only"},{"line_number":59,"context_line":"        user_id \u003d body[\u0027keypair\u0027].get(\u0027user_id\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_eac5125b","line":56,"in_reply_to":"ba8a016a_dbaa6619","updated":"2015-11-17 09:45:17.000000000","message":"Big +1 for doing that, really readable! :-)","commit_id":"c2747ff2b89d0a7b4c6b925e3ad93a35799a5cc1"}],"nova/api/openstack/compute/schemas/keypairs.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"b2d654c5f407f053beb6d3164a2f3a6e1dd5af9f","unresolved":false,"context_lines":[{"line_number":31,"context_line":"                \u0027keypair\u0027: {"},{"line_number":32,"context_line":"                    \u0027type\u0027: \u0027object\u0027,"},{"line_number":33,"context_line":"                    \u0027properties\u0027: {"},{"line_number":34,"context_line":"                        \u0027name\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":35,"context_line":"                                                  # parameter_types.name, the"},{"line_number":36,"context_line":"                                                  # huge pattern make the debug"},{"line_number":37,"context_line":"                                                  # hard, so comment temp."}],"source_content_type":"text/x-python","patch_set":6,"id":"1a26ad4f_c8bd9f69","line":34,"updated":"2015-10-30 06:45:17.000000000","message":"\u0027description\u0027: \u0027The name to associate with the keypair\u0027","commit_id":"8a3fdb88b1f7d99d1b0a2f3db0a62c5a429542eb"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"433743ded98791eb488c80fb0a0c41ccfd7f1f57","unresolved":false,"context_lines":[{"line_number":31,"context_line":"                \u0027keypair\u0027: {"},{"line_number":32,"context_line":"                    \u0027type\u0027: \u0027object\u0027,"},{"line_number":33,"context_line":"                    \u0027properties\u0027: {"},{"line_number":34,"context_line":"                        \u0027name\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":35,"context_line":"                                                  # parameter_types.name, the"},{"line_number":36,"context_line":"                                                  # huge pattern make the debug"},{"line_number":37,"context_line":"                                                  # hard, so comment temp."}],"source_content_type":"text/x-python","patch_set":6,"id":"da85f559_58b168e0","line":34,"in_reply_to":"1a26ad4f_c8bd9f69","updated":"2015-11-10 13:18:04.000000000","message":"yea, it is good for add description close the parameters.","commit_id":"8a3fdb88b1f7d99d1b0a2f3db0a62c5a429542eb"},{"author":{"_account_id":964,"name":"Anne Gentle","email":"annegentle@justwriteclick.com","username":"annegentle"},"change_message_id":"fa03c4198f059cc7e57c7fffe1d3639176c32fa2","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                        \u0027public_key\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":39,"context_line":"                    },"},{"line_number":40,"context_line":"                    \u0027required\u0027: [\u0027name\u0027],"},{"line_number":41,"context_line":"                    \u0027additionalProperties\u0027: False,"},{"line_number":42,"context_line":"                },"},{"line_number":43,"context_line":"            },"},{"line_number":44,"context_line":"            \u0027required\u0027: [\u0027keypair\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa80f949_4c58b08a","line":41,"updated":"2015-11-06 05:43:42.000000000","message":"How do you indicate that public_key is optional?","commit_id":"8a3fdb88b1f7d99d1b0a2f3db0a62c5a429542eb"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"433743ded98791eb488c80fb0a0c41ccfd7f1f57","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                        \u0027public_key\u0027: {\u0027type\u0027: \u0027string\u0027},"},{"line_number":39,"context_line":"                    },"},{"line_number":40,"context_line":"                    \u0027required\u0027: [\u0027name\u0027],"},{"line_number":41,"context_line":"                    \u0027additionalProperties\u0027: False,"},{"line_number":42,"context_line":"                },"},{"line_number":43,"context_line":"            },"},{"line_number":44,"context_line":"            \u0027required\u0027: [\u0027keypair\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"da85f559_78eb0cb1","line":41,"in_reply_to":"fa80f949_4c58b08a","updated":"2015-11-10 13:18:04.000000000","message":"That is indicated by \u0027required\u0027 field. if the the field didn\u0027t metioned in \u0027required\u0027 field, it will be optional.","commit_id":"8a3fdb88b1f7d99d1b0a2f3db0a62c5a429542eb"},{"author":{"_account_id":964,"name":"Anne Gentle","email":"annegentle@justwriteclick.com","username":"annegentle"},"change_message_id":"fa03c4198f059cc7e57c7fffe1d3639176c32fa2","unresolved":false,"context_lines":[{"line_number":238,"context_line":"    \u0027query_params\u0027: {"},{"line_number":239,"context_line":"        \u0027user_id\u0027: {"},{"line_number":240,"context_line":"            \u0027description\u0027: \u0027The user id of keypair belong to\u0027,"},{"line_number":241,"context_line":"            \u0027type\u0027: \u0027string\u0027"},{"line_number":242,"context_line":"        }"},{"line_number":243,"context_line":"    }"},{"line_number":244,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a2ca52d_d62267b9","line":241,"updated":"2015-11-06 05:43:42.000000000","message":"Rather than writing your own descriptions, I think it\u0027s better to use what is already written and reviewed, such as \"The user ID of the user who runs the operation.\" which has been published and reviewed for consistency at http://developer.openstack.org/api-ref-compute-v2.1.html#keypairs-v2.1. Looks like you\u0027ve done that above but here it is inconsistent.","commit_id":"8a3fdb88b1f7d99d1b0a2f3db0a62c5a429542eb"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"433743ded98791eb488c80fb0a0c41ccfd7f1f57","unresolved":false,"context_lines":[{"line_number":238,"context_line":"    \u0027query_params\u0027: {"},{"line_number":239,"context_line":"        \u0027user_id\u0027: {"},{"line_number":240,"context_line":"            \u0027description\u0027: \u0027The user id of keypair belong to\u0027,"},{"line_number":241,"context_line":"            \u0027type\u0027: \u0027string\u0027"},{"line_number":242,"context_line":"        }"},{"line_number":243,"context_line":"    }"},{"line_number":244,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":6,"id":"da85f559_d8f3189d","line":241,"in_reply_to":"5a2ca52d_d62267b9","updated":"2015-11-10 13:18:04.000000000","message":"yea, that is nice way, we can port the doc from old wsgi into nova code.","commit_id":"8a3fdb88b1f7d99d1b0a2f3db0a62c5a429542eb"},{"author":{"_account_id":964,"name":"Anne Gentle","email":"annegentle@justwriteclick.com","username":"annegentle"},"change_message_id":"fa03c4198f059cc7e57c7fffe1d3639176c32fa2","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        }"},{"line_number":243,"context_line":"    }"},{"line_number":244,"context_line":"}"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"index \u003d {"},{"line_number":248,"context_line":"    \u0027response\u0027: {"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa80f949_accefc2b","line":245,"updated":"2015-11-06 05:43:42.000000000","message":"There\u0027s another call, GET/v2/​{tenant_id}​/os-keypairs/​{keypair_name}​, that I don\u0027t see here. \n\nhttp://developer.openstack.org/api-ref-compute-v2-ext.html#showKeypair","commit_id":"8a3fdb88b1f7d99d1b0a2f3db0a62c5a429542eb"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"433743ded98791eb488c80fb0a0c41ccfd7f1f57","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        }"},{"line_number":243,"context_line":"    }"},{"line_number":244,"context_line":"}"},{"line_number":245,"context_line":""},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"index \u003d {"},{"line_number":248,"context_line":"    \u0027response\u0027: {"}],"source_content_type":"text/x-python","patch_set":6,"id":"da85f559_585ba887","line":245,"in_reply_to":"fa80f949_accefc2b","updated":"2015-11-10 13:18:04.000000000","message":"It is at line 198","commit_id":"8a3fdb88b1f7d99d1b0a2f3db0a62c5a429542eb"}],"nova/api/openstack/extensions.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"30954c62f9a2cbf9cb4860898ce656cde3aa9c06","unresolved":false,"context_lines":[{"line_number":472,"context_line":"    of the API to file a bug report."},{"line_number":473,"context_line":"    \"\"\""},{"line_number":474,"context_line":"    def decorator(f):"},{"line_number":475,"context_line":"        f.errors \u003d errors"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"        @functools.wraps(f)"},{"line_number":478,"context_line":"        def wrapped(*args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba8a016a_bb1d2275","line":475,"updated":"2015-11-17 07:42:05.000000000","message":"this change can be removed.","commit_id":"c2747ff2b89d0a7b4c6b925e3ad93a35799a5cc1"}]}
