)]}'
{"novaclient/api_versions.py":[{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"2bea7c7d4650a2403b0a8ca941872ca15a97ff89","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        kwargs[\"supported_by\"][\"min\"] \u003d get_version(kwargs[\"min_version\"])"},{"line_number":207,"context_line":"    if \"max_version\" in kwargs:"},{"line_number":208,"context_line":"        kwargs[\"supported_by\"][\"max\"] \u003d get_version(kwargs[\"max_version\"])"},{"line_number":209,"context_line":"    return cliutils.arg(*args, **kwargs)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"def versioned_cmd(min_version, max_version\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a6ced46_81e309a3","line":209,"updated":"2015-03-25 16:39:31.000000000","message":"before this, you will have to pop min_version and max_version from kwargs, otherwise this will occur:\n\nERROR (TypeError): __init__() got an unexpected keyword argument \u0027min_version\u0027","commit_id":"2b10f6062e27ccec8aa07fb9d7487b5fd045fe31"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"3b2e18237546a94271fb84cc638f56751f4ccbd9","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    def __init__(self, name, start_version, end_version, func):"},{"line_number":157,"context_line":"        \"\"\"Versioning information for a single method"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        @name: Name of the method"},{"line_number":160,"context_line":"        @start_version: Minimum acceptable version"},{"line_number":161,"context_line":"        @end_version: Maximum acceptable_version"},{"line_number":162,"context_line":"        @func: Method to call"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa32b979_c69940d2","line":159,"updated":"2015-06-26 19:11:00.000000000","message":"We should be consistent with docstrings. In particular, this should probably read:\n\n    :param name: Name of the method\n\nAnd so on. (Actually, this probably goes for the first patch in the series, too…)","commit_id":"33ebdb035f9dc0e02204ef6daa6c6642bc2f97af"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"faa7f8f3dc18ba2dfc211831bfd55331800f7c4c","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    def __init__(self, name, start_version, end_version, func):"},{"line_number":157,"context_line":"        \"\"\"Versioning information for a single method"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        @name: Name of the method"},{"line_number":160,"context_line":"        @start_version: Minimum acceptable version"},{"line_number":161,"context_line":"        @end_version: Maximum acceptable_version"},{"line_number":162,"context_line":"        @func: Method to call"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa32b979_c6862016","line":159,"in_reply_to":"fa32b979_c69940d2","updated":"2015-06-26 19:24:29.000000000","message":"This class(and APIVersion) was copy-pasted from nova code and than adopted(re-written) for client.\n\nOk, I\u0027ll fix stype:)","commit_id":"33ebdb035f9dc0e02204ef6daa6c6642bc2f97af"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"3b2e18237546a94271fb84cc638f56751f4ccbd9","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"def add_substitution(versioned_method):"},{"line_number":204,"context_line":"    if versioned_method.name not in _SUBSTITUTIONS:"},{"line_number":205,"context_line":"        _SUBSTITUTIONS[versioned_method.name] \u003d []"},{"line_number":206,"context_line":"    _SUBSTITUTIONS[versioned_method.name].append(versioned_method)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa32b979_46ae90e8","line":205,"updated":"2015-06-26 19:11:00.000000000","message":"Make these two lines into a single line with:\n\n    _SUBSTITUTIONS.setdefault(versioned_method.name, [])","commit_id":"33ebdb035f9dc0e02204ef6daa6c6642bc2f97af"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"faa7f8f3dc18ba2dfc211831bfd55331800f7c4c","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"def add_substitution(versioned_method):"},{"line_number":204,"context_line":"    if versioned_method.name not in _SUBSTITUTIONS:"},{"line_number":205,"context_line":"        _SUBSTITUTIONS[versioned_method.name] \u003d []"},{"line_number":206,"context_line":"    _SUBSTITUTIONS[versioned_method.name].append(versioned_method)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa32b979_868018f9","line":205,"in_reply_to":"fa32b979_46ae90e8","updated":"2015-06-26 19:24:29.000000000","message":"sure.","commit_id":"33ebdb035f9dc0e02204ef6daa6c6642bc2f97af"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"3b2e18237546a94271fb84cc638f56751f4ccbd9","unresolved":false,"context_lines":[{"line_number":214,"context_line":"    return substitutions"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"def wraps(start_version, end_version\u003dNone):"},{"line_number":218,"context_line":"    start_version \u003d APIVersion(start_version)"},{"line_number":219,"context_line":"    if end_version:"},{"line_number":220,"context_line":"        end_version \u003d APIVersion(end_version)"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa32b979_26b58c30","line":217,"updated":"2015-06-26 19:11:00.000000000","message":"I\u0027d like to see a decorator name that\u0027s a little less generic; maybe @versioned?","commit_id":"33ebdb035f9dc0e02204ef6daa6c6642bc2f97af"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"faa7f8f3dc18ba2dfc211831bfd55331800f7c4c","unresolved":false,"context_lines":[{"line_number":214,"context_line":"    return substitutions"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"def wraps(start_version, end_version\u003dNone):"},{"line_number":218,"context_line":"    start_version \u003d APIVersion(start_version)"},{"line_number":219,"context_line":"    if end_version:"},{"line_number":220,"context_line":"        end_version \u003d APIVersion(end_version)"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa32b979_66cdd45c","line":217,"in_reply_to":"fa32b979_26b58c30","updated":"2015-06-26 19:24:29.000000000","message":"since this decorator will be used with name of module, name looks good to me: \u0027@api_versions.wraps\u0027.\n\n\"api_versions.versioned\" contains duplication of word \"version\", so I dislike it.\n\nMaybe \"api_versions.wraps\" is not the best name, but I can\u0027t suggest a better one.","commit_id":"33ebdb035f9dc0e02204ef6daa6c6642bc2f97af"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"29366556b08012a92b5eaf6e02b8339f285ee8c9","unresolved":false,"context_lines":[{"line_number":213,"context_line":"    return substitutions"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"def wraps(start_version, end_version\u003dNone):"},{"line_number":217,"context_line":"    start_version \u003d APIVersion(start_version)"},{"line_number":218,"context_line":"    if end_version:"},{"line_number":219,"context_line":"        end_version \u003d APIVersion(end_version)"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa32b979_a670bcdd","line":216,"updated":"2015-06-26 19:35:13.000000000","message":"Yeah, me neither :/  As they say, \"naming things is hard\".","commit_id":"27c99a9246e356cdfdd7b768dd1521b2a9d2985e"}],"novaclient/shell.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"3b2e18237546a94271fb84cc638f56751f4ccbd9","unresolved":false,"context_lines":[{"line_number":505,"context_line":"                    elif do_help:"},{"line_number":506,"context_line":"                        kwargs[\"help\"] \u003d (kwargs.get(\"help\", \"\") + msg % {"},{"line_number":507,"context_line":"                            \"start\": start_version.get_string(),"},{"line_number":508,"context_line":"                            \"end\": end_version.get_string()})"},{"line_number":509,"context_line":"                subparser.add_argument(*args, **kwargs)"},{"line_number":510,"context_line":"            subparser.set_defaults(func\u003dcallback)"},{"line_number":511,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa32b979_e6856459","line":508,"updated":"2015-06-26 19:11:00.000000000","message":"This string expression actually confused me a little bit. It might look better to put the open parenthesis before \u0027msg\u0027 instead of \u0027kwargs.get\u0027, e.g.:\n\n    kwargs[\u0027help\u0027] \u003d kwargs.get(\u0027help\u0027, \u0027\u0027) + (msg % {\n        \u0027start\u0027: start_version.get_string(),\n        \u0027end\u0027: end_version.get_string()})\n\nThat should make it a bit clearer that no substitutions occur in kwargs[\u0027help\u0027].","commit_id":"33ebdb035f9dc0e02204ef6daa6c6642bc2f97af"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"faa7f8f3dc18ba2dfc211831bfd55331800f7c4c","unresolved":false,"context_lines":[{"line_number":505,"context_line":"                    elif do_help:"},{"line_number":506,"context_line":"                        kwargs[\"help\"] \u003d (kwargs.get(\"help\", \"\") + msg % {"},{"line_number":507,"context_line":"                            \"start\": start_version.get_string(),"},{"line_number":508,"context_line":"                            \"end\": end_version.get_string()})"},{"line_number":509,"context_line":"                subparser.add_argument(*args, **kwargs)"},{"line_number":510,"context_line":"            subparser.set_defaults(func\u003dcallback)"},{"line_number":511,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa32b979_c602a072","line":508,"in_reply_to":"fa32b979_e6856459","updated":"2015-06-26 19:24:29.000000000","message":"will be fixed.","commit_id":"33ebdb035f9dc0e02204ef6daa6c6642bc2f97af"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"1c3d7767341d06a9603eb60cf46075b24164aa73","unresolved":false,"context_lines":[{"line_number":461,"context_line":"        subparser.set_defaults(func\u003dself.do_bash_completion)"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    def _find_actions(self, subparsers, actions_module, version, do_help):"},{"line_number":464,"context_line":"        msg \u003d _(\"(Supported by API versions \u0027%(start)s\u0027 - \u0027%(end)s\u0027)\")"},{"line_number":465,"context_line":"        for attr in (a for a in dir(actions_module) if a.startswith(\u0027do_\u0027)):"},{"line_number":466,"context_line":"            # I prefer to be hyphen-separated instead of underscores."},{"line_number":467,"context_line":"            command \u003d attr[3:].replace(\u0027_\u0027, \u0027-\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba3cc151_5c51c72e","line":464,"updated":"2015-07-09 18:17:44.000000000","message":"I tried out this patch with the keypair microversion change [1] and saw it looks like we need to prepend a space in this string otherwise it runs together in the help like this:\n\n $ nova help keypair-add\n usage: nova keypair-add [--pub-key \u003cpub-key\u003e] [--key-type \u003ckey-type\u003e] \u003cname\u003e\n\n Create a new key pair for use with servers.\n\n Positional arguments:\n  \u003cname\u003e                 Name of key.\n\n Optional arguments:\n  --pub-key \u003cpub-key\u003e    Path to a public ssh key.\n  --key-type \u003ckey-type\u003e  Keypair type. Can be ssh or x509.(Supported by API\n                         versions \u00272.2\u0027 - \u00272.latest\u0027)\n\n[1] https://review.openstack.org/#/c/136458/","commit_id":"6796706a7c61c31728a8972ca78a5c6100734420"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"2e820fec15c5fad84f4a43a469df113507ce039d","unresolved":false,"context_lines":[{"line_number":461,"context_line":"        subparser.set_defaults(func\u003dself.do_bash_completion)"},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    def _find_actions(self, subparsers, actions_module, version, do_help):"},{"line_number":464,"context_line":"        msg \u003d _(\"(Supported by API versions \u0027%(start)s\u0027 - \u0027%(end)s\u0027)\")"},{"line_number":465,"context_line":"        for attr in (a for a in dir(actions_module) if a.startswith(\u0027do_\u0027)):"},{"line_number":466,"context_line":"            # I prefer to be hyphen-separated instead of underscores."},{"line_number":467,"context_line":"            command \u003d attr[3:].replace(\u0027_\u0027, \u0027-\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba3cc151_314741a4","line":464,"in_reply_to":"ba3cc151_5c51c72e","updated":"2015-07-09 22:15:52.000000000","message":"Done","commit_id":"6796706a7c61c31728a8972ca78a5c6100734420"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"1c3d7767341d06a9603eb60cf46075b24164aa73","unresolved":false,"context_lines":[{"line_number":469,"context_line":"            desc \u003d callback.__doc__ or \u0027\u0027"},{"line_number":470,"context_line":"            if hasattr(callback, \"start_version\"):"},{"line_number":471,"context_line":"                if not do_help and not version.matches(callback.start_version,"},{"line_number":472,"context_line":"                                                       callback.end_version):"},{"line_number":473,"context_line":"                    continue"},{"line_number":474,"context_line":"                elif do_help:"},{"line_number":475,"context_line":"                    desc +\u003d msg % {\"start\": callback.start_version,"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba3cc151_dc3b97e8","line":472,"updated":"2015-07-09 18:17:44.000000000","message":"Is it safe to assume we have attr \"end_version\" if we have \"start_version\"? Just noticed there is a hasattr(callback, \"start_version\") check before accessing start_version but we don\u0027t check end_version","commit_id":"6796706a7c61c31728a8972ca78a5c6100734420"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"2e820fec15c5fad84f4a43a469df113507ce039d","unresolved":false,"context_lines":[{"line_number":469,"context_line":"            desc \u003d callback.__doc__ or \u0027\u0027"},{"line_number":470,"context_line":"            if hasattr(callback, \"start_version\"):"},{"line_number":471,"context_line":"                if not do_help and not version.matches(callback.start_version,"},{"line_number":472,"context_line":"                                                       callback.end_version):"},{"line_number":473,"context_line":"                    continue"},{"line_number":474,"context_line":"                elif do_help:"},{"line_number":475,"context_line":"                    desc +\u003d msg % {\"start\": callback.start_version,"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba3cc151_0c3226f2","line":472,"in_reply_to":"ba3cc151_dc3b97e8","updated":"2015-07-09 22:15:52.000000000","message":"I hope that only one decorator(`novaclient.api_versions.wraps`) will be used to set `start_version` and `end_version` attributes. \n\nRegular object should not have such attributes, so I suppose that one check is enough and it does not matter check for `start_version` or `end_version`.","commit_id":"6796706a7c61c31728a8972ca78a5c6100734420"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"1c3d7767341d06a9603eb60cf46075b24164aa73","unresolved":false,"context_lines":[{"line_number":473,"context_line":"                    continue"},{"line_number":474,"context_line":"                elif do_help:"},{"line_number":475,"context_line":"                    desc +\u003d msg % {\"start\": callback.start_version,"},{"line_number":476,"context_line":"                                   \"end\": callback.end_version or \"...\"}"},{"line_number":477,"context_line":"            action_help \u003d desc.strip()"},{"line_number":478,"context_line":"            arguments \u003d getattr(callback, \u0027arguments\u0027, [])"},{"line_number":479,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"ba3cc151_5c28e796","line":476,"updated":"2015-07-09 18:17:44.000000000","message":"Is \"...\" supposed to mean \"latest\"? Should we just say \"latest\"?\n\nEdit: It looks like it \"shouldn\u0027t be possible\" for us to end up with \"...\" because end_version is set to \u0027\u003cmajor\u003e.latest\u0027 when it\u0027s omitted in the decorator.","commit_id":"6796706a7c61c31728a8972ca78a5c6100734420"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"2e820fec15c5fad84f4a43a469df113507ce039d","unresolved":false,"context_lines":[{"line_number":473,"context_line":"                    continue"},{"line_number":474,"context_line":"                elif do_help:"},{"line_number":475,"context_line":"                    desc +\u003d msg % {\"start\": callback.start_version,"},{"line_number":476,"context_line":"                                   \"end\": callback.end_version or \"...\"}"},{"line_number":477,"context_line":"            action_help \u003d desc.strip()"},{"line_number":478,"context_line":"            arguments \u003d getattr(callback, \u0027arguments\u0027, [])"},{"line_number":479,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"ba3cc151_ac7c5a71","line":476,"in_reply_to":"ba3cc151_5c28e796","updated":"2015-07-09 22:15:52.000000000","message":"Yup, you are right:) Fixed","commit_id":"6796706a7c61c31728a8972ca78a5c6100734420"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"f2b7b47d3ea0d979180f873b9b4edb6794e2a8d2","unresolved":false,"context_lines":[{"line_number":466,"context_line":"            command \u003d attr[3:].replace(\u0027_\u0027, \u0027-\u0027)"},{"line_number":467,"context_line":"            callback \u003d getattr(actions_module, attr)"},{"line_number":468,"context_line":"            desc \u003d callback.__doc__ or \u0027\u0027"},{"line_number":469,"context_line":"            if hasattr(callback, \"start_version\"):"},{"line_number":470,"context_line":"                if not do_help and not version.matches(callback.start_version,"},{"line_number":471,"context_line":"                                                       callback.end_version):"},{"line_number":472,"context_line":"                    continue"}],"source_content_type":"text/x-python","patch_set":28,"id":"3a50d1a3_4f30cfe8","line":469,"updated":"2015-07-21 08:10:33.000000000","message":"This doesn\u0027t works. As line 266 https://review.openstack.org/#/c/167408/28/novaclient/api_versions.py , it only return internal function, not the versionedmethod obj, so it haven\u0027t attribute start_version.","commit_id":"07ac9239f9a8301e7b042bf58764fd1610ea3b2d"},{"author":{"_account_id":642,"name":"Matt Dietz","email":"matthew.dietz@gmail.com","username":"cerberus"},"change_message_id":"1f476771662f96b378e8e1a8789fc2d9f4fc3a5f","unresolved":false,"context_lines":[{"line_number":505,"context_line":"                        end_version \u003d api_versions.APIVersion(end_version)"},{"line_number":506,"context_line":"                    else:"},{"line_number":507,"context_line":"                        end_version \u003d api_versions.APIVersion("},{"line_number":508,"context_line":"                            \"%s.latest\" % start_version.ver_major)"},{"line_number":509,"context_line":"                    if do_help:"},{"line_number":510,"context_line":"                        kwargs[\"help\"] \u003d kwargs.get(\"help\", \"\") + (msg % {"},{"line_number":511,"context_line":"                            \"start\": start_version.get_string(),"}],"source_content_type":"text/x-python","patch_set":32,"id":"3a50d1a3_04de086d","line":508,"updated":"2015-07-27 15:30:56.000000000","message":"This same chunk from 502 - 508 also seems to be in the wraps() method in api_versions.py (slightly different but I don\u0027t know that it has to be)\n\nWould it be useful to generalize it out in a helper imported from elsewhere?","commit_id":"936cf572dff92036db8966204e01a59fe67ffb83"}],"novaclient/tests/unit/test_api_versions.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"1c3d7767341d06a9603eb60cf46075b24164aa73","unresolved":false,"context_lines":[{"line_number":178,"context_line":""},{"line_number":179,"context_line":"class WrapsTestCase(utils.TestCase):"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def get_obg_with_vers(self, vers):"},{"line_number":182,"context_line":"        return mock.MagicMock(api_version\u003dapi_versions.APIVersion(vers))"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def _side_effect_of_vers_method(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba3cc151_3c040316","line":181,"updated":"2015-07-09 18:17:44.000000000","message":"What does \"obg\" mean? Is it supposed to be \"obj\"?","commit_id":"6796706a7c61c31728a8972ca78a5c6100734420"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"2e820fec15c5fad84f4a43a469df113507ce039d","unresolved":false,"context_lines":[{"line_number":178,"context_line":""},{"line_number":179,"context_line":"class WrapsTestCase(utils.TestCase):"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    def get_obg_with_vers(self, vers):"},{"line_number":182,"context_line":"        return mock.MagicMock(api_version\u003dapi_versions.APIVersion(vers))"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def _side_effect_of_vers_method(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba3cc151_0ce54636","line":181,"in_reply_to":"ba3cc151_3c040316","updated":"2015-07-09 22:15:52.000000000","message":"typo. fixed.","commit_id":"6796706a7c61c31728a8972ca78a5c6100734420"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"1c3d7767341d06a9603eb60cf46075b24164aa73","unresolved":false,"context_lines":[{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        foo(self.get_obg_with_vers(\"2.4\"))"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        self.assertEqual("},{"line_number":203,"context_line":"            (func_name, api_versions.APIVersion(\"2.2\"),"},{"line_number":204,"context_line":"             api_versions.APIVersion(\"2.latest\")),"},{"line_number":205,"context_line":"            mock_versioned_method.call_args[0][0:3])"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    @mock.patch(\"novaclient.utils.get_function_name\")"},{"line_number":208,"context_line":"    @mock.patch(\"novaclient.api_versions.VersionedMethod\")"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba3cc151_9f10a14f","line":205,"range":{"start_line":202,"start_character":8,"end_line":205,"end_character":52},"updated":"2015-07-09 18:17:44.000000000","message":"Instead of this could we do something similar to the following? It would be a lot easier to understand, IMHO.\n\n mock_versioned_method.assert_called_once_with(func_name,\n     api_versions.APIVersion(\"2.2\"),\n     api_versions.APIVersion(\"2.latest\"), mock.ANY)","commit_id":"6796706a7c61c31728a8972ca78a5c6100734420"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"2e820fec15c5fad84f4a43a469df113507ce039d","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        self.assertEqual("},{"line_number":203,"context_line":"            (func_name, api_versions.APIVersion(\"2.2\"),"},{"line_number":204,"context_line":"             api_versions.APIVersion(\"2.latest\")),"},{"line_number":205,"context_line":"            mock_versioned_method.call_args[0][0:3])"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"    @mock.patch(\"novaclient.utils.get_function_name\")"},{"line_number":208,"context_line":"    @mock.patch(\"novaclient.api_versions.VersionedMethod\")"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba3cc151_cc051e7a","line":205,"in_reply_to":"ba3cc151_9f10a14f","updated":"2015-07-09 22:15:52.000000000","message":"Done","commit_id":"6796706a7c61c31728a8972ca78a5c6100734420"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"1c3d7767341d06a9603eb60cf46075b24164aa73","unresolved":false,"context_lines":[{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        foo(self.get_obg_with_vers(\"2.4\"))"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        self.assertEqual("},{"line_number":222,"context_line":"            (func_name, api_versions.APIVersion(\"2.2\"),"},{"line_number":223,"context_line":"             api_versions.APIVersion(\"2.6\")),"},{"line_number":224,"context_line":"            mock_versioned_method.call_args[0][0:3])"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    @mock.patch(\"novaclient.utils.get_function_name\")"},{"line_number":227,"context_line":"    @mock.patch(\"novaclient.api_versions.VersionedMethod\")"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba3cc151_1f525113","line":224,"range":{"start_line":221,"start_character":8,"end_line":224,"end_character":52},"updated":"2015-07-09 18:17:44.000000000","message":"Ditto","commit_id":"6796706a7c61c31728a8972ca78a5c6100734420"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"2e820fec15c5fad84f4a43a469df113507ce039d","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        self.assertEqual("},{"line_number":222,"context_line":"            (func_name, api_versions.APIVersion(\"2.2\"),"},{"line_number":223,"context_line":"             api_versions.APIVersion(\"2.6\")),"},{"line_number":224,"context_line":"            mock_versioned_method.call_args[0][0:3])"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    @mock.patch(\"novaclient.utils.get_function_name\")"},{"line_number":227,"context_line":"    @mock.patch(\"novaclient.api_versions.VersionedMethod\")"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba3cc151_ec082293","line":224,"in_reply_to":"ba3cc151_1f525113","updated":"2015-07-09 22:15:52.000000000","message":"Done","commit_id":"6796706a7c61c31728a8972ca78a5c6100734420"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"1c3d7767341d06a9603eb60cf46075b24164aa73","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        self.assertRaises(exceptions.VersionNotFoundForAPIMethod,"},{"line_number":238,"context_line":"                          foo, self.get_obg_with_vers(\"2.1\"))"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        self.assertEqual("},{"line_number":241,"context_line":"            (func_name, api_versions.APIVersion(\"2.2\"),"},{"line_number":242,"context_line":"             api_versions.APIVersion(\"2.6\")),"},{"line_number":243,"context_line":"            mock_versioned_method.call_args[0][0:3])"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def test_define_method_is_actually_called(self):"},{"line_number":246,"context_line":"        checker \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba3cc151_bf6b25b8","line":243,"range":{"start_line":240,"start_character":8,"end_line":243,"end_character":52},"updated":"2015-07-09 18:17:44.000000000","message":"Ditto","commit_id":"6796706a7c61c31728a8972ca78a5c6100734420"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"2e820fec15c5fad84f4a43a469df113507ce039d","unresolved":false,"context_lines":[{"line_number":240,"context_line":"        self.assertEqual("},{"line_number":241,"context_line":"            (func_name, api_versions.APIVersion(\"2.2\"),"},{"line_number":242,"context_line":"             api_versions.APIVersion(\"2.6\")),"},{"line_number":243,"context_line":"            mock_versioned_method.call_args[0][0:3])"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def test_define_method_is_actually_called(self):"},{"line_number":246,"context_line":"        checker \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":25,"id":"ba3cc151_0cf0e68f","line":243,"in_reply_to":"ba3cc151_bf6b25b8","updated":"2015-07-09 22:15:52.000000000","message":"Done","commit_id":"6796706a7c61c31728a8972ca78a5c6100734420"}]}
