)]}'
{"novaclient/api_versions.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f2f018c5f71323ecb29a0b33b06984d5fe5d1110","unresolved":false,"context_lines":[{"line_number":263,"context_line":"                if api_version.matches(m.start_version, m.end_version)]"},{"line_number":264,"context_line":"    return substitutions"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"def wraps(start_version, end_version\u003dNone):"},{"line_number":268,"context_line":"    start_version \u003d APIVersion(start_version)"},{"line_number":269,"context_line":"    if end_version:"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba3cc151_1aca4d1b","line":266,"updated":"2015-07-10 03:21:18.000000000","message":"This wraps is also used for API bit, https://review.openstack.org/#/c/136458/30/novaclient/v2/keypairs.py\n\nSo you are introduce version negotiation into API bit. This isn\u0027t our agreement right?","commit_id":"23aec09672f215099f67bf0843f0477782b1ad32"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1f8b01617bbe96ff637a78beb353510a52b78424","unresolved":false,"context_lines":[{"line_number":245,"context_line":"    version \u003d client.versions.get_current()"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    server_start_version \u003d APIVersion(version.min_version)"},{"line_number":248,"context_line":"    server_end_version \u003d APIVersion(version.version)"},{"line_number":249,"context_line":"    client_start_version \u003d APIVersion("},{"line_number":250,"context_line":"        _get_api_version_limit(client.api_version.ver_major)[\"start\"])"},{"line_number":251,"context_line":"    client_end_version \u003d APIVersion("}],"source_content_type":"text/x-python","patch_set":8,"id":"9a41bdd9_9899a57b","line":248,"updated":"2015-07-16 06:11:47.000000000","message":"you also need take care the case when server didn\u0027t support microversions","commit_id":"ccd6f423b8febcc4ae09d311f2ab254f79e17cf8"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"9b6fb003ba4ff008616edbe0cd97b55000951cd8","unresolved":false,"context_lines":[{"line_number":245,"context_line":"    version \u003d client.versions.get_current()"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    server_start_version \u003d APIVersion(version.min_version)"},{"line_number":248,"context_line":"    server_end_version \u003d APIVersion(version.version)"},{"line_number":249,"context_line":"    client_start_version \u003d APIVersion("},{"line_number":250,"context_line":"        _get_api_version_limit(client.api_version.ver_major)[\"start\"])"},{"line_number":251,"context_line":"    client_end_version \u003d APIVersion("}],"source_content_type":"text/x-python","patch_set":8,"id":"9a41bdd9_a23d572c","line":248,"in_reply_to":"9a41bdd9_9899a57b","updated":"2015-07-16 07:55:51.000000000","message":"It\u0027s implemented in next patch in a chain","commit_id":"ccd6f423b8febcc4ae09d311f2ab254f79e17cf8"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"b1f1afd42287c8182d04b96d05f943558ca4045c","unresolved":false,"context_lines":[{"line_number":276,"context_line":"    if server_start_version.is_null() and server_end_version.is_null():"},{"line_number":277,"context_line":"        return APIVersion(\u00272.0\u0027)"},{"line_number":278,"context_line":"    elif novaclient.API_MIN_VERSION \u003e server_end_version:"},{"line_number":279,"context_line":"        raise exceptions.UnsupportedVersion(_LE(\"Server version is too old.\"))"},{"line_number":280,"context_line":"    elif novaclient.API_MAX_VERSION \u003c server_start_version:"},{"line_number":281,"context_line":"        raise exceptions.UnsupportedVersion(_LE(\"Server version is too new.\"))"},{"line_number":282,"context_line":"    elif novaclient.API_MAX_VERSION \u003c\u003d server_end_version:"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a50d1a3_811eca5d","line":279,"updated":"2015-07-30 21:25:34.000000000","message":"Minor nit, but it would have been nice to put the server versions in the exception message.","commit_id":"285dad4a0ce7e8ed903761a284f0cbf904871138"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"43237394cf390ed07215cfcc8efe8aa59b789921","unresolved":false,"context_lines":[{"line_number":276,"context_line":"    if server_start_version.is_null() and server_end_version.is_null():"},{"line_number":277,"context_line":"        return APIVersion(\u00272.0\u0027)"},{"line_number":278,"context_line":"    elif novaclient.API_MIN_VERSION \u003e server_end_version:"},{"line_number":279,"context_line":"        raise exceptions.UnsupportedVersion(_LE(\"Server version is too old.\"))"},{"line_number":280,"context_line":"    elif novaclient.API_MAX_VERSION \u003c server_start_version:"},{"line_number":281,"context_line":"        raise exceptions.UnsupportedVersion(_LE(\"Server version is too new.\"))"},{"line_number":282,"context_line":"    elif novaclient.API_MAX_VERSION \u003c\u003d server_end_version:"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a50d1a3_f2faf742","line":279,"in_reply_to":"3a50d1a3_811eca5d","updated":"2015-07-31 02:01:32.000000000","message":"yea, good point, will update","commit_id":"285dad4a0ce7e8ed903761a284f0cbf904871138"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"9a47db79962cd5547f3051cd078ed79848464a87","unresolved":false,"context_lines":[{"line_number":253,"context_line":"            requested_version !\u003d APIVersion(\u00272.0\u0027)):"},{"line_number":254,"context_line":"        if server_start_version.is_null() and server_end_version.is_null():"},{"line_number":255,"context_line":"            raise exceptions.UnsupportedVersion("},{"line_number":256,"context_line":"                _(\"Server didn\u0027t support microverions\"))"},{"line_number":257,"context_line":"        if not requested_version.matches(server_start_version,"},{"line_number":258,"context_line":"                                         server_end_version):"},{"line_number":259,"context_line":"            raise exceptions.UnsupportedVersion("}],"source_content_type":"text/x-python","patch_set":16,"id":"3a50d1a3_3cb8142a","line":256,"updated":"2015-07-31 15:55:13.000000000","message":"nits: s/didn\u0027t/doesn\u0027t/ (English correction); s/microverions/microversions/ (spelling correction)","commit_id":"34577c2a6533130fc85ea1ccca94c7d4d23c2fd3"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"9a47db79962cd5547f3051cd078ed79848464a87","unresolved":false,"context_lines":[{"line_number":258,"context_line":"                                         server_end_version):"},{"line_number":259,"context_line":"            raise exceptions.UnsupportedVersion("},{"line_number":260,"context_line":"                _(\"The specified version isn\u0027t support by server. The valid \""},{"line_number":261,"context_line":"                  \"version range is \u0027%(min)s\u0027 to \u0027%(max)s\u0027\") % {"},{"line_number":262,"context_line":"                    \"min\": server_start_version.get_string(),"},{"line_number":263,"context_line":"                    \"max\": server_end_version.get_string()})"},{"line_number":264,"context_line":"        return requested_version"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a50d1a3_5c8ac065","line":261,"updated":"2015-07-31 15:55:13.000000000","message":"nit: s/support/supported/ (English correction)","commit_id":"34577c2a6533130fc85ea1ccca94c7d4d23c2fd3"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"9a47db79962cd5547f3051cd078ed79848464a87","unresolved":false,"context_lines":[{"line_number":270,"context_line":"            return APIVersion(\u00272.0\u0027)"},{"line_number":271,"context_line":"        else:"},{"line_number":272,"context_line":"            raise exceptions.UnsupportedVersion("},{"line_number":273,"context_line":"                _(\"The server didn\u0027t backward compatible with Nova V2 REST \""},{"line_number":274,"context_line":"                  \"API\"))"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    if server_start_version.is_null() and server_end_version.is_null():"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a50d1a3_3ce6d444","line":273,"updated":"2015-07-31 15:55:13.000000000","message":"nit: s/didn\u0027t/isn\u0027t/ (English correction)","commit_id":"34577c2a6533130fc85ea1ccca94c7d4d23c2fd3"}],"novaclient/shell.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"16d51d0b351d3c2509f5fcd40410af828d1a0780","unresolved":false,"context_lines":[{"line_number":404,"context_line":"            metavar\u003d\u0027\u003ccompute-api-ver\u003e\u0027,"},{"line_number":405,"context_line":"            default\u003dcliutils.env(\u0027OS_COMPUTE_API_VERSION\u0027,"},{"line_number":406,"context_line":"                                 default\u003dDEFAULT_OS_COMPUTE_API_VERSION),"},{"line_number":407,"context_line":"            help\u003d_(\u0027Accepts X, X.Y (where X is major and Y is minor part), \u0027"},{"line_number":408,"context_line":"                   \u0027defaults to env[OS_COMPUTE_API_VERSION].\u0027))"},{"line_number":409,"context_line":"        parser.add_argument("},{"line_number":410,"context_line":"            \u0027--os_compute_api_version\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a41bdd9_98b3e54c","line":407,"updated":"2015-07-16 06:08:40.000000000","message":"you didn\u0027t say you support \u0027latest\u0027","commit_id":"ccd6f423b8febcc4ae09d311f2ab254f79e17cf8"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"d5cd16ea25d18b7d3056d2ef2ef006daf896e7f2","unresolved":false,"context_lines":[{"line_number":404,"context_line":"            metavar\u003d\u0027\u003ccompute-api-ver\u003e\u0027,"},{"line_number":405,"context_line":"            default\u003dcliutils.env(\u0027OS_COMPUTE_API_VERSION\u0027,"},{"line_number":406,"context_line":"                                 default\u003dDEFAULT_OS_COMPUTE_API_VERSION),"},{"line_number":407,"context_line":"            help\u003d_(\u0027Accepts X, X.Y (where X is major and Y is minor part), \u0027"},{"line_number":408,"context_line":"                   \u0027defaults to env[OS_COMPUTE_API_VERSION].\u0027))"},{"line_number":409,"context_line":"        parser.add_argument("},{"line_number":410,"context_line":"            \u0027--os_compute_api_version\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a41bdd9_caff4564","line":407,"in_reply_to":"9a41bdd9_98b3e54c","updated":"2015-07-16 13:08:28.000000000","message":"Done","commit_id":"ccd6f423b8febcc4ae09d311f2ab254f79e17cf8"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"9b6fb003ba4ff008616edbe0cd97b55000951cd8","unresolved":false,"context_lines":[{"line_number":404,"context_line":"            metavar\u003d\u0027\u003ccompute-api-ver\u003e\u0027,"},{"line_number":405,"context_line":"            default\u003dcliutils.env(\u0027OS_COMPUTE_API_VERSION\u0027,"},{"line_number":406,"context_line":"                                 default\u003dDEFAULT_OS_COMPUTE_API_VERSION),"},{"line_number":407,"context_line":"            help\u003d_(\u0027Accepts X, X.Y (where X is major and Y is minor part), \u0027"},{"line_number":408,"context_line":"                   \u0027defaults to env[OS_COMPUTE_API_VERSION].\u0027))"},{"line_number":409,"context_line":"        parser.add_argument("},{"line_number":410,"context_line":"            \u0027--os_compute_api_version\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a41bdd9_4276cb06","line":407,"in_reply_to":"9a41bdd9_98b3e54c","updated":"2015-07-16 07:55:51.000000000","message":"Support of \"latest\" version is a secret:)\n\nPS: will be fixed in next patch-set","commit_id":"ccd6f423b8febcc4ae09d311f2ab254f79e17cf8"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"16d51d0b351d3c2509f5fcd40410af828d1a0780","unresolved":false,"context_lines":[{"line_number":542,"context_line":"        # Discover available auth plugins"},{"line_number":543,"context_line":"        novaclient.auth_plugin.discover_auth_systems()"},{"line_number":544,"context_line":""},{"line_number":545,"context_line":"        if options.os_compute_api_version \u003d\u003d \"latest\":"},{"line_number":546,"context_line":"            api_version \u003d api_versions.get_api_version("},{"line_number":547,"context_line":"                DEFAULT_OS_COMPUTE_API_MAJOR_VERSION)"},{"line_number":548,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a41bdd9_b89909c6","line":545,"updated":"2015-07-16 06:08:40.000000000","message":"please check the comment at line 408","commit_id":"ccd6f423b8febcc4ae09d311f2ab254f79e17cf8"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"16d51d0b351d3c2509f5fcd40410af828d1a0780","unresolved":false,"context_lines":[{"line_number":754,"context_line":"        if options.os_compute_api_version \u003d\u003d \"latest\":"},{"line_number":755,"context_line":"            api_version \u003d api_versions.discover_latest(self.cs)"},{"line_number":756,"context_line":"            self.cs.api_version \u003d api_version"},{"line_number":757,"context_line":"            self.cs.client.api_version \u003d api_version"},{"line_number":758,"context_line":""},{"line_number":759,"context_line":"        try:"},{"line_number":760,"context_line":"            # This does a couple of bits which are useful even if we\u0027ve"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a41bdd9_583d5d8d","line":757,"updated":"2015-07-16 06:08:40.000000000","message":"is it late for discover sub command at line 564?","commit_id":"ccd6f423b8febcc4ae09d311f2ab254f79e17cf8"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"d5cd16ea25d18b7d3056d2ef2ef006daf896e7f2","unresolved":false,"context_lines":[{"line_number":754,"context_line":"        if options.os_compute_api_version \u003d\u003d \"latest\":"},{"line_number":755,"context_line":"            api_version \u003d api_versions.discover_latest(self.cs)"},{"line_number":756,"context_line":"            self.cs.api_version \u003d api_version"},{"line_number":757,"context_line":"            self.cs.client.api_version \u003d api_version"},{"line_number":758,"context_line":""},{"line_number":759,"context_line":"        try:"},{"line_number":760,"context_line":"            # This does a couple of bits which are useful even if we\u0027ve"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a41bdd9_d26057a7","line":757,"in_reply_to":"9a41bdd9_583d5d8d","updated":"2015-07-16 13:08:28.000000000","message":"We can\u0027t put this code before L564, since we need all checks above to create client object, but we can launch discover subcommands one more time here.","commit_id":"ccd6f423b8febcc4ae09d311f2ab254f79e17cf8"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"e1d0063342cf46e0a10cc9edf1bacfaa59a6511e","unresolved":false,"context_lines":[{"line_number":758,"context_line":""},{"line_number":759,"context_line":"            # Recheck arguments based on discovered version"},{"line_number":760,"context_line":"            subcommand_parser \u003d self.get_subcommand_parser("},{"line_number":761,"context_line":"                api_version, do_help\u003dFalse)"},{"line_number":762,"context_line":"            self.parser \u003d subcommand_parser"},{"line_number":763,"context_line":"            args \u003d subcommand_parser.parse_args(argv)"},{"line_number":764,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3a50d1a3_e859a38f","line":761,"updated":"2015-07-25 06:38:04.000000000","message":"I found this is buggy with parse subcommand double times. The reason is probably argparse use global varable. After parse subcommand second, the subcommand discovered by first time parse still existed at here.","commit_id":"97a063698093b74164e0d91c810f2f87bce484e2"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"b1f1afd42287c8182d04b96d05f943558ca4045c","unresolved":false,"context_lines":[{"line_number":743,"context_line":"        args \u003d subcommand_parser.parse_args(argv)"},{"line_number":744,"context_line":"        self._run_extension_hooks(\u0027__post_parse_args__\u0027, args)"},{"line_number":745,"context_line":""},{"line_number":746,"context_line":"        # Short-circuit and deal with help right away."},{"line_number":747,"context_line":"        if args.func \u003d\u003d self.do_help:"},{"line_number":748,"context_line":"            self.do_help(args)"},{"line_number":749,"context_line":"            return 0"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a50d1a3_e1d6ae26","line":746,"updated":"2015-07-30 21:25:34.000000000","message":"Why has this been moved here rather than doing it above?  This appears to have been moved purposely but it\u0027s not clear to me why.","commit_id":"285dad4a0ce7e8ed903761a284f0cbf904871138"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"43237394cf390ed07215cfcc8efe8aa59b789921","unresolved":false,"context_lines":[{"line_number":743,"context_line":"        args \u003d subcommand_parser.parse_args(argv)"},{"line_number":744,"context_line":"        self._run_extension_hooks(\u0027__post_parse_args__\u0027, args)"},{"line_number":745,"context_line":""},{"line_number":746,"context_line":"        # Short-circuit and deal with help right away."},{"line_number":747,"context_line":"        if args.func \u003d\u003d self.do_help:"},{"line_number":748,"context_line":"            self.do_help(args)"},{"line_number":749,"context_line":"            return 0"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a50d1a3_f2a8b722","line":746,"in_reply_to":"3a50d1a3_e1d6ae26","updated":"2015-07-31 02:01:32.000000000","message":"The main reason is we have to parse subcommand after discover version. Then we can get expected subcommand based on discovered version. So the subcommand is move to line 735, then do_help have to move at here also.","commit_id":"285dad4a0ce7e8ed903761a284f0cbf904871138"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"9a47db79962cd5547f3051cd078ed79848464a87","unresolved":false,"context_lines":[{"line_number":720,"context_line":"                    if not api_version.matches(novaclient.API_MIN_VERSION,"},{"line_number":721,"context_line":"                                               novaclient.API_MAX_VERSION):"},{"line_number":722,"context_line":"                        raise exc.CommandError("},{"line_number":723,"context_line":"                            _(\"The specified version isn\u0027t support by client. \""},{"line_number":724,"context_line":"                              \"The valid version range is \u0027%(min)s\u0027 to \""},{"line_number":725,"context_line":"                              \"\u0027%(max)s\u0027\") % {"},{"line_number":726,"context_line":"                                \"min\": novaclient.API_MIN_VERSION.get_string(),"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a50d1a3_bc3f4486","line":723,"updated":"2015-07-31 15:55:13.000000000","message":"nit: s/support/supported/ (English correction)","commit_id":"34577c2a6533130fc85ea1ccca94c7d4d23c2fd3"}]}
