)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"2530fc3dad4e9e501ed73ac4d9142659a324f1c9","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Now, \"cinder help subcommand\" can not show whether an argument"},{"line_number":10,"context_line":"is supported for a specific microversion."},{"line_number":11,"context_line":"With this change, developers only need to add a start_versin or"},{"line_number":12,"context_line":"end_version in the utils.arg wrap, cinderclient will support"},{"line_number":13,"context_line":"the microversion for that arguement."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"bacf61ea_8cee6b89","line":11,"range":{"start_line":11,"start_character":54,"end_line":11,"end_character":60},"updated":"2016-08-03 23:25:52.000000000","message":"nit: s/versin/version","commit_id":"ff01577ae1d1d85242902e07d6e67986bcb72b69"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"6376058ccb37b41c2d09e0bf0590ae3f9ed9fc45","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Now, \"cinder help subcommand\" can not show whether an argument"},{"line_number":10,"context_line":"is supported for a specific microversion."},{"line_number":11,"context_line":"With this change, developers only need to add a start_versin or"},{"line_number":12,"context_line":"end_version in the utils.arg wrap, cinderclient will support"},{"line_number":13,"context_line":"the microversion for that arguement."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"bacf61ea_e2cc4363","line":11,"range":{"start_line":11,"start_character":54,"end_line":11,"end_character":60},"in_reply_to":"bacf61ea_8cee6b89","updated":"2016-08-04 07:33:08.000000000","message":"Done","commit_id":"ff01577ae1d1d85242902e07d6e67986bcb72b69"}],"cinderclient/api_versions.py":[{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"a6ac59c6d4c7d89a83b5a30914aa1ce6d7ca2e90","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        an APIVersion object results in the same version."},{"line_number":160,"context_line":"        \"\"\""},{"line_number":161,"context_line":"        if self.is_null():"},{"line_number":162,"context_line":"            return \"*.*\""},{"line_number":163,"context_line":"        elif self.is_latest():"},{"line_number":164,"context_line":"            return \"%s.%s\" % (self.ver_major, \"latest\")"},{"line_number":165,"context_line":"        return \"%s.%s\" % (self.ver_major, self.ver_minor)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad45d7e_15503831","line":162,"updated":"2016-08-11 21:17:51.000000000","message":"Why are you changing this from an exception to return this string?","commit_id":"2e54cc2fb278f1b5aac49b1f740fc0f212e074d2"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"d2ffb5b9077ad2ed5e3511c3afeb234616bbff84","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        an APIVersion object results in the same version."},{"line_number":160,"context_line":"        \"\"\""},{"line_number":161,"context_line":"        if self.is_null():"},{"line_number":162,"context_line":"            return \"*.*\""},{"line_number":163,"context_line":"        elif self.is_latest():"},{"line_number":164,"context_line":"            return \"%s.%s\" % (self.ver_major, \"latest\")"},{"line_number":165,"context_line":"        return \"%s.%s\" % (self.ver_major, self.ver_minor)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad45d7e_e49a1713","line":162,"in_reply_to":"9ad45d7e_15503831","updated":"2016-08-11 21:33:28.000000000","message":"See Gorka\u0027s comment on line 494 here https://review.openstack.org/#/c/340129/8/cinderclient/shell.py\n\nBasically we return this string to represent any microversion in the help message, e.g. works for microversion 3.1 to *.*. If it threw an exception here then getting the help for an arg that has a start version but no end version would throw this exception, because the end version would be null when it tries to get the string.\n\nNow you\u0027ve made me think that this might be a bit confusing though, because *.* implies anything so maybe 3.1 to *.* could mean 3.1 - 1.0 even... Do you think it\u0027s implied enough that start -\u003e end would mean 3.1 or greater?","commit_id":"2e54cc2fb278f1b5aac49b1f740fc0f212e074d2"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"72f6534b85169eced7b04877393a51164ee9471f","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        an APIVersion object results in the same version."},{"line_number":160,"context_line":"        \"\"\""},{"line_number":161,"context_line":"        if self.is_null():"},{"line_number":162,"context_line":"            return \"*.*\""},{"line_number":163,"context_line":"        elif self.is_latest():"},{"line_number":164,"context_line":"            return \"%s.%s\" % (self.ver_major, \"latest\")"},{"line_number":165,"context_line":"        return \"%s.%s\" % (self.ver_major, self.ver_minor)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9ad45d7e_b8a79ca5","line":162,"updated":"2016-08-11 22:44:32.000000000","message":"Maybe \nif self.is_null():\n  return NUll\nthen you can check for this in the consumer of the method and act accordingly","commit_id":"4ea9bafbd35884ab18b636b4d20007f1d80ec1ab"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"6fc38115310f11f93bdba7e71d44d11609618235","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        an APIVersion object results in the same version."},{"line_number":160,"context_line":"        \"\"\""},{"line_number":161,"context_line":"        if self.is_null():"},{"line_number":162,"context_line":"            return \"*.*\""},{"line_number":163,"context_line":"        elif self.is_latest():"},{"line_number":164,"context_line":"            return \"%s.%s\" % (self.ver_major, \"latest\")"},{"line_number":165,"context_line":"        return \"%s.%s\" % (self.ver_major, self.ver_minor)"}],"source_content_type":"text/x-python","patch_set":13,"id":"9ad45d7e_e5131f63","line":162,"in_reply_to":"9ad45d7e_b8a79ca5","updated":"2016-08-12 07:49:29.000000000","message":"I disagree, here a \"null\" value represents that there is no restriction on the version and it\u0027s a catch all APIVersion instance, but that should also have a proper string representation.\n\nMaybe *.* is not the best one, I admit it, but I can\u0027t think of a better one, since other alternatives I can think of would be even more problematic (\"any\", \"-\", \"·\").","commit_id":"4ea9bafbd35884ab18b636b4d20007f1d80ec1ab"}],"cinderclient/exceptions.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5f12f7d112ce5f0cc21430db6d083439e62fd180","unresolved":false,"context_lines":[{"line_number":31,"context_line":"class UnsupportedAttribute(AttributeError):"},{"line_number":32,"context_line":"    \"\"\"Indicates that the user is trying to transmit the argument to a method,"},{"line_number":33,"context_line":"    which is not supported by selected version."},{"line_number":34,"context_line":"    \"\"\""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def __init__(self, argument_name, start_version, end_version):"},{"line_number":37,"context_line":"        if not start_version.is_null() and not end_version.is_null():"}],"source_content_type":"text/x-python","patch_set":9,"id":"9ad45d7e_5f2a382d","line":34,"updated":"2016-08-10 08:22:08.000000000","message":"-1: I think the message is too verbose when giving the versions and makes it hard to read:\n\n --argument argument is only allowed for microversions API Version Major: 3, Minor: 10 - API Version Major: 3, Minor: 12.\n\nWe should use start_version.get_string() and end_version.get_string()","commit_id":"81c0daa9451b07f5cb641cbf33a51c6ac9b5d1cb"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"72bb49d120df97478275e8718a7ff90408001ea6","unresolved":false,"context_lines":[{"line_number":31,"context_line":"class UnsupportedAttribute(AttributeError):"},{"line_number":32,"context_line":"    \"\"\"Indicates that the user is trying to transmit the argument to a method,"},{"line_number":33,"context_line":"    which is not supported by selected version."},{"line_number":34,"context_line":"    \"\"\""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def __init__(self, argument_name, start_version, end_version):"},{"line_number":37,"context_line":"        if not start_version.is_null() and not end_version.is_null():"}],"source_content_type":"text/x-python","patch_set":9,"id":"9ad45d7e_f7c9715a","line":34,"in_reply_to":"9ad45d7e_5f2a382d","updated":"2016-08-10 19:07:24.000000000","message":"Done","commit_id":"81c0daa9451b07f5cb641cbf33a51c6ac9b5d1cb"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"a6ac59c6d4c7d89a83b5a30914aa1ce6d7ca2e90","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                \"%(end)s.\" % {\"name\": argument_name,"},{"line_number":53,"context_line":"                              \"end\": end_version.get_string()})"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        else:"},{"line_number":56,"context_line":"            self.message \u003d ("},{"line_number":57,"context_line":"                \"\u0027%(name)s\u0027 argument not allowed for current API version\" %"},{"line_number":58,"context_line":"                {\"name\": argument_name})"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad45d7e_10efa61e","line":55,"updated":"2016-08-11 21:17:51.000000000","message":"Would we ever want to get here? If we aren\u0027t passing in a start_version nor an end_version, then we\u0027re basically telling the user \"You cannot use this argument on this version, but we\u0027re not going to tell you which versions work for this argument...\"\nI think we should not allow the exception if we are not going to indicate what versions actually work for the argument.","commit_id":"2e54cc2fb278f1b5aac49b1f740fc0f212e074d2"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"d2ffb5b9077ad2ed5e3511c3afeb234616bbff84","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                \"%(end)s.\" % {\"name\": argument_name,"},{"line_number":53,"context_line":"                              \"end\": end_version.get_string()})"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        else:"},{"line_number":56,"context_line":"            self.message \u003d ("},{"line_number":57,"context_line":"                \"\u0027%(name)s\u0027 argument not allowed for current API version\" %"},{"line_number":58,"context_line":"                {\"name\": argument_name})"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad45d7e_84619b07","line":55,"in_reply_to":"9ad45d7e_10efa61e","updated":"2016-08-11 21:33:28.000000000","message":"Yeah this point in the exception is actually impossible to reach, because it\u0027s only ever even called if start or end versions aren\u0027t null. I can get rid of it","commit_id":"2e54cc2fb278f1b5aac49b1f740fc0f212e074d2"}],"cinderclient/shell.py":[{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e1e056a5dd615c06d531c66eb41e722e63de6661","unresolved":false,"context_lines":[{"line_number":398,"context_line":"                                               default\u003dFalse))"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    def get_subcommand_parser(self, version, do_help\u003dFalse):"},{"line_number":401,"context_line":"        major_version_string \u003d \"%s\" % version.ver_major"},{"line_number":402,"context_line":"        parser \u003d self.get_base_parser()"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"        self.subcommands \u003d {}"}],"source_content_type":"text/x-python","patch_set":8,"id":"bacf61ea_104eb36e","line":401,"updated":"2016-08-05 11:46:30.000000000","message":"-1: We don\u0027t need this, just change on L407 and L409 to match against ints","commit_id":"57b2d53c4f6024291019c32467829837b920320d"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"969b3ecffe325f8094495a1f0f8b4a4017f229fe","unresolved":false,"context_lines":[{"line_number":398,"context_line":"                                               default\u003dFalse))"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    def get_subcommand_parser(self, version, do_help\u003dFalse):"},{"line_number":401,"context_line":"        major_version_string \u003d \"%s\" % version.ver_major"},{"line_number":402,"context_line":"        parser \u003d self.get_base_parser()"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"        self.subcommands \u003d {}"}],"source_content_type":"text/x-python","patch_set":8,"id":"9ad45d7e_8b893129","line":401,"in_reply_to":"bacf61ea_104eb36e","updated":"2016-08-09 18:48:12.000000000","message":"Done","commit_id":"57b2d53c4f6024291019c32467829837b920320d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e1e056a5dd615c06d531c66eb41e722e63de6661","unresolved":false,"context_lines":[{"line_number":404,"context_line":"        self.subcommands \u003d {}"},{"line_number":405,"context_line":"        subparsers \u003d parser.add_subparsers(metavar\u003d\u0027\u003csubcommand\u003e\u0027)"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"        if major_version_string \u003d\u003d \u00272\u0027:"},{"line_number":408,"context_line":"            actions_module \u003d importutils.import_module(V2_SHELL)"},{"line_number":409,"context_line":"        elif major_version_string \u003d\u003d \u00273\u0027:"},{"line_number":410,"context_line":"            actions_module \u003d importutils.import_module(V3_SHELL)"}],"source_content_type":"text/x-python","patch_set":8,"id":"bacf61ea_30593736","line":407,"updated":"2016-08-05 11:46:30.000000000","message":"if version.ver_major \u003d\u003d 2:","commit_id":"57b2d53c4f6024291019c32467829837b920320d"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"969b3ecffe325f8094495a1f0f8b4a4017f229fe","unresolved":false,"context_lines":[{"line_number":404,"context_line":"        self.subcommands \u003d {}"},{"line_number":405,"context_line":"        subparsers \u003d parser.add_subparsers(metavar\u003d\u0027\u003csubcommand\u003e\u0027)"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"        if major_version_string \u003d\u003d \u00272\u0027:"},{"line_number":408,"context_line":"            actions_module \u003d importutils.import_module(V2_SHELL)"},{"line_number":409,"context_line":"        elif major_version_string \u003d\u003d \u00273\u0027:"},{"line_number":410,"context_line":"            actions_module \u003d importutils.import_module(V3_SHELL)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9ad45d7e_6b8cbd35","line":407,"in_reply_to":"bacf61ea_30593736","updated":"2016-08-09 18:48:12.000000000","message":"Done","commit_id":"57b2d53c4f6024291019c32467829837b920320d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e1e056a5dd615c06d531c66eb41e722e63de6661","unresolved":false,"context_lines":[{"line_number":406,"context_line":""},{"line_number":407,"context_line":"        if major_version_string \u003d\u003d \u00272\u0027:"},{"line_number":408,"context_line":"            actions_module \u003d importutils.import_module(V2_SHELL)"},{"line_number":409,"context_line":"        elif major_version_string \u003d\u003d \u00273\u0027:"},{"line_number":410,"context_line":"            actions_module \u003d importutils.import_module(V3_SHELL)"},{"line_number":411,"context_line":"        else:"},{"line_number":412,"context_line":"            actions_module \u003d importutils.import_module(V1_SHELL)"}],"source_content_type":"text/x-python","patch_set":8,"id":"bacf61ea_b0452744","line":409,"updated":"2016-08-05 11:46:30.000000000","message":"if version.ver_major \u003d\u003d 3:","commit_id":"57b2d53c4f6024291019c32467829837b920320d"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"969b3ecffe325f8094495a1f0f8b4a4017f229fe","unresolved":false,"context_lines":[{"line_number":406,"context_line":""},{"line_number":407,"context_line":"        if major_version_string \u003d\u003d \u00272\u0027:"},{"line_number":408,"context_line":"            actions_module \u003d importutils.import_module(V2_SHELL)"},{"line_number":409,"context_line":"        elif major_version_string \u003d\u003d \u00273\u0027:"},{"line_number":410,"context_line":"            actions_module \u003d importutils.import_module(V3_SHELL)"},{"line_number":411,"context_line":"        else:"},{"line_number":412,"context_line":"            actions_module \u003d importutils.import_module(V1_SHELL)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9ad45d7e_cb832903","line":409,"in_reply_to":"bacf61ea_b0452744","updated":"2016-08-09 18:48:12.000000000","message":"Done","commit_id":"57b2d53c4f6024291019c32467829837b920320d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e1e056a5dd615c06d531c66eb41e722e63de6661","unresolved":false,"context_lines":[{"line_number":431,"context_line":"        subparser.set_defaults(func\u003dself.do_bash_completion)"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"    def _find_actions(self, subparsers, actions_module, version, do_help):"},{"line_number":434,"context_line":"        msg \u003d _(\" (Supported by API versions \u0027%(start)s\u0027 - \u0027%(end)s\u0027)\")"},{"line_number":435,"context_line":"        for attr in (a for a in dir(actions_module) if a.startswith(\u0027do_\u0027)):"},{"line_number":436,"context_line":"            # I prefer to be hyphen-separated instead of underscores."},{"line_number":437,"context_line":"            command \u003d attr[3:].replace(\u0027_\u0027, \u0027-\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"bacf61ea_b05c071a","line":434,"updated":"2016-08-05 11:46:30.000000000","message":"nit: I don\u0027t think we should be putting versions between apostrophes.","commit_id":"57b2d53c4f6024291019c32467829837b920320d"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"969b3ecffe325f8094495a1f0f8b4a4017f229fe","unresolved":false,"context_lines":[{"line_number":431,"context_line":"        subparser.set_defaults(func\u003dself.do_bash_completion)"},{"line_number":432,"context_line":""},{"line_number":433,"context_line":"    def _find_actions(self, subparsers, actions_module, version, do_help):"},{"line_number":434,"context_line":"        msg \u003d _(\" (Supported by API versions \u0027%(start)s\u0027 - \u0027%(end)s\u0027)\")"},{"line_number":435,"context_line":"        for attr in (a for a in dir(actions_module) if a.startswith(\u0027do_\u0027)):"},{"line_number":436,"context_line":"            # I prefer to be hyphen-separated instead of underscores."},{"line_number":437,"context_line":"            command \u003d attr[3:].replace(\u0027_\u0027, \u0027-\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9ad45d7e_0b7ee118","line":434,"in_reply_to":"bacf61ea_b05c071a","updated":"2016-08-09 18:48:12.000000000","message":"Done","commit_id":"57b2d53c4f6024291019c32467829837b920320d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e1e056a5dd615c06d531c66eb41e722e63de6661","unresolved":false,"context_lines":[{"line_number":451,"context_line":"                subs \u003d [versioned_method for versioned_method in subs"},{"line_number":452,"context_line":"                        if version.matches(versioned_method.start_version,"},{"line_number":453,"context_line":"                                           versioned_method.end_version)]"},{"line_number":454,"context_line":"                if subs:"},{"line_number":455,"context_line":"                    # use the \"latest\" substitution"},{"line_number":456,"context_line":"                    callback \u003d subs[-1].func"},{"line_number":457,"context_line":"                else:"},{"line_number":458,"context_line":"                    # there is no proper versioned method"},{"line_number":459,"context_line":"                    continue"},{"line_number":460,"context_line":"                desc \u003d callback.__doc__ or desc"},{"line_number":461,"context_line":"                desc \u003d desc.strip().split(\u0027\\n\u0027)[0]"},{"line_number":462,"context_line":"                desc +\u003d additional_msg"}],"source_content_type":"text/x-python","patch_set":8,"id":"bacf61ea_90b0e344","line":459,"range":{"start_line":454,"start_character":0,"end_line":459,"end_character":28},"updated":"2016-08-05 11:46:30.000000000","message":"nit: It\u0027s usually best to do it the other way around\n\n if not subs:\n     continue\n\n callback \u003d subs[-1].func","commit_id":"57b2d53c4f6024291019c32467829837b920320d"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"969b3ecffe325f8094495a1f0f8b4a4017f229fe","unresolved":false,"context_lines":[{"line_number":451,"context_line":"                subs \u003d [versioned_method for versioned_method in subs"},{"line_number":452,"context_line":"                        if version.matches(versioned_method.start_version,"},{"line_number":453,"context_line":"                                           versioned_method.end_version)]"},{"line_number":454,"context_line":"                if subs:"},{"line_number":455,"context_line":"                    # use the \"latest\" substitution"},{"line_number":456,"context_line":"                    callback \u003d subs[-1].func"},{"line_number":457,"context_line":"                else:"},{"line_number":458,"context_line":"                    # there is no proper versioned method"},{"line_number":459,"context_line":"                    continue"},{"line_number":460,"context_line":"                desc \u003d callback.__doc__ or desc"},{"line_number":461,"context_line":"                desc \u003d desc.strip().split(\u0027\\n\u0027)[0]"},{"line_number":462,"context_line":"                desc +\u003d additional_msg"}],"source_content_type":"text/x-python","patch_set":8,"id":"9ad45d7e_eb78ad2d","line":459,"range":{"start_line":454,"start_character":0,"end_line":459,"end_character":28},"in_reply_to":"bacf61ea_90b0e344","updated":"2016-08-09 18:48:12.000000000","message":"Done","commit_id":"57b2d53c4f6024291019c32467829837b920320d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e1e056a5dd615c06d531c66eb41e722e63de6661","unresolved":false,"context_lines":[{"line_number":461,"context_line":"                desc \u003d desc.strip().split(\u0027\\n\u0027)[0]"},{"line_number":462,"context_line":"                desc +\u003d additional_msg"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"            action_help \u003d desc.strip()"},{"line_number":465,"context_line":"            arguments \u003d getattr(callback, \u0027arguments\u0027, [])"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"            subparser \u003d subparsers.add_parser("}],"source_content_type":"text/x-python","patch_set":8,"id":"bacf61ea_50794b81","line":464,"updated":"2016-08-05 11:46:30.000000000","message":"-1: It should not be necessary to strip the string.","commit_id":"57b2d53c4f6024291019c32467829837b920320d"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"969b3ecffe325f8094495a1f0f8b4a4017f229fe","unresolved":false,"context_lines":[{"line_number":461,"context_line":"                desc \u003d desc.strip().split(\u0027\\n\u0027)[0]"},{"line_number":462,"context_line":"                desc +\u003d additional_msg"},{"line_number":463,"context_line":""},{"line_number":464,"context_line":"            action_help \u003d desc.strip()"},{"line_number":465,"context_line":"            arguments \u003d getattr(callback, \u0027arguments\u0027, [])"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"            subparser \u003d subparsers.add_parser("}],"source_content_type":"text/x-python","patch_set":8,"id":"9ad45d7e_4b78d92a","line":464,"in_reply_to":"bacf61ea_50794b81","updated":"2016-08-09 18:48:12.000000000","message":"Done","commit_id":"57b2d53c4f6024291019c32467829837b920320d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"e1e056a5dd615c06d531c66eb41e722e63de6661","unresolved":false,"context_lines":[{"line_number":476,"context_line":"                                   help\u003dargparse.SUPPRESS,)"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"            self.subcommands[command] \u003d subparser"},{"line_number":479,"context_line":"            for (args, kwargs) in arguments:"},{"line_number":480,"context_line":"                start_version \u003d kwargs.get(\"start_version\", None)"},{"line_number":481,"context_line":"                if start_version:"},{"line_number":482,"context_line":"                    start_version \u003d api_versions.APIVersion(start_version)"},{"line_number":483,"context_line":"                    end_version \u003d kwargs.get(\"end_version\", None)"},{"line_number":484,"context_line":"                    if end_version:"},{"line_number":485,"context_line":"                        end_version \u003d api_versions.APIVersion(end_version)"},{"line_number":486,"context_line":"                    else:"},{"line_number":487,"context_line":"                        end_version \u003d api_versions.APIVersion("},{"line_number":488,"context_line":"                            \"%s.latest\" % start_version.ver_major)"},{"line_number":489,"context_line":"                    if do_help:"},{"line_number":490,"context_line":"                        kwargs[\"help\"] \u003d kwargs.get(\"help\", \"\") + str(msg % {"},{"line_number":491,"context_line":"                            \"start\": start_version.get_string(),"},{"line_number":492,"context_line":"                            \"end\": end_version.get_string()})"},{"line_number":493,"context_line":"                    if not version.matches(start_version, end_version):"},{"line_number":494,"context_line":"                        continue"},{"line_number":495,"context_line":"                kw \u003d kwargs.copy()"},{"line_number":496,"context_line":"                kw.pop(\"start_version\", None)"},{"line_number":497,"context_line":"                kw.pop(\"end_version\", None)"}],"source_content_type":"text/x-python","patch_set":8,"id":"bacf61ea_10ea330f","line":494,"range":{"start_line":479,"start_character":0,"end_line":494,"end_character":32},"updated":"2016-08-05 11:46:30.000000000","message":"-1: This should be simplified and made to support only having end_version without start_version:\n start_version \u003d kwargs.get(\"start_version\", None)\n start_version \u003d api_versions.APIVersion(start_version)\n end_version \u003d kwargs.get(\u0027end_version\u0027, None)\n end_version \u003d api_versions.APIVersion(end_version)\n if do_help and not (start_version.is_null() and start_version.is_null()):\n     kwargs[\"help\"] \u003d kwargs.get(\"help\", \"\") + str(msg % {\n          \"start\": start_version.get_string(),\n          \"end\": end_version.get_string()})\n if not version.matches(start_version, end_version):\n     continue\n\nAnd all you need to do is change the get_string method of APIVersion to return \u0027*.*\u0027 if \"self.is_null()\".\n\nAnd you\u0027ll be able to support all combinations of star and end versions present or missing.","commit_id":"57b2d53c4f6024291019c32467829837b920320d"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"969b3ecffe325f8094495a1f0f8b4a4017f229fe","unresolved":false,"context_lines":[{"line_number":476,"context_line":"                                   help\u003dargparse.SUPPRESS,)"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"            self.subcommands[command] \u003d subparser"},{"line_number":479,"context_line":"            for (args, kwargs) in arguments:"},{"line_number":480,"context_line":"                start_version \u003d kwargs.get(\"start_version\", None)"},{"line_number":481,"context_line":"                if start_version:"},{"line_number":482,"context_line":"                    start_version \u003d api_versions.APIVersion(start_version)"},{"line_number":483,"context_line":"                    end_version \u003d kwargs.get(\"end_version\", None)"},{"line_number":484,"context_line":"                    if end_version:"},{"line_number":485,"context_line":"                        end_version \u003d api_versions.APIVersion(end_version)"},{"line_number":486,"context_line":"                    else:"},{"line_number":487,"context_line":"                        end_version \u003d api_versions.APIVersion("},{"line_number":488,"context_line":"                            \"%s.latest\" % start_version.ver_major)"},{"line_number":489,"context_line":"                    if do_help:"},{"line_number":490,"context_line":"                        kwargs[\"help\"] \u003d kwargs.get(\"help\", \"\") + str(msg % {"},{"line_number":491,"context_line":"                            \"start\": start_version.get_string(),"},{"line_number":492,"context_line":"                            \"end\": end_version.get_string()})"},{"line_number":493,"context_line":"                    if not version.matches(start_version, end_version):"},{"line_number":494,"context_line":"                        continue"},{"line_number":495,"context_line":"                kw \u003d kwargs.copy()"},{"line_number":496,"context_line":"                kw.pop(\"start_version\", None)"},{"line_number":497,"context_line":"                kw.pop(\"end_version\", None)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9ad45d7e_2b73e54e","line":494,"range":{"start_line":479,"start_character":0,"end_line":494,"end_character":32},"in_reply_to":"bacf61ea_10ea330f","updated":"2016-08-09 18:48:12.000000000","message":"Done","commit_id":"57b2d53c4f6024291019c32467829837b920320d"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5f12f7d112ce5f0cc21430db6d083439e62fd180","unresolved":false,"context_lines":[{"line_number":463,"context_line":"                desc \u003d desc.strip().split(\u0027\\n\u0027)[0]"},{"line_number":464,"context_line":"                desc +\u003d additional_msg"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"            action_help \u003d desc"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"            arguments \u003d getattr(callback, \u0027arguments\u0027, [])"},{"line_number":469,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9ad45d7e_1ced6e25","line":466,"updated":"2016-08-10 08:22:08.000000000","message":"nit: Why not call it action_help from the start?","commit_id":"81c0daa9451b07f5cb641cbf33a51c6ac9b5d1cb"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"72bb49d120df97478275e8718a7ff90408001ea6","unresolved":false,"context_lines":[{"line_number":463,"context_line":"                desc \u003d desc.strip().split(\u0027\\n\u0027)[0]"},{"line_number":464,"context_line":"                desc +\u003d additional_msg"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"            action_help \u003d desc"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"            arguments \u003d getattr(callback, \u0027arguments\u0027, [])"},{"line_number":469,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9ad45d7e_97063584","line":466,"in_reply_to":"9ad45d7e_1ced6e25","updated":"2016-08-10 19:07:24.000000000","message":"I think having it out here overriding what should be the help message on line 442 if there\u0027s no \u0027versioned\u0027 attribute was a mistake - let me know if you think the approach in the new patch makes sense to you.","commit_id":"81c0daa9451b07f5cb641cbf33a51c6ac9b5d1cb"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"fee9c484816b7907815a2d62c908a5a9223c6a25","unresolved":false,"context_lines":[{"line_number":463,"context_line":"                desc \u003d desc.strip().split(\u0027\\n\u0027)[0]"},{"line_number":464,"context_line":"                desc +\u003d additional_msg"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"            action_help \u003d desc"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"            arguments \u003d getattr(callback, \u0027arguments\u0027, [])"},{"line_number":469,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"9ad45d7e_2223ada8","line":466,"in_reply_to":"9ad45d7e_97063584","updated":"2016-08-11 09:05:59.000000000","message":"Yes, this makes total sense and goes in line with what I meant to say, that there\u0027s no need to rename the variable.","commit_id":"81c0daa9451b07f5cb641cbf33a51c6ac9b5d1cb"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5f12f7d112ce5f0cc21430db6d083439e62fd180","unresolved":false,"context_lines":[{"line_number":490,"context_line":"                        \"start\": start_version.get_string(),"},{"line_number":491,"context_line":"                        \"end\": end_version.get_string()})"},{"line_number":492,"context_line":"                if not version.matches(start_version, end_version):"},{"line_number":493,"context_line":"                    if args[0] in input_args and command \u003d\u003d input_args[0]:"},{"line_number":494,"context_line":"                        raise exc.UnsupportedAttribute(args[0],"},{"line_number":495,"context_line":"                            start_version, end_version)"},{"line_number":496,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"9ad45d7e_7f58dc32","line":493,"range":{"start_line":493,"start_character":49,"end_line":493,"end_character":74},"updated":"2016-08-10 08:22:08.000000000","message":"-1: Unless I\u0027m mistaken command will always be equal to input_args[0].  Am I missing something?","commit_id":"81c0daa9451b07f5cb641cbf33a51c6ac9b5d1cb"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"72bb49d120df97478275e8718a7ff90408001ea6","unresolved":false,"context_lines":[{"line_number":490,"context_line":"                        \"start\": start_version.get_string(),"},{"line_number":491,"context_line":"                        \"end\": end_version.get_string()})"},{"line_number":492,"context_line":"                if not version.matches(start_version, end_version):"},{"line_number":493,"context_line":"                    if args[0] in input_args and command \u003d\u003d input_args[0]:"},{"line_number":494,"context_line":"                        raise exc.UnsupportedAttribute(args[0],"},{"line_number":495,"context_line":"                            start_version, end_version)"},{"line_number":496,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"9ad45d7e_931be872","line":493,"range":{"start_line":493,"start_character":49,"end_line":493,"end_character":74},"in_reply_to":"9ad45d7e_7f58dc32","updated":"2016-08-10 19:07:24.000000000","message":"input_args is actually the arguments entered by the user, the first of which is always the command. I added this because there could potentially be the same argument in two commands versioned differently for two commands (like --name) and you wouldn\u0027t want to throw this exception unless you knew you were checking it against the right command.\n\nI tested it with --visibility for upload-to-image with this applied, and here\u0027s a paste of the result: http://paste.openstack.org/show/553630/\n\nYou can see in the upload-to-image command, input_args[0] \u003d\u003d command when the version check fails, so it throws the microversion exception. In create, input_args[0] !\u003d command, so it passes by this exception because it doesn\u0027t apply to create, and just fails later saying that --visibility doesn\u0027t exist for that command.\n\nDoes that all make sense? I found through testing where to raise the exception that this is really the only possible place in the code, because after this if the version check fails the offending argument is just removed from the list and you won\u0027t be able to check its microversion later.","commit_id":"81c0daa9451b07f5cb641cbf33a51c6ac9b5d1cb"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"fee9c484816b7907815a2d62c908a5a9223c6a25","unresolved":false,"context_lines":[{"line_number":490,"context_line":"                        \"start\": start_version.get_string(),"},{"line_number":491,"context_line":"                        \"end\": end_version.get_string()})"},{"line_number":492,"context_line":"                if not version.matches(start_version, end_version):"},{"line_number":493,"context_line":"                    if args[0] in input_args and command \u003d\u003d input_args[0]:"},{"line_number":494,"context_line":"                        raise exc.UnsupportedAttribute(args[0],"},{"line_number":495,"context_line":"                            start_version, end_version)"},{"line_number":496,"context_line":"                    else:"}],"source_content_type":"text/x-python","patch_set":9,"id":"9ad45d7e_c21bb171","line":493,"range":{"start_line":493,"start_character":49,"end_line":493,"end_character":74},"in_reply_to":"9ad45d7e_931be872","updated":"2016-08-11 09:05:59.000000000","message":"I see what you mean, though now I\u0027m wondering why we are giving such a terrible error for the \"cinder --os-volume-api-version 3.0 create --visibility public 1\" case.   XD","commit_id":"81c0daa9451b07f5cb641cbf33a51c6ac9b5d1cb"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"5f12f7d112ce5f0cc21430db6d083439e62fd180","unresolved":false,"context_lines":[{"line_number":493,"context_line":"                    if args[0] in input_args and command \u003d\u003d input_args[0]:"},{"line_number":494,"context_line":"                        raise exc.UnsupportedAttribute(args[0],"},{"line_number":495,"context_line":"                            start_version, end_version)"},{"line_number":496,"context_line":"                    else:"},{"line_number":497,"context_line":"                        continue"},{"line_number":498,"context_line":"                kw \u003d kwargs.copy()"},{"line_number":499,"context_line":"                kw.pop(\"start_version\", None)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9ad45d7e_bc97028f","line":496,"updated":"2016-08-10 08:22:08.000000000","message":"nit: No need for the \"else:\"","commit_id":"81c0daa9451b07f5cb641cbf33a51c6ac9b5d1cb"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"72bb49d120df97478275e8718a7ff90408001ea6","unresolved":false,"context_lines":[{"line_number":493,"context_line":"                    if args[0] in input_args and command \u003d\u003d input_args[0]:"},{"line_number":494,"context_line":"                        raise exc.UnsupportedAttribute(args[0],"},{"line_number":495,"context_line":"                            start_version, end_version)"},{"line_number":496,"context_line":"                    else:"},{"line_number":497,"context_line":"                        continue"},{"line_number":498,"context_line":"                kw \u003d kwargs.copy()"},{"line_number":499,"context_line":"                kw.pop(\"start_version\", None)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9ad45d7e_7318f475","line":496,"in_reply_to":"9ad45d7e_bc97028f","updated":"2016-08-10 19:07:24.000000000","message":"Done","commit_id":"81c0daa9451b07f5cb641cbf33a51c6ac9b5d1cb"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"e51964e385a1fd2fd52f18f6491703da8cecc86e","unresolved":false,"context_lines":[{"line_number":445,"context_line":"                subs \u003d api_versions.get_substitutions("},{"line_number":446,"context_line":"                    utils.get_function_name(callback))"},{"line_number":447,"context_line":"                if do_help:"},{"line_number":448,"context_line":"                    additional_msg \u003d str(msg % {"},{"line_number":449,"context_line":"                        \u0027start\u0027: subs[0].start_version.get_string(),"},{"line_number":450,"context_line":"                        \u0027end\u0027: subs[-1].end_version.get_string()})"},{"line_number":451,"context_line":"                    if version.is_latest():"}],"source_content_type":"text/x-python","patch_set":11,"id":"9ad45d7e_6d7e4d1a","line":448,"updated":"2016-08-10 21:47:58.000000000","message":"Why use str()? It seems to already be a string","commit_id":"97eaad1482a9b71867be7ae2772034c488c7062b"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"fc84c8c32c40c72e23d2c3a0e366e260f64e2e10","unresolved":false,"context_lines":[{"line_number":445,"context_line":"                subs \u003d api_versions.get_substitutions("},{"line_number":446,"context_line":"                    utils.get_function_name(callback))"},{"line_number":447,"context_line":"                if do_help:"},{"line_number":448,"context_line":"                    additional_msg \u003d str(msg % {"},{"line_number":449,"context_line":"                        \u0027start\u0027: subs[0].start_version.get_string(),"},{"line_number":450,"context_line":"                        \u0027end\u0027: subs[-1].end_version.get_string()})"},{"line_number":451,"context_line":"                    if version.is_latest():"}],"source_content_type":"text/x-python","patch_set":11,"id":"9ad45d7e_ce23bcbb","line":448,"in_reply_to":"9ad45d7e_478073f7","updated":"2016-08-11 17:29:11.000000000","message":"Done","commit_id":"97eaad1482a9b71867be7ae2772034c488c7062b"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"c2cc54211e708cbf858b7e2c388e92a36bdddd06","unresolved":false,"context_lines":[{"line_number":445,"context_line":"                subs \u003d api_versions.get_substitutions("},{"line_number":446,"context_line":"                    utils.get_function_name(callback))"},{"line_number":447,"context_line":"                if do_help:"},{"line_number":448,"context_line":"                    additional_msg \u003d str(msg % {"},{"line_number":449,"context_line":"                        \u0027start\u0027: subs[0].start_version.get_string(),"},{"line_number":450,"context_line":"                        \u0027end\u0027: subs[-1].end_version.get_string()})"},{"line_number":451,"context_line":"                    if version.is_latest():"}],"source_content_type":"text/x-python","patch_set":11,"id":"9ad45d7e_a89dd367","line":448,"in_reply_to":"9ad45d7e_6d7e4d1a","updated":"2016-08-10 22:04:45.000000000","message":"Because of the \u0027_\u0027, if you take away str() you get this:\nERROR: Message objects do not support addition.","commit_id":"97eaad1482a9b71867be7ae2772034c488c7062b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"4df710bf99f8310d1e05cfbc9ae47f45b67098f1","unresolved":false,"context_lines":[{"line_number":445,"context_line":"                subs \u003d api_versions.get_substitutions("},{"line_number":446,"context_line":"                    utils.get_function_name(callback))"},{"line_number":447,"context_line":"                if do_help:"},{"line_number":448,"context_line":"                    additional_msg \u003d str(msg % {"},{"line_number":449,"context_line":"                        \u0027start\u0027: subs[0].start_version.get_string(),"},{"line_number":450,"context_line":"                        \u0027end\u0027: subs[-1].end_version.get_string()})"},{"line_number":451,"context_line":"                    if version.is_latest():"}],"source_content_type":"text/x-python","patch_set":11,"id":"9ad45d7e_478073f7","line":448,"in_reply_to":"9ad45d7e_a89dd367","updated":"2016-08-11 09:06:08.000000000","message":"-1: I didn\u0027t catch this earlier, sorry. You should use six.text_type instead, this could give unicode errors in non English languages.","commit_id":"97eaad1482a9b71867be7ae2772034c488c7062b"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"e51964e385a1fd2fd52f18f6491703da8cecc86e","unresolved":false,"context_lines":[{"line_number":494,"context_line":"                end_version \u003d api_versions.APIVersion(end_version)"},{"line_number":495,"context_line":"                if do_help and not (start_version.is_null()"},{"line_number":496,"context_line":"                                    and end_version.is_null()):"},{"line_number":497,"context_line":"                    kwargs[\"help\"] \u003d kwargs.get(\"help\", \"\") + str(msg % {"},{"line_number":498,"context_line":"                        \"start\": start_version.get_string(),"},{"line_number":499,"context_line":"                        \"end\": end_version.get_string()})"},{"line_number":500,"context_line":"                if not version.matches(start_version, end_version):"}],"source_content_type":"text/x-python","patch_set":11,"id":"9ad45d7e_ed907d45","line":497,"updated":"2016-08-10 21:47:58.000000000","message":"Why use str()? It seems to already be a string","commit_id":"97eaad1482a9b71867be7ae2772034c488c7062b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"4df710bf99f8310d1e05cfbc9ae47f45b67098f1","unresolved":false,"context_lines":[{"line_number":494,"context_line":"                end_version \u003d api_versions.APIVersion(end_version)"},{"line_number":495,"context_line":"                if do_help and not (start_version.is_null()"},{"line_number":496,"context_line":"                                    and end_version.is_null()):"},{"line_number":497,"context_line":"                    kwargs[\"help\"] \u003d kwargs.get(\"help\", \"\") + str(msg % {"},{"line_number":498,"context_line":"                        \"start\": start_version.get_string(),"},{"line_number":499,"context_line":"                        \"end\": end_version.get_string()})"},{"line_number":500,"context_line":"                if not version.matches(start_version, end_version):"}],"source_content_type":"text/x-python","patch_set":11,"id":"9ad45d7e_c7746337","line":497,"in_reply_to":"9ad45d7e_48941742","updated":"2016-08-11 09:06:08.000000000","message":"-1: Ditto.","commit_id":"97eaad1482a9b71867be7ae2772034c488c7062b"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"fc84c8c32c40c72e23d2c3a0e366e260f64e2e10","unresolved":false,"context_lines":[{"line_number":494,"context_line":"                end_version \u003d api_versions.APIVersion(end_version)"},{"line_number":495,"context_line":"                if do_help and not (start_version.is_null()"},{"line_number":496,"context_line":"                                    and end_version.is_null()):"},{"line_number":497,"context_line":"                    kwargs[\"help\"] \u003d kwargs.get(\"help\", \"\") + str(msg % {"},{"line_number":498,"context_line":"                        \"start\": start_version.get_string(),"},{"line_number":499,"context_line":"                        \"end\": end_version.get_string()})"},{"line_number":500,"context_line":"                if not version.matches(start_version, end_version):"}],"source_content_type":"text/x-python","patch_set":11,"id":"9ad45d7e_ee28409c","line":497,"in_reply_to":"9ad45d7e_c7746337","updated":"2016-08-11 17:29:11.000000000","message":"Done","commit_id":"97eaad1482a9b71867be7ae2772034c488c7062b"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"c2cc54211e708cbf858b7e2c388e92a36bdddd06","unresolved":false,"context_lines":[{"line_number":494,"context_line":"                end_version \u003d api_versions.APIVersion(end_version)"},{"line_number":495,"context_line":"                if do_help and not (start_version.is_null()"},{"line_number":496,"context_line":"                                    and end_version.is_null()):"},{"line_number":497,"context_line":"                    kwargs[\"help\"] \u003d kwargs.get(\"help\", \"\") + str(msg % {"},{"line_number":498,"context_line":"                        \"start\": start_version.get_string(),"},{"line_number":499,"context_line":"                        \"end\": end_version.get_string()})"},{"line_number":500,"context_line":"                if not version.matches(start_version, end_version):"}],"source_content_type":"text/x-python","patch_set":11,"id":"9ad45d7e_48941742","line":497,"in_reply_to":"9ad45d7e_ed907d45","updated":"2016-08-10 22:04:45.000000000","message":"Ditto","commit_id":"97eaad1482a9b71867be7ae2772034c488c7062b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"4df710bf99f8310d1e05cfbc9ae47f45b67098f1","unresolved":false,"context_lines":[{"line_number":504,"context_line":"                            # raise the exception."},{"line_number":505,"context_line":"                            raise exc.UnsupportedAttribute(args[0],"},{"line_number":506,"context_line":"                                start_version, end_version)"},{"line_number":507,"context_line":"                        else:"},{"line_number":508,"context_line":"                            arg_counter[args[0]] -\u003d 1"},{"line_number":509,"context_line":"                    continue"},{"line_number":510,"context_line":"                kw \u003d kwargs.copy()"}],"source_content_type":"text/x-python","patch_set":11,"id":"9ad45d7e_e264f5b9","line":507,"updated":"2016-08-11 09:06:08.000000000","message":"nit: No need for the else","commit_id":"97eaad1482a9b71867be7ae2772034c488c7062b"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"fc84c8c32c40c72e23d2c3a0e366e260f64e2e10","unresolved":false,"context_lines":[{"line_number":504,"context_line":"                            # raise the exception."},{"line_number":505,"context_line":"                            raise exc.UnsupportedAttribute(args[0],"},{"line_number":506,"context_line":"                                start_version, end_version)"},{"line_number":507,"context_line":"                        else:"},{"line_number":508,"context_line":"                            arg_counter[args[0]] -\u003d 1"},{"line_number":509,"context_line":"                    continue"},{"line_number":510,"context_line":"                kw \u003d kwargs.copy()"}],"source_content_type":"text/x-python","patch_set":11,"id":"9ad45d7e_2e2ff8a1","line":507,"in_reply_to":"9ad45d7e_e264f5b9","updated":"2016-08-11 17:29:11.000000000","message":"Done","commit_id":"97eaad1482a9b71867be7ae2772034c488c7062b"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"1ba7a09aab27ea48135f02a36dadb3bba33fc90e","unresolved":false,"context_lines":[{"line_number":440,"context_line":"        elif not start_version.is_null():"},{"line_number":441,"context_line":"            msg \u003d (_(\" (Supported by API version %(start)s and later)\")"},{"line_number":442,"context_line":"                % {\"start\": start_version.get_string()})"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        elif not end_version.is_null():"},{"line_number":445,"context_line":"            msg \u003d (_(\" Supported until API version %(end)s)\")"},{"line_number":446,"context_line":"                % {\"end\": end_version.get_string()})"}],"source_content_type":"text/x-python","patch_set":19,"id":"3ac371cc_888f82cb","line":443,"updated":"2016-08-16 11:09:17.000000000","message":"?: Why add an empty line here but not on L440?","commit_id":"35603a08d24cb22640ca7072d42abe58e71ffe57"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"a56119ed86e440e46f0b23ea1ff98adb70cbd579","unresolved":false,"context_lines":[{"line_number":440,"context_line":"        elif not start_version.is_null():"},{"line_number":441,"context_line":"            msg \u003d (_(\" (Supported by API version %(start)s and later)\")"},{"line_number":442,"context_line":"                % {\"start\": start_version.get_string()})"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        elif not end_version.is_null():"},{"line_number":445,"context_line":"            msg \u003d (_(\" Supported until API version %(end)s)\")"},{"line_number":446,"context_line":"                % {\"end\": end_version.get_string()})"}],"source_content_type":"text/x-python","patch_set":19,"id":"3ac371cc_414b91c9","line":443,"in_reply_to":"3ac371cc_888f82cb","updated":"2016-08-16 16:18:06.000000000","message":"Done","commit_id":"35603a08d24cb22640ca7072d42abe58e71ffe57"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"1ba7a09aab27ea48135f02a36dadb3bba33fc90e","unresolved":false,"context_lines":[{"line_number":441,"context_line":"            msg \u003d (_(\" (Supported by API version %(start)s and later)\")"},{"line_number":442,"context_line":"                % {\"start\": start_version.get_string()})"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        elif not end_version.is_null():"},{"line_number":445,"context_line":"            msg \u003d (_(\" Supported until API version %(end)s)\")"},{"line_number":446,"context_line":"                % {\"end\": end_version.get_string()})"},{"line_number":447,"context_line":"        return six.text_type(msg)"}],"source_content_type":"text/x-python","patch_set":19,"id":"3ac371cc_68032643","line":444,"range":{"start_line":444,"start_character":8,"end_line":444,"end_character":39},"updated":"2016-08-16 11:09:17.000000000","message":"-1: This should just be:\n\n else:","commit_id":"35603a08d24cb22640ca7072d42abe58e71ffe57"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"a56119ed86e440e46f0b23ea1ff98adb70cbd579","unresolved":false,"context_lines":[{"line_number":441,"context_line":"            msg \u003d (_(\" (Supported by API version %(start)s and later)\")"},{"line_number":442,"context_line":"                % {\"start\": start_version.get_string()})"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        elif not end_version.is_null():"},{"line_number":445,"context_line":"            msg \u003d (_(\" Supported until API version %(end)s)\")"},{"line_number":446,"context_line":"                % {\"end\": end_version.get_string()})"},{"line_number":447,"context_line":"        return six.text_type(msg)"}],"source_content_type":"text/x-python","patch_set":19,"id":"3ac371cc_61168da8","line":444,"range":{"start_line":444,"start_character":8,"end_line":444,"end_character":39},"in_reply_to":"3ac371cc_68032643","updated":"2016-08-16 16:18:06.000000000","message":"Done","commit_id":"35603a08d24cb22640ca7072d42abe58e71ffe57"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"1ba7a09aab27ea48135f02a36dadb3bba33fc90e","unresolved":false,"context_lines":[{"line_number":444,"context_line":"        elif not end_version.is_null():"},{"line_number":445,"context_line":"            msg \u003d (_(\" Supported until API version %(end)s)\")"},{"line_number":446,"context_line":"                % {\"end\": end_version.get_string()})"},{"line_number":447,"context_line":"        return six.text_type(msg)"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    def _find_actions(self, subparsers, actions_module, version,"},{"line_number":450,"context_line":"                      do_help, input_args):"}],"source_content_type":"text/x-python","patch_set":19,"id":"3ac371cc_c8985a1e","line":447,"range":{"start_line":447,"start_character":15,"end_line":447,"end_character":29},"updated":"2016-08-16 11:09:17.000000000","message":"-1: No need for six.text_type, internationalization function _ will already take care of that.","commit_id":"35603a08d24cb22640ca7072d42abe58e71ffe57"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"17a73941632c51d1e312a79c24583e3432f53e46","unresolved":false,"context_lines":[{"line_number":444,"context_line":"        elif not end_version.is_null():"},{"line_number":445,"context_line":"            msg \u003d (_(\" Supported until API version %(end)s)\")"},{"line_number":446,"context_line":"                % {\"end\": end_version.get_string()})"},{"line_number":447,"context_line":"        return six.text_type(msg)"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    def _find_actions(self, subparsers, actions_module, version,"},{"line_number":450,"context_line":"                      do_help, input_args):"}],"source_content_type":"text/x-python","patch_set":19,"id":"3ac371cc_c13ca1e4","line":447,"range":{"start_line":447,"start_character":15,"end_line":447,"end_character":29},"in_reply_to":"3ac371cc_61c04de1","updated":"2016-08-16 16:19:40.000000000","message":"I just tested that out, and it looks like the error is still thrown","commit_id":"35603a08d24cb22640ca7072d42abe58e71ffe57"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"84225d6ccbc8a7cf6bb24f4c5bfa45b7eb6a592a","unresolved":false,"context_lines":[{"line_number":444,"context_line":"        elif not end_version.is_null():"},{"line_number":445,"context_line":"            msg \u003d (_(\" Supported until API version %(end)s)\")"},{"line_number":446,"context_line":"                % {\"end\": end_version.get_string()})"},{"line_number":447,"context_line":"        return six.text_type(msg)"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    def _find_actions(self, subparsers, actions_module, version,"},{"line_number":450,"context_line":"                      do_help, input_args):"}],"source_content_type":"text/x-python","patch_set":19,"id":"3ac371cc_66320061","line":447,"range":{"start_line":447,"start_character":15,"end_line":447,"end_character":29},"in_reply_to":"3ac371cc_c13ca1e4","updated":"2016-08-17 08:21:34.000000000","message":"You could be a saint with that patience!!  We already discussed this in an earlier patch and I agreed this was ok.\n\nSo sorry about making you repeat the explanation.","commit_id":"35603a08d24cb22640ca7072d42abe58e71ffe57"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"a56119ed86e440e46f0b23ea1ff98adb70cbd579","unresolved":false,"context_lines":[{"line_number":444,"context_line":"        elif not end_version.is_null():"},{"line_number":445,"context_line":"            msg \u003d (_(\" Supported until API version %(end)s)\")"},{"line_number":446,"context_line":"                % {\"end\": end_version.get_string()})"},{"line_number":447,"context_line":"        return six.text_type(msg)"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    def _find_actions(self, subparsers, actions_module, version,"},{"line_number":450,"context_line":"                      do_help, input_args):"}],"source_content_type":"text/x-python","patch_set":19,"id":"3ac371cc_61c04de1","line":447,"range":{"start_line":447,"start_character":15,"end_line":447,"end_character":29},"in_reply_to":"3ac371cc_c8985a1e","updated":"2016-08-16 16:18:06.000000000","message":"Without that, the error \"ERROR: Message objects do not support addition.\" is thrown on line 465 when we try to add on to additional_msg. Would it work if we added \u0027_\u0027 to HINT_HELP_MSG?","commit_id":"35603a08d24cb22640ca7072d42abe58e71ffe57"}],"cinderclient/tests/unit/fake_actions_module.py":[{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"a6ac59c6d4c7d89a83b5a30914aa1ce6d7ca2e90","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    This will not show up in help message"},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":"    return 1"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"@api_versions.wraps(\"3.2\", \"3.3\")"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad45d7e_1037a6ff","line":26,"updated":"2016-08-11 21:17:51.000000000","message":"This is just a nit, but whenever we have things spread around 2 modules, like fakes and the test that uses them, it sure is nice if the return values aren\u0027t magic numbers.\ni.e return \"3.0 to 3.1\" here, return \"3.2 to 3.2\" on L#21 etc.\nMakes it easier to review, and more importantly, to debug.","commit_id":"2e54cc2fb278f1b5aac49b1f740fc0f212e074d2"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"d2ffb5b9077ad2ed5e3511c3afeb234616bbff84","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    This will not show up in help message"},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":"    return 1"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"@api_versions.wraps(\"3.2\", \"3.3\")"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad45d7e_04348bf9","line":26,"in_reply_to":"9ad45d7e_1037a6ff","updated":"2016-08-11 21:33:28.000000000","message":"I\u0027ll make that fix","commit_id":"2e54cc2fb278f1b5aac49b1f740fc0f212e074d2"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"a6ac59c6d4c7d89a83b5a30914aa1ce6d7ca2e90","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    start_version\u003d\u00273.3\u0027,"},{"line_number":50,"context_line":"    end_version\u003d\u00273.4\u0027)"},{"line_number":51,"context_line":"def do_fake_action2():"},{"line_number":52,"context_line":"    return 3"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"@utils.arg("}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad45d7e_50463e7b","line":52,"updated":"2016-08-11 21:17:51.000000000","message":"same nit as above. Both do_fake_action2 and do_fake_action3 return 3. Why not return \"fake_action2\"?","commit_id":"2e54cc2fb278f1b5aac49b1f740fc0f212e074d2"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"d2ffb5b9077ad2ed5e3511c3afeb234616bbff84","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    start_version\u003d\u00273.3\u0027,"},{"line_number":50,"context_line":"    end_version\u003d\u00273.4\u0027)"},{"line_number":51,"context_line":"def do_fake_action2():"},{"line_number":52,"context_line":"    return 3"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"@utils.arg("}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad45d7e_84287b9b","line":52,"in_reply_to":"9ad45d7e_50463e7b","updated":"2016-08-11 21:33:28.000000000","message":"ditto","commit_id":"2e54cc2fb278f1b5aac49b1f740fc0f212e074d2"}],"cinderclient/tests/unit/test_api_versions.py":[{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"a6ac59c6d4c7d89a83b5a30914aa1ce6d7ca2e90","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        v1 \u003d api_versions.APIVersion(v1_string)"},{"line_number":90,"context_line":"        self.assertEqual(v1_string, v1.get_string())"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        self.assertEqual(\"*.*\", api_versions.APIVersion().get_string())"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"class UpdateHeadersTestCase(utils.TestCase):"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad45d7e_50df5e39","line":92,"updated":"2016-08-11 21:17:51.000000000","message":"I already asked this question in exceptions.py, whey are you replacing the exception with a string?","commit_id":"2e54cc2fb278f1b5aac49b1f740fc0f212e074d2"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"d2ffb5b9077ad2ed5e3511c3afeb234616bbff84","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        v1 \u003d api_versions.APIVersion(v1_string)"},{"line_number":90,"context_line":"        self.assertEqual(v1_string, v1.get_string())"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        self.assertEqual(\"*.*\", api_versions.APIVersion().get_string())"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"class UpdateHeadersTestCase(utils.TestCase):"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad45d7e_24142f4b","line":92,"in_reply_to":"9ad45d7e_50df5e39","updated":"2016-08-11 21:33:28.000000000","message":"see response in api_versions","commit_id":"2e54cc2fb278f1b5aac49b1f740fc0f212e074d2"}],"cinderclient/tests/unit/test_shell.py":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"cac56e5ec37b7c756cc97e103d15f17403be072b","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        subparsers \u003d parser.add_subparsers(metavar\u003d\u0027\u003csubcommand\u003e\u0027)"},{"line_number":358,"context_line":"        shell \u003d cinderclient.shell.OpenStackCinderShell()"},{"line_number":359,"context_line":"        shell.subcommands \u003d {}"},{"line_number":360,"context_line":"        with mock.patch.object(subparsers, \u0027add_parser\u0027) as mock_add_parser:"},{"line_number":361,"context_line":"            shell._find_actions(subparsers, fake_actions_module,"},{"line_number":362,"context_line":"                                api_versions.APIVersion(\"3.1\"), True, [])"},{"line_number":363,"context_line":"            self.assertIn(\u0027fake-action\u0027, shell.subcommands.keys())"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad45d7e_09502ed3","line":360,"updated":"2016-08-11 17:34:47.000000000","message":"Not sure about cinder project. But I\u0027m used to preferring the use of a decorator on the function:\n\n @mock.patch.object(....)\n\nMight be a nit","commit_id":"2e54cc2fb278f1b5aac49b1f740fc0f212e074d2"},{"author":{"_account_id":17275,"name":"Nate Potter","email":"nathaniel.potter@intel.com","username":"npotter"},"change_message_id":"95951bd1349ff3560cb275be3e390a3fdec20fdc","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        subparsers \u003d parser.add_subparsers(metavar\u003d\u0027\u003csubcommand\u003e\u0027)"},{"line_number":358,"context_line":"        shell \u003d cinderclient.shell.OpenStackCinderShell()"},{"line_number":359,"context_line":"        shell.subcommands \u003d {}"},{"line_number":360,"context_line":"        with mock.patch.object(subparsers, \u0027add_parser\u0027) as mock_add_parser:"},{"line_number":361,"context_line":"            shell._find_actions(subparsers, fake_actions_module,"},{"line_number":362,"context_line":"                                api_versions.APIVersion(\"3.1\"), True, [])"},{"line_number":363,"context_line":"            self.assertIn(\u0027fake-action\u0027, shell.subcommands.keys())"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad45d7e_a4c949ae","line":360,"in_reply_to":"9ad45d7e_09502ed3","updated":"2016-08-11 17:48:13.000000000","message":"I tried that but had a harder time getting it working, because I\u0027m mocking a function of a variable that I create on line 357 here. I\u0027ve seen both versions of mocking in cinder, I\u0027m not sure if one is preferred to the other","commit_id":"2e54cc2fb278f1b5aac49b1f740fc0f212e074d2"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"cbd6d6e71a4023163afce137976e4f19a12623e4","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        subparsers \u003d parser.add_subparsers(metavar\u003d\u0027\u003csubcommand\u003e\u0027)"},{"line_number":358,"context_line":"        shell \u003d cinderclient.shell.OpenStackCinderShell()"},{"line_number":359,"context_line":"        shell.subcommands \u003d {}"},{"line_number":360,"context_line":"        with mock.patch.object(subparsers, \u0027add_parser\u0027) as mock_add_parser:"},{"line_number":361,"context_line":"            shell._find_actions(subparsers, fake_actions_module,"},{"line_number":362,"context_line":"                                api_versions.APIVersion(\"3.1\"), True, [])"},{"line_number":363,"context_line":"            self.assertIn(\u0027fake-action\u0027, shell.subcommands.keys())"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad45d7e_bf94b08a","line":360,"in_reply_to":"9ad45d7e_240399b9","updated":"2016-08-11 18:04:36.000000000","message":"In Cinder we are not picky about it as long as one of the ways to do it isn\u0027t comparatively simpler than the other.  \n\nThe alternative using a decorator would be to patch \u0027cinder.cinderclient.shell.CinderClientArgumentParser.add_parser\u0027 instead of patching a specific instance.","commit_id":"2e54cc2fb278f1b5aac49b1f740fc0f212e074d2"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"5c1d8252e66cf9d9c5209753b059ed76b1f46f0a","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        subparsers \u003d parser.add_subparsers(metavar\u003d\u0027\u003csubcommand\u003e\u0027)"},{"line_number":358,"context_line":"        shell \u003d cinderclient.shell.OpenStackCinderShell()"},{"line_number":359,"context_line":"        shell.subcommands \u003d {}"},{"line_number":360,"context_line":"        with mock.patch.object(subparsers, \u0027add_parser\u0027) as mock_add_parser:"},{"line_number":361,"context_line":"            shell._find_actions(subparsers, fake_actions_module,"},{"line_number":362,"context_line":"                                api_versions.APIVersion(\"3.1\"), True, [])"},{"line_number":363,"context_line":"            self.assertIn(\u0027fake-action\u0027, shell.subcommands.keys())"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad45d7e_240399b9","line":360,"in_reply_to":"9ad45d7e_a4c949ae","updated":"2016-08-11 17:50:01.000000000","message":"Ah I missed that part. Thanks!","commit_id":"2e54cc2fb278f1b5aac49b1f740fc0f212e074d2"}]}
