)]}'
{"novaclient/__init__.py":[{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"b4b03edcd8d9d24930fb3daaf914fdcedfdade6a","unresolved":false,"context_lines":[{"line_number":25,"context_line":"# when client supported the max version, and bumped sequentially, otherwise"},{"line_number":26,"context_line":"# the client may break due to server side new version may include some"},{"line_number":27,"context_line":"# backward incompatible change."},{"line_number":28,"context_line":"API_MAX_VERSION \u003d api_versions.APIVersion(\"2.35\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_4878e42b","line":28,"range":{"start_line":28,"start_character":43,"end_line":28,"end_character":47},"updated":"2016-07-19 12:32:42.000000000","message":"will be rebases after","commit_id":"ef174840035c2171748a2a66bc7010aa55aa239d"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"56467b63fb1d29e05fa6503a88146814ab25f62a","unresolved":false,"context_lines":[{"line_number":25,"context_line":"# when client supported the max version, and bumped sequentially, otherwise"},{"line_number":26,"context_line":"# the client may break due to server side new version may include some"},{"line_number":27,"context_line":"# backward incompatible change."},{"line_number":28,"context_line":"API_MAX_VERSION \u003d api_versions.APIVersion(\"2.35\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_ca8e66cf","line":28,"range":{"start_line":28,"start_character":43,"end_line":28,"end_character":47},"in_reply_to":"dada55a8_4878e42b","updated":"2016-08-04 12:43:14.000000000","message":"Done","commit_id":"ef174840035c2171748a2a66bc7010aa55aa239d"}],"novaclient/tests/unit/v2/test_keypairs.py":[{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"b4b03edcd8d9d24930fb3daaf914fdcedfdade6a","unresolved":false,"context_lines":[{"line_number":121,"context_line":"    def test_list_keypairs(self):"},{"line_number":122,"context_line":"        kps \u003d self.cs.keypairs.list(user_id\u003d\u0027test_user\u0027, marker\u003d\u0027test_kp\u0027,"},{"line_number":123,"context_line":"                                    limit\u003d3)"},{"line_number":124,"context_line":"        self.assert_request_id(kps, fakes.FAKE_REQUEST_ID_LIST)"},{"line_number":125,"context_line":"        self.assert_called(\u0027GET\u0027,"},{"line_number":126,"context_line":"                           \u0027/%s?limit\u003d3\u0026marker\u003dtest_kp\u0026user_id\u003dtest_user\u0027"},{"line_number":127,"context_line":"                           % self.keypair_prefix)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_a81b601a","line":124,"range":{"start_line":124,"start_character":8,"end_line":124,"end_character":63},"updated":"2016-07-19 12:32:42.000000000","message":"not sure what is it","commit_id":"ef174840035c2171748a2a66bc7010aa55aa239d"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"b4b03edcd8d9d24930fb3daaf914fdcedfdade6a","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        self.assert_called(\u0027GET\u0027,"},{"line_number":126,"context_line":"                           \u0027/%s?limit\u003d3\u0026marker\u003dtest_kp\u0026user_id\u003dtest_user\u0027"},{"line_number":127,"context_line":"                           % self.keypair_prefix)"},{"line_number":128,"context_line":"        for kp in kps:"},{"line_number":129,"context_line":"            self.assertIsInstance(kp, keypairs.Keypair)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_68fa08bf","line":129,"range":{"start_line":128,"start_character":8,"end_line":129,"end_character":55},"updated":"2016-07-19 12:32:42.000000000","message":"not actually needed","commit_id":"ef174840035c2171748a2a66bc7010aa55aa239d"}],"novaclient/tests/unit/v2/test_shell.py":[{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"b4b03edcd8d9d24930fb3daaf914fdcedfdade6a","unresolved":false,"context_lines":[{"line_number":2869,"context_line":"        self.assert_called(\u0027GET\u0027, \u0027/os-keypairs\u0027)"},{"line_number":2870,"context_line":""},{"line_number":2871,"context_line":"    def test_keypair_list_with_user_id(self):"},{"line_number":2872,"context_line":"        self.run_command(\u0027keypair-list --user test_user\u0027, api_version\u003d\u00272.10\u0027)"},{"line_number":2873,"context_line":"        self.assert_called(\u0027GET\u0027, \u0027/os-keypairs?user_id\u003dtest_user\u0027)"},{"line_number":2874,"context_line":""},{"line_number":2875,"context_line":"    def test_keypair_list_with_limit_and_marker(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_c8d69426","line":2872,"range":{"start_line":2872,"start_character":58,"end_line":2872,"end_character":76},"updated":"2016-07-19 12:32:42.000000000","message":"added, because didn\u0027t find such test here","commit_id":"ef174840035c2171748a2a66bc7010aa55aa239d"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"b7365106f9ca50c6bee76e32313c2d89254f4419","unresolved":false,"context_lines":[{"line_number":2945,"context_line":"            32,  # doesn\u0027t require separate version-wrapped methods in"},{"line_number":2946,"context_line":"                 # novaclient"},{"line_number":2947,"context_line":"            34,  # doesn\u0027t require any changes in novaclient"},{"line_number":2948,"context_line":"            35,  # added keypairs pagination support"},{"line_number":2949,"context_line":"        ])"},{"line_number":2950,"context_line":"        versions_supported \u003d set(range(0,"},{"line_number":2951,"context_line":"                                 novaclient.API_MAX_VERSION.ver_minor + 1))"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_a4a237fa","line":2948,"updated":"2016-08-04 16:45:28.000000000","message":"So microversion 35 adds no testable changes to novaclient?  That doesn\u0027t seem right.","commit_id":"493833ef095c38f975d353c2183482f516df683e"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"a94e72f568554827c6cbccfc2b5ae15f9831cbe3","unresolved":false,"context_lines":[{"line_number":2945,"context_line":"            32,  # doesn\u0027t require separate version-wrapped methods in"},{"line_number":2946,"context_line":"                 # novaclient"},{"line_number":2947,"context_line":"            34,  # doesn\u0027t require any changes in novaclient"},{"line_number":2948,"context_line":"            35,  # added keypairs pagination support"},{"line_number":2949,"context_line":"        ])"},{"line_number":2950,"context_line":"        versions_supported \u003d set(range(0,"},{"line_number":2951,"context_line":"                                 novaclient.API_MAX_VERSION.ver_minor + 1))"}],"source_content_type":"text/x-python","patch_set":3,"id":"bacf61ea_4684000a","line":2948,"in_reply_to":"bacf61ea_a4a237fa","updated":"2016-08-05 09:08:10.000000000","message":"it is tested, sorry) I think this is what we test but now I see these are exclusions)","commit_id":"493833ef095c38f975d353c2183482f516df683e"}],"novaclient/v2/keypairs.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"f38f8df14d74141b4bfc908afb13d36cf6e3bb43","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        if marker:"},{"line_number":195,"context_line":"            params[\u0027marker\u0027] \u003d str(marker)"},{"line_number":196,"context_line":"        params \u003d sorted(params.items(), key\u003dlambda x: x[0])"},{"line_number":197,"context_line":"        query_string \u003d \u0027?%s\u0027 % parse.urlencode(params) if params else \u0027\u0027"},{"line_number":198,"context_line":"        url \u003d \u0027/%s%s\u0027 % (self.keypair_prefix, query_string)"},{"line_number":199,"context_line":"        return self._list(url, \u0027keypairs\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_b496f791","line":197,"range":{"start_line":197,"start_character":8,"end_line":197,"end_character":72},"updated":"2016-08-04 11:53:36.000000000","message":"you can use https://github.com/openstack/python-novaclient/blob/master/novaclient/utils.py#L471-L474 instead","commit_id":"ef174840035c2171748a2a66bc7010aa55aa239d"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"56467b63fb1d29e05fa6503a88146814ab25f62a","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        if marker:"},{"line_number":195,"context_line":"            params[\u0027marker\u0027] \u003d str(marker)"},{"line_number":196,"context_line":"        params \u003d sorted(params.items(), key\u003dlambda x: x[0])"},{"line_number":197,"context_line":"        query_string \u003d \u0027?%s\u0027 % parse.urlencode(params) if params else \u0027\u0027"},{"line_number":198,"context_line":"        url \u003d \u0027/%s%s\u0027 % (self.keypair_prefix, query_string)"},{"line_number":199,"context_line":"        return self._list(url, \u0027keypairs\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_6a6dba03","line":197,"range":{"start_line":197,"start_character":8,"end_line":197,"end_character":72},"in_reply_to":"bacf61ea_b496f791","updated":"2016-08-04 12:43:14.000000000","message":"thanks, done","commit_id":"ef174840035c2171748a2a66bc7010aa55aa239d"}],"novaclient/v2/shell.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"f38f8df14d74141b4bfc908afb13d36cf6e3bb43","unresolved":false,"context_lines":[{"line_number":3125,"context_line":"    \u0027--user\u0027,"},{"line_number":3126,"context_line":"    metavar\u003d\u0027\u003cuser-id\u003e\u0027,"},{"line_number":3127,"context_line":"    default\u003dNone,"},{"line_number":3128,"context_line":"    help\u003d_(\u0027List key-pairs of specified user ID (Admin only).\u0027),"},{"line_number":3129,"context_line":"    start_version\u003d\"2.10\")"},{"line_number":3130,"context_line":"def do_keypair_list(cs, args):"},{"line_number":3131,"context_line":"    \"\"\"Print a list of keypairs for a user\"\"\""},{"line_number":3132,"context_line":"    keypairs \u003d cs.keypairs.list(args.user)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_7458fffa","line":3129,"range":{"start_line":3128,"start_character":63,"end_line":3129,"end_character":24},"updated":"2016-08-04 11:53:36.000000000","message":"it is not needed","commit_id":"ef174840035c2171748a2a66bc7010aa55aa239d"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"56467b63fb1d29e05fa6503a88146814ab25f62a","unresolved":false,"context_lines":[{"line_number":3125,"context_line":"    \u0027--user\u0027,"},{"line_number":3126,"context_line":"    metavar\u003d\u0027\u003cuser-id\u003e\u0027,"},{"line_number":3127,"context_line":"    default\u003dNone,"},{"line_number":3128,"context_line":"    help\u003d_(\u0027List key-pairs of specified user ID (Admin only).\u0027),"},{"line_number":3129,"context_line":"    start_version\u003d\"2.10\")"},{"line_number":3130,"context_line":"def do_keypair_list(cs, args):"},{"line_number":3131,"context_line":"    \"\"\"Print a list of keypairs for a user\"\"\""},{"line_number":3132,"context_line":"    keypairs \u003d cs.keypairs.list(args.user)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_aa77b2d2","line":3129,"range":{"start_line":3128,"start_character":63,"end_line":3129,"end_character":24},"in_reply_to":"bacf61ea_7458fffa","updated":"2016-08-04 12:43:14.000000000","message":"Done","commit_id":"ef174840035c2171748a2a66bc7010aa55aa239d"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"f38f8df14d74141b4bfc908afb13d36cf6e3bb43","unresolved":false,"context_lines":[{"line_number":3139,"context_line":"    \u0027--user\u0027,"},{"line_number":3140,"context_line":"    metavar\u003d\u0027\u003cuser-id\u003e\u0027,"},{"line_number":3141,"context_line":"    default\u003dNone,"},{"line_number":3142,"context_line":"    help\u003d_(\u0027List key-pairs of specified user ID (Admin only).\u0027),"},{"line_number":3143,"context_line":"    start_version\u003d\"2.10\")"},{"line_number":3144,"context_line":"@utils.arg("},{"line_number":3145,"context_line":"    \u0027--marker\u0027,"},{"line_number":3146,"context_line":"    dest\u003d\u0027marker\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_74f3df0a","line":3143,"range":{"start_line":3142,"start_character":63,"end_line":3143,"end_character":24},"updated":"2016-08-04 11:53:36.000000000","message":"it is not needed since whole method is wrapped by api_versions.wraps decorator.","commit_id":"ef174840035c2171748a2a66bc7010aa55aa239d"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"56467b63fb1d29e05fa6503a88146814ab25f62a","unresolved":false,"context_lines":[{"line_number":3139,"context_line":"    \u0027--user\u0027,"},{"line_number":3140,"context_line":"    metavar\u003d\u0027\u003cuser-id\u003e\u0027,"},{"line_number":3141,"context_line":"    default\u003dNone,"},{"line_number":3142,"context_line":"    help\u003d_(\u0027List key-pairs of specified user ID (Admin only).\u0027),"},{"line_number":3143,"context_line":"    start_version\u003d\"2.10\")"},{"line_number":3144,"context_line":"@utils.arg("},{"line_number":3145,"context_line":"    \u0027--marker\u0027,"},{"line_number":3146,"context_line":"    dest\u003d\u0027marker\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_ca7ca6b7","line":3143,"range":{"start_line":3142,"start_character":63,"end_line":3143,"end_character":24},"in_reply_to":"bacf61ea_74f3df0a","updated":"2016-08-04 12:43:14.000000000","message":"Done","commit_id":"ef174840035c2171748a2a66bc7010aa55aa239d"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"b4b03edcd8d9d24930fb3daaf914fdcedfdade6a","unresolved":false,"context_lines":[{"line_number":3146,"context_line":"    dest\u003d\u0027marker\u0027,"},{"line_number":3147,"context_line":"    metavar\u003d\u0027\u003cmarker\u003e\u0027,"},{"line_number":3148,"context_line":"    default\u003dNone,"},{"line_number":3149,"context_line":"    help\u003d_(\u0027The last keypair NAME of the previous page; displays list of \u0027"},{"line_number":3150,"context_line":"           \u0027keypairs after \"marker\".\u0027),"},{"line_number":3151,"context_line":"    start_version\u003d\"2.35\")"},{"line_number":3152,"context_line":"@utils.arg("}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_48caa46f","line":3149,"range":{"start_line":3149,"start_character":29,"end_line":3149,"end_character":33},"updated":"2016-07-19 12:32:42.000000000","message":"actually this is NAME, but in nova api-ref we decided to refuse using this word and wrote just \u0027last keypair, last item\u0027","commit_id":"ef174840035c2171748a2a66bc7010aa55aa239d"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"56467b63fb1d29e05fa6503a88146814ab25f62a","unresolved":false,"context_lines":[{"line_number":3146,"context_line":"    dest\u003d\u0027marker\u0027,"},{"line_number":3147,"context_line":"    metavar\u003d\u0027\u003cmarker\u003e\u0027,"},{"line_number":3148,"context_line":"    default\u003dNone,"},{"line_number":3149,"context_line":"    help\u003d_(\u0027The last keypair NAME of the previous page; displays list of \u0027"},{"line_number":3150,"context_line":"           \u0027keypairs after \"marker\".\u0027),"},{"line_number":3151,"context_line":"    start_version\u003d\"2.35\")"},{"line_number":3152,"context_line":"@utils.arg("}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_aa5e9242","line":3149,"range":{"start_line":3149,"start_character":29,"end_line":3149,"end_character":33},"in_reply_to":"dada55a8_48caa46f","updated":"2016-08-04 12:43:14.000000000","message":"decided to remove the word NAME here","commit_id":"ef174840035c2171748a2a66bc7010aa55aa239d"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"f38f8df14d74141b4bfc908afb13d36cf6e3bb43","unresolved":false,"context_lines":[{"line_number":3147,"context_line":"    metavar\u003d\u0027\u003cmarker\u003e\u0027,"},{"line_number":3148,"context_line":"    default\u003dNone,"},{"line_number":3149,"context_line":"    help\u003d_(\u0027The last keypair NAME of the previous page; displays list of \u0027"},{"line_number":3150,"context_line":"           \u0027keypairs after \"marker\".\u0027),"},{"line_number":3151,"context_line":"    start_version\u003d\"2.35\")"},{"line_number":3152,"context_line":"@utils.arg("},{"line_number":3153,"context_line":"    \u0027--limit\u0027,"},{"line_number":3154,"context_line":"    dest\u003d\u0027limit\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_94d81381","line":3151,"range":{"start_line":3150,"start_character":38,"end_line":3151,"end_character":24},"updated":"2016-08-04 11:53:36.000000000","message":"same here","commit_id":"ef174840035c2171748a2a66bc7010aa55aa239d"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"56467b63fb1d29e05fa6503a88146814ab25f62a","unresolved":false,"context_lines":[{"line_number":3147,"context_line":"    metavar\u003d\u0027\u003cmarker\u003e\u0027,"},{"line_number":3148,"context_line":"    default\u003dNone,"},{"line_number":3149,"context_line":"    help\u003d_(\u0027The last keypair NAME of the previous page; displays list of \u0027"},{"line_number":3150,"context_line":"           \u0027keypairs after \"marker\".\u0027),"},{"line_number":3151,"context_line":"    start_version\u003d\"2.35\")"},{"line_number":3152,"context_line":"@utils.arg("},{"line_number":3153,"context_line":"    \u0027--limit\u0027,"},{"line_number":3154,"context_line":"    dest\u003d\u0027limit\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_ea588a58","line":3151,"range":{"start_line":3150,"start_character":38,"end_line":3151,"end_character":24},"in_reply_to":"bacf61ea_94d81381","updated":"2016-08-04 12:43:14.000000000","message":"Done","commit_id":"ef174840035c2171748a2a66bc7010aa55aa239d"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"f38f8df14d74141b4bfc908afb13d36cf6e3bb43","unresolved":false,"context_lines":[{"line_number":3158,"context_line":"    help\u003d_(\"Maximum number of keypairs to display. If limit \u003d\u003d -1, all \""},{"line_number":3159,"context_line":"           \"keypairs will be displayed. If limit is bigger than \""},{"line_number":3160,"context_line":"           \"\u0027osapi_max_limit\u0027 option of Nova API, limit \u0027osapi_max_limit\u0027 \""},{"line_number":3161,"context_line":"           \"will be used instead.\"),"},{"line_number":3162,"context_line":"    start_version\u003d\"2.35\")"},{"line_number":3163,"context_line":"def do_keypair_list(cs, args):"},{"line_number":3164,"context_line":"    \"\"\"Print a list of keypairs for a user\"\"\""},{"line_number":3165,"context_line":"    keypairs \u003d cs.keypairs.list(args.user, args.marker, args.limit)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_14d38360","line":3162,"range":{"start_line":3161,"start_character":35,"end_line":3162,"end_character":24},"updated":"2016-08-04 11:53:36.000000000","message":"same here","commit_id":"ef174840035c2171748a2a66bc7010aa55aa239d"},{"author":{"_account_id":10618,"name":"Pavel Kholkin","email":"p.v.holkin@mail.ru","username":"pkholkin"},"change_message_id":"56467b63fb1d29e05fa6503a88146814ab25f62a","unresolved":false,"context_lines":[{"line_number":3158,"context_line":"    help\u003d_(\"Maximum number of keypairs to display. If limit \u003d\u003d -1, all \""},{"line_number":3159,"context_line":"           \"keypairs will be displayed. If limit is bigger than \""},{"line_number":3160,"context_line":"           \"\u0027osapi_max_limit\u0027 option of Nova API, limit \u0027osapi_max_limit\u0027 \""},{"line_number":3161,"context_line":"           \"will be used instead.\"),"},{"line_number":3162,"context_line":"    start_version\u003d\"2.35\")"},{"line_number":3163,"context_line":"def do_keypair_list(cs, args):"},{"line_number":3164,"context_line":"    \"\"\"Print a list of keypairs for a user\"\"\""},{"line_number":3165,"context_line":"    keypairs \u003d cs.keypairs.list(args.user, args.marker, args.limit)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bacf61ea_2a31020c","line":3162,"range":{"start_line":3161,"start_character":35,"end_line":3162,"end_character":24},"in_reply_to":"bacf61ea_14d38360","updated":"2016-08-04 12:43:14.000000000","message":"Done","commit_id":"ef174840035c2171748a2a66bc7010aa55aa239d"}]}
