)]}'
{"novaclient/api_versions.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"227aafe31edf0d6fd93f2d39e4534a4f5a77da58","unresolved":false,"context_lines":[{"line_number":424,"context_line":"        \"Warning: Response may be incorrect.\"), header_name)"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"def deprecated_in(version):"},{"line_number":428,"context_line":"    decorator \u003d wraps(\u00272.0\u0027, version)"},{"line_number":429,"context_line":"    def wrapper(fn):"},{"line_number":430,"context_line":"        @functools.wraps(fn)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_58863fba","line":427,"updated":"2016-08-19 14:13:29.000000000","message":"Hmm, so, this is being added to all of the network proxy API code, but 2.36 also deprecated the API proxies for other things, like images and baremetal. Do we need to do the same things to those python APIs in novaclient for 2.36? What is the difference in failure when trying to use 2.36 with and without this decorator that uses the wraps decorator?","commit_id":"478ef25a332242541005a6933d592351d7a898a5"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"72664b2c3f8186e0f4e81c13c57d54084464c288","unresolved":false,"context_lines":[{"line_number":430,"context_line":"        @functools.wraps(fn)"},{"line_number":431,"context_line":"        def wrapped(*a, **k):"},{"line_number":432,"context_line":"            decorated \u003d decorator(fn)"},{"line_number":433,"context_line":"            if hasattr(fn, \u0027__class__\u0027):"},{"line_number":434,"context_line":"                mod \u003d fn.__class__.__module__"},{"line_number":435,"context_line":"            else:"},{"line_number":436,"context_line":"                mod \u003d fn.__module__"},{"line_number":437,"context_line":"            warnings.warn(\u0027The %s module is deprecated \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_e9811f4f","line":434,"range":{"start_line":433,"start_character":12,"end_line":434,"end_character":45},"updated":"2016-08-19 14:44:25.000000000","message":"Not sure that it is correct check.\n\n  In [1]: def wrap(fn):\n     ...:     print(fn.__class__.__module__)\n     ...:     return fn\n     ...: \n  \n  In [2]: class A(object):\n     ...:     @wrap\n     ...:     def f(self): pass\n     ...:     \n  __builtin__\n  \n  In [3]: A().f.__class__\n  Out[3]: instancemethod","commit_id":"478ef25a332242541005a6933d592351d7a898a5"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"dda5400dc44abce9be992986eaf108f7983d53af","unresolved":false,"context_lines":[{"line_number":430,"context_line":"        @functools.wraps(fn)"},{"line_number":431,"context_line":"        def wrapped(*a, **k):"},{"line_number":432,"context_line":"            decorated \u003d decorator(fn)"},{"line_number":433,"context_line":"            if hasattr(fn, \u0027__class__\u0027):"},{"line_number":434,"context_line":"                mod \u003d fn.__class__.__module__"},{"line_number":435,"context_line":"            else:"},{"line_number":436,"context_line":"                mod \u003d fn.__module__"},{"line_number":437,"context_line":"            warnings.warn(\u0027The %s module is deprecated \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_370ee934","line":434,"range":{"start_line":433,"start_character":12,"end_line":434,"end_character":45},"in_reply_to":"1ac06dbe_7e231e06","updated":"2016-08-19 16:11:26.000000000","message":"You might try something from oslo.utils.reflection.  I see get_class_name() and get_callable_name(), which might work out.","commit_id":"478ef25a332242541005a6933d592351d7a898a5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fc620fba71c227b2b4f740440c8373d692f49c34","unresolved":false,"context_lines":[{"line_number":430,"context_line":"        @functools.wraps(fn)"},{"line_number":431,"context_line":"        def wrapped(*a, **k):"},{"line_number":432,"context_line":"            decorated \u003d decorator(fn)"},{"line_number":433,"context_line":"            if hasattr(fn, \u0027__class__\u0027):"},{"line_number":434,"context_line":"                mod \u003d fn.__class__.__module__"},{"line_number":435,"context_line":"            else:"},{"line_number":436,"context_line":"                mod \u003d fn.__module__"},{"line_number":437,"context_line":"            warnings.warn(\u0027The %s module is deprecated \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_7e231e06","line":434,"range":{"start_line":433,"start_character":12,"end_line":434,"end_character":45},"in_reply_to":"1ac06dbe_e9811f4f","updated":"2016-08-19 15:37:58.000000000","message":"Yeah, I can\u0027t quite figure out the pattern, but fn.__module__ doesn\u0027t always exist, and I though it was a method vs. function thing.","commit_id":"478ef25a332242541005a6933d592351d7a898a5"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"72664b2c3f8186e0f4e81c13c57d54084464c288","unresolved":false,"context_lines":[{"line_number":434,"context_line":"                mod \u003d fn.__class__.__module__"},{"line_number":435,"context_line":"            else:"},{"line_number":436,"context_line":"                mod \u003d fn.__module__"},{"line_number":437,"context_line":"            warnings.warn(\u0027The %s module is deprecated \u0027"},{"line_number":438,"context_line":"                          \u0027and will be removed.\u0027 % mod, DeprecationWarning)"},{"line_number":439,"context_line":"            return decorated(*a, **k)"},{"line_number":440,"context_line":"        return wrapped"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_9e17ffec","line":437,"range":{"start_line":437,"start_character":27,"end_line":437,"end_character":56},"updated":"2016-08-19 14:44:25.000000000","message":"As end-user this says nothing for me. There are only small number of cases when somebody uses modules directly.","commit_id":"478ef25a332242541005a6933d592351d7a898a5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fc620fba71c227b2b4f740440c8373d692f49c34","unresolved":false,"context_lines":[{"line_number":434,"context_line":"                mod \u003d fn.__class__.__module__"},{"line_number":435,"context_line":"            else:"},{"line_number":436,"context_line":"                mod \u003d fn.__module__"},{"line_number":437,"context_line":"            warnings.warn(\u0027The %s module is deprecated \u0027"},{"line_number":438,"context_line":"                          \u0027and will be removed.\u0027 % mod, DeprecationWarning)"},{"line_number":439,"context_line":"            return decorated(*a, **k)"},{"line_number":440,"context_line":"        return wrapped"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_9e6d3a35","line":437,"range":{"start_line":437,"start_character":27,"end_line":437,"end_character":56},"in_reply_to":"1ac06dbe_9e17ffec","updated":"2016-08-19 15:37:58.000000000","message":"So what\u0027s your point? What can we do better?","commit_id":"478ef25a332242541005a6933d592351d7a898a5"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"72664b2c3f8186e0f4e81c13c57d54084464c288","unresolved":false,"context_lines":[{"line_number":435,"context_line":"            else:"},{"line_number":436,"context_line":"                mod \u003d fn.__module__"},{"line_number":437,"context_line":"            warnings.warn(\u0027The %s module is deprecated \u0027"},{"line_number":438,"context_line":"                          \u0027and will be removed.\u0027 % mod, DeprecationWarning)"},{"line_number":439,"context_line":"            return decorated(*a, **k)"},{"line_number":440,"context_line":"        return wrapped"},{"line_number":441,"context_line":"    return wrapper"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_7e4b232c","line":438,"range":{"start_line":438,"start_character":56,"end_line":438,"end_character":74},"updated":"2016-08-19 14:44:25.000000000","message":"Based on my experience:\n1) DeprecationWarning is hidden for most deployments(even in our gates)\n2) nobody sees warnings -\u003e nobody fixes deprecated stuff","commit_id":"478ef25a332242541005a6933d592351d7a898a5"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fc620fba71c227b2b4f740440c8373d692f49c34","unresolved":false,"context_lines":[{"line_number":435,"context_line":"            else:"},{"line_number":436,"context_line":"                mod \u003d fn.__module__"},{"line_number":437,"context_line":"            warnings.warn(\u0027The %s module is deprecated \u0027"},{"line_number":438,"context_line":"                          \u0027and will be removed.\u0027 % mod, DeprecationWarning)"},{"line_number":439,"context_line":"            return decorated(*a, **k)"},{"line_number":440,"context_line":"        return wrapped"},{"line_number":441,"context_line":"    return wrapper"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_be7476fd","line":438,"range":{"start_line":438,"start_character":56,"end_line":438,"end_character":74},"in_reply_to":"1ac06dbe_7e4b232c","updated":"2016-08-19 15:37:58.000000000","message":"Suggestion?","commit_id":"478ef25a332242541005a6933d592351d7a898a5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ca2d328bfb2bae10d709b47a0fca098549c94f1c","unresolved":false,"context_lines":[{"line_number":435,"context_line":"            else:"},{"line_number":436,"context_line":"                mod \u003d fn.__module__"},{"line_number":437,"context_line":"            warnings.warn(\u0027The %s module is deprecated \u0027"},{"line_number":438,"context_line":"                          \u0027and will be removed.\u0027 % mod, DeprecationWarning)"},{"line_number":439,"context_line":"            return decorated(*a, **k)"},{"line_number":440,"context_line":"        return wrapped"},{"line_number":441,"context_line":"    return wrapper"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_745b3f55","line":438,"range":{"start_line":438,"start_character":56,"end_line":438,"end_character":74},"in_reply_to":"1ac06dbe_be7476fd","updated":"2016-08-19 16:10:44.000000000","message":"UserWarning?","commit_id":"478ef25a332242541005a6933d592351d7a898a5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"517e4cd5cf61e318d2940466dd02ca935acf4402","unresolved":false,"context_lines":[{"line_number":435,"context_line":"                mod \u003d fn.__module__"},{"line_number":436,"context_line":"            else:"},{"line_number":437,"context_line":"                mod \u003d a[0].__module__"},{"line_number":438,"context_line":"            warnings.warn(\u0027The %s module is deprecated \u0027"},{"line_number":439,"context_line":"                          \u0027and will be removed.\u0027 % mod, DeprecationWarning)"},{"line_number":440,"context_line":"            return decorated(*a, **k)"},{"line_number":441,"context_line":"        return wrapped"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_1782cd52","line":438,"range":{"start_line":438,"start_character":34,"end_line":438,"end_character":40},"updated":"2016-08-19 16:17:17.000000000","message":"nit: the module isn\u0027t deprecated in all cases I don\u0027t think, we\u0027re really deprecating functions in the manager classes for the network-related resources.\n\nI\u0027m not sure why I didn\u0027t think of this before, but oslo has the debtcollector library that already has several decorators for stuff like what we\u0027re doing:\n\nhttps://github.com/openstack/debtcollector/blob/master/debtcollector/removals.py#L163\n\nBut we\u0027d lose the ability to decorate the wraps decorator I guess, so maybe using debtcollector doesn\u0027t help.","commit_id":"568e585339a918568a36ab720a335bfa6f6fa6cd"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"517e4cd5cf61e318d2940466dd02ca935acf4402","unresolved":false,"context_lines":[{"line_number":436,"context_line":"            else:"},{"line_number":437,"context_line":"                mod \u003d a[0].__module__"},{"line_number":438,"context_line":"            warnings.warn(\u0027The %s module is deprecated \u0027"},{"line_number":439,"context_line":"                          \u0027and will be removed.\u0027 % mod, DeprecationWarning)"},{"line_number":440,"context_line":"            return decorated(*a, **k)"},{"line_number":441,"context_line":"        return wrapped"},{"line_number":442,"context_line":"    return wrapper"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_b78db97d","line":439,"range":{"start_line":439,"start_character":56,"end_line":439,"end_character":74},"updated":"2016-08-19 16:17:17.000000000","message":"From previous patch set, if DeprecationWarning is ignored we could use UserWarning, but it doesn\u0027t matter much to me either way. If people are ignoring deprecation warnings then it\u0027s to their own peril.","commit_id":"568e585339a918568a36ab720a335bfa6f6fa6cd"}],"novaclient/tests/unit/test_api_versions.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fec6120e19f044567a51c6085783bc523a26e1b5","unresolved":false,"context_lines":[{"line_number":444,"context_line":"    def test_decorated_after(self):"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        class Fake(object):"},{"line_number":447,"context_line":"            api_version \u003d api_versions.APIVersion(\u00272.123\u0027)"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"            @api_versions.deprecated_after(\u00272.123\u0027)"},{"line_number":450,"context_line":"            def foo(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ac06dbe_c35517c7","line":447,"updated":"2016-08-19 17:48:59.000000000","message":"Looks like this isn\u0027t used.","commit_id":"aaebeb05a03e34281a091dc6dfc4672b01cdfbbb"}],"novaclient/v2/contrib/tenant_networks.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"73cf62a79922aa1686021b9e9a907cec9d210518","unresolved":false,"context_lines":[{"line_number":24,"context_line":"def deprecated(fn):"},{"line_number":25,"context_line":"    @functools.wraps(fn)"},{"line_number":26,"context_line":"    def wrapped(*a, **k):"},{"line_number":27,"context_line":"        warnings.warn(\u0027The novaclient.v2.contrib.tenant_networks module is \u0027"},{"line_number":28,"context_line":"                      \u0027deprecated and will be removed after Nova 15.0.0 is \u0027"},{"line_number":29,"context_line":"                      \u0027released. Use python-neutronclient instead.\u0027,"},{"line_number":30,"context_line":"                      DeprecationWarning)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_e25aa029","line":27,"range":{"start_line":27,"start_character":27,"end_line":27,"end_character":64},"updated":"2016-07-28 18:41:20.000000000","message":"Could you use fn.__module__ to commonalize these warnings?  That could help reduce code duplication…","commit_id":"8985aed90e8193dafd825ff0ab6e6f1d9850a01e"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"2eac0c9df89188df427cdd2c877d54e3f9d87824","unresolved":false,"context_lines":[{"line_number":24,"context_line":"def deprecated(fn):"},{"line_number":25,"context_line":"    @functools.wraps(fn)"},{"line_number":26,"context_line":"    def wrapped(*a, **k):"},{"line_number":27,"context_line":"        warnings.warn(\u0027The novaclient.v2.contrib.tenant_networks module is \u0027"},{"line_number":28,"context_line":"                      \u0027deprecated and will be removed after Nova 15.0.0 is \u0027"},{"line_number":29,"context_line":"                      \u0027released. Use python-neutronclient instead.\u0027,"},{"line_number":30,"context_line":"                      DeprecationWarning)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_8bc93f7b","line":27,"range":{"start_line":27,"start_character":27,"end_line":27,"end_character":64},"in_reply_to":"bacf61ea_483bcdd1","updated":"2016-07-28 19:54:47.000000000","message":"Sure, but it seemed like people wanted to just make it ungeneric instead. But yeah, I know.\n\nIf people really want it fixed before we burn this code, then I will. But I\u0027ll grumble ;D","commit_id":"8985aed90e8193dafd825ff0ab6e6f1d9850a01e"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"317e325c91fbd1d4294001e1a2dfde5352462b37","unresolved":false,"context_lines":[{"line_number":24,"context_line":"def deprecated(fn):"},{"line_number":25,"context_line":"    @functools.wraps(fn)"},{"line_number":26,"context_line":"    def wrapped(*a, **k):"},{"line_number":27,"context_line":"        warnings.warn(\u0027The novaclient.v2.contrib.tenant_networks module is \u0027"},{"line_number":28,"context_line":"                      \u0027deprecated and will be removed after Nova 15.0.0 is \u0027"},{"line_number":29,"context_line":"                      \u0027released. Use python-neutronclient instead.\u0027,"},{"line_number":30,"context_line":"                      DeprecationWarning)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_e2cd80b8","line":27,"range":{"start_line":27,"start_character":27,"end_line":27,"end_character":64},"in_reply_to":"bacf61ea_e25aa029","updated":"2016-07-28 18:42:51.000000000","message":"yeah, I thought about it, but the previous patch\u0027s effort to make it generic wasn\u0027t really liked. This is all throw-away code anyway, so I didn\u0027t care much about the copy-paste part.","commit_id":"8985aed90e8193dafd825ff0ab6e6f1d9850a01e"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"f0f9e2933e51fb25198b8ce157f14f12b7b6bfba","unresolved":false,"context_lines":[{"line_number":24,"context_line":"def deprecated(fn):"},{"line_number":25,"context_line":"    @functools.wraps(fn)"},{"line_number":26,"context_line":"    def wrapped(*a, **k):"},{"line_number":27,"context_line":"        warnings.warn(\u0027The novaclient.v2.contrib.tenant_networks module is \u0027"},{"line_number":28,"context_line":"                      \u0027deprecated and will be removed after Nova 15.0.0 is \u0027"},{"line_number":29,"context_line":"                      \u0027released. Use python-neutronclient instead.\u0027,"},{"line_number":30,"context_line":"                      DeprecationWarning)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_483bcdd1","line":27,"range":{"start_line":27,"start_character":27,"end_line":27,"end_character":64},"in_reply_to":"bacf61ea_e2cd80b8","updated":"2016-07-28 19:27:33.000000000","message":"Fair enough, I suppose…but really, on the previous patch, I think the problem was that you didn\u0027t make it quite generic enough, as the message in the decorator was specific to the network deprecation.","commit_id":"8985aed90e8193dafd825ff0ab6e6f1d9850a01e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"227aafe31edf0d6fd93f2d39e4534a4f5a77da58","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class TenantNetwork(base.Resource):"},{"line_number":23,"context_line":"    @api_versions.deprecated_in(\u00272.35\u0027)"},{"line_number":24,"context_line":"    def delete(self):"},{"line_number":25,"context_line":"        \"\"\""},{"line_number":26,"context_line":"        DEPRECATED: Delete this project network."}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_f8bbab73","line":23,"updated":"2016-08-19 14:13:29.000000000","message":"The naming here is bit confusing, because this wasn\u0027t deprecated in 2.35, it was in 2.36. But we\u0027re falling back to 2.35.","commit_id":"478ef25a332242541005a6933d592351d7a898a5"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"72664b2c3f8186e0f4e81c13c57d54084464c288","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class TenantNetwork(base.Resource):"},{"line_number":23,"context_line":"    @api_versions.deprecated_in(\u00272.35\u0027)"},{"line_number":24,"context_line":"    def delete(self):"},{"line_number":25,"context_line":"        \"\"\""},{"line_number":26,"context_line":"        DEPRECATED: Delete this project network."}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_9e7edfac","line":23,"in_reply_to":"1ac06dbe_f8bbab73","updated":"2016-08-19 14:44:25.000000000","message":"deprecated_after? :)","commit_id":"478ef25a332242541005a6933d592351d7a898a5"}],"novaclient/v2/fixed_ips.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"e75b0e3cf27b213462fd175097471931bc3e9d9f","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"def deprecated(fn):"},{"line_number":27,"context_line":"    @functools.wraps(fn)"},{"line_number":28,"context_line":"    def wrapped(*a, **k):"},{"line_number":29,"context_line":"        warnings.warn(\u0027The novaclient.v2.fixed_ips module is deprecated and \u0027"},{"line_number":30,"context_line":"                      \u0027will be removed after Nova 15.0.0 is released. Use \u0027"},{"line_number":31,"context_line":"                      \u0027python-neutronclient instead.\u0027, DeprecationWarning)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad45d7e_2bc24fe9","line":28,"updated":"2016-08-11 15:57:50.000000000","message":"btw, I think we should use @api_versions.wraps(\"2.1\", \"2.35\") here, since all these methods will raise non-userfriednly errors in case of api_version \u003e\u003d 2.36","commit_id":"8985aed90e8193dafd825ff0ab6e6f1d9850a01e"}],"novaclient/v2/networks.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"72664b2c3f8186e0f4e81c13c57d54084464c288","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    def __repr__(self):"},{"line_number":33,"context_line":"        return \"\u003cNetwork: %s\u003e\" % self.label"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @api_versions.deprecated_in(\u00272.35\u0027)"},{"line_number":36,"context_line":"    def delete(self):"},{"line_number":37,"context_line":"        \"\"\""},{"line_number":38,"context_line":"        DEPRECATED: Delete this network."}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_3e6d2b05","line":35,"range":{"start_line":35,"start_character":3,"end_line":35,"end_character":39},"updated":"2016-08-19 14:44:25.000000000","message":"Not sure that we need to use deprecated_in for resource classes. They just proxies call to manager and we will get two warning messages for one user call:\n\n   nc \u003d novaclient.client.Client(\"2.35\", ...)\n   net \u003d nc.networks.list()[0] # prints one warning message from NetworkManager.list\n   net.delete() # prints 2 warning messages. one from Network.delete and one from NetworkManager.delete\n\nImo, wrapping methods of manager classes by deprecated_in should be enough.","commit_id":"478ef25a332242541005a6933d592351d7a898a5"}]}
