)]}'
{"nova/tests/test_utils.py":[{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"98e59665f79a143c72174e248a1edcad4fb973c2","unresolved":false,"context_lines":[{"line_number":588,"context_line":"        self.assertEqual(self.warn, (\u0027class\u0027, TestClass, \u0027string\u0027))"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"    def test_deprecated_classmethod_no_message(self):"},{"line_number":591,"context_line":"        @utils.deprecated()"},{"line_number":592,"context_line":"        class TestClass(object):"},{"line_number":593,"context_line":"            @classmethod"},{"line_number":594,"context_line":"            def class_method(cls):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAD3%2F%2F%2FSM%3D","line":591,"updated":"2012-01-10 21:41:02.000000000","message":"You\u0027re decorating the class, but it looks like the test is for deprecating the classmethod.\n\nShouldn\u0027t this be\n@utils.deprececated()\n@classmethod\ndef class_method(cls):\n  pass","commit_id":"8e2d6abc28cf749baed1ce545b09a1c5520b93eb"},{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"f494eff3ae094c4c64701370cc9335270fe7c496","unresolved":false,"context_lines":[{"line_number":588,"context_line":"        self.assertEqual(self.warn, (\u0027class\u0027, TestClass, \u0027string\u0027))"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"    def test_deprecated_classmethod_no_message(self):"},{"line_number":591,"context_line":"        @utils.deprecated()"},{"line_number":592,"context_line":"        class TestClass(object):"},{"line_number":593,"context_line":"            @classmethod"},{"line_number":594,"context_line":"            def class_method(cls):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAD3%2F%2F%2FP8%3D","line":591,"in_reply_to":"AAAAD3%2F%2F%2FQ0%3D","updated":"2012-01-10 22:35:03.000000000","message":"Yeah, test body wasn\u0027t quite matching what I\u0027d expect given the name--makes sense now, thanks.","commit_id":"8e2d6abc28cf749baed1ce545b09a1c5520b93eb"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"ee3ff15ff82230454fb4a421cfa83e2a1eab8fcd","unresolved":false,"context_lines":[{"line_number":588,"context_line":"        self.assertEqual(self.warn, (\u0027class\u0027, TestClass, \u0027string\u0027))"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"    def test_deprecated_classmethod_no_message(self):"},{"line_number":591,"context_line":"        @utils.deprecated()"},{"line_number":592,"context_line":"        class TestClass(object):"},{"line_number":593,"context_line":"            @classmethod"},{"line_number":594,"context_line":"            def class_method(cls):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAD3%2F%2F%2FQ0%3D","line":591,"in_reply_to":"AAAAD3%2F%2F%2FQ8%3D","updated":"2012-01-10 22:18:53.000000000","message":"Ah, yeah, the test names might be a little confusing.  A class method is just a wrapped function, and I already have a test for deprecated functions.  The only caveat is that you have to do:\n\n    Class Foo(object):\n        @classmethod\n        @utils.deprecated()\n        def class_method(cls):\n            pass\n\nbecause @classmethod returns a non-callable object that @utils.deprecated() can\u0027t wrap.","commit_id":"8e2d6abc28cf749baed1ce545b09a1c5520b93eb"},{"author":{"_account_id":1030,"name":"Chris Behrens","email":"cbehrens@codestud.com","username":"cbehrens"},"change_message_id":"bbe0477e196ef515fa4c27f7a827f04e3eebc689","unresolved":false,"context_lines":[{"line_number":588,"context_line":"        self.assertEqual(self.warn, (\u0027class\u0027, TestClass, \u0027string\u0027))"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"    def test_deprecated_classmethod_no_message(self):"},{"line_number":591,"context_line":"        @utils.deprecated()"},{"line_number":592,"context_line":"        class TestClass(object):"},{"line_number":593,"context_line":"            @classmethod"},{"line_number":594,"context_line":"            def class_method(cls):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAD3%2F%2F%2FQ8%3D","line":591,"in_reply_to":"AAAAD3%2F%2F%2FRI%3D","updated":"2012-01-10 22:11:08.000000000","message":"Rick:  I think what you want works too, but there\u0027s just a missing test for that case.  I\u0027ll let Kevin confirm ;)","commit_id":"8e2d6abc28cf749baed1ce545b09a1c5520b93eb"},{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"e5576415ea58269cb7f0b168a62930461a8d827f","unresolved":false,"context_lines":[{"line_number":588,"context_line":"        self.assertEqual(self.warn, (\u0027class\u0027, TestClass, \u0027string\u0027))"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"    def test_deprecated_classmethod_no_message(self):"},{"line_number":591,"context_line":"        @utils.deprecated()"},{"line_number":592,"context_line":"        class TestClass(object):"},{"line_number":593,"context_line":"            @classmethod"},{"line_number":594,"context_line":"            def class_method(cls):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAD3%2F%2F%2FRI%3D","line":591,"in_reply_to":"AAAAD3%2F%2F%2FRk%3D","updated":"2012-01-10 22:07:13.000000000","message":"I\u0027m not sure I understand.\n\nI get that you want the ability to deprecate an entire class; so decorating the class with @deprecated should do that.\n\nBut wouldn\u0027t you also want the ability to selectively deprecate one classmethod over the other? In that case, I\u0027d expect the @deprecated decorator to be on the classmethod in question.\n\nFrom the name of the test, that\u0027s what I thought was being tested here. Confusingly, though, it looks like each test is actually testing deprecated *classes*, not deprecated *methods*.\n\nFeels like I\u0027m missing something here, so I\u0027ll go re-read the implementation.","commit_id":"8e2d6abc28cf749baed1ce545b09a1c5520b93eb"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"b24c25a99eecd0b8bbd62af72144800c7b8dd823","unresolved":false,"context_lines":[{"line_number":588,"context_line":"        self.assertEqual(self.warn, (\u0027class\u0027, TestClass, \u0027string\u0027))"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"    def test_deprecated_classmethod_no_message(self):"},{"line_number":591,"context_line":"        @utils.deprecated()"},{"line_number":592,"context_line":"        class TestClass(object):"},{"line_number":593,"context_line":"            @classmethod"},{"line_number":594,"context_line":"            def class_method(cls):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAD3%2F%2F%2FRk%3D","line":591,"in_reply_to":"AAAAD3%2F%2F%2FSM%3D","updated":"2012-01-10 21:55:20.000000000","message":"No, this is by design.  Deprecating a class causes a deprecation warning whenever the class is instantiated, whenever a class method is called on the class, or whenever a static method is called on the class.  I want to ensure that any time you reference the class (and not an instance of the class), you get a deprecation warning.\n\nDeprecation warnings are all about tracking down where you use a deprecated thing.","commit_id":"8e2d6abc28cf749baed1ce545b09a1c5520b93eb"},{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"98e59665f79a143c72174e248a1edcad4fb973c2","unresolved":false,"context_lines":[{"line_number":608,"context_line":"        self.assertEqual(self.warn, (\u0027class\u0027, TestClass, \u0027string\u0027))"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"    def test_deprecated_staticmethod_no_message(self):"},{"line_number":611,"context_line":"        @utils.deprecated()"},{"line_number":612,"context_line":"        class TestClass(object):"},{"line_number":613,"context_line":"            @staticmethod"},{"line_number":614,"context_line":"            def static_method():"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAD3%2F%2F%2FSI%3D","line":611,"updated":"2012-01-10 21:41:02.000000000","message":"What are your thoughts of supporting a no parens when no-args are present, like the periodic_tasks decorator.\n\nIt *does* complicate things, but it has a slightly cleaner syntax. Thoughts?","commit_id":"8e2d6abc28cf749baed1ce545b09a1c5520b93eb"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"b24c25a99eecd0b8bbd62af72144800c7b8dd823","unresolved":false,"context_lines":[{"line_number":608,"context_line":"        self.assertEqual(self.warn, (\u0027class\u0027, TestClass, \u0027string\u0027))"},{"line_number":609,"context_line":""},{"line_number":610,"context_line":"    def test_deprecated_staticmethod_no_message(self):"},{"line_number":611,"context_line":"        @utils.deprecated()"},{"line_number":612,"context_line":"        class TestClass(object):"},{"line_number":613,"context_line":"            @staticmethod"},{"line_number":614,"context_line":"            def static_method():"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAD3%2F%2F%2FRg%3D","line":611,"in_reply_to":"AAAAD3%2F%2F%2FSI%3D","updated":"2012-01-10 21:55:20.000000000","message":"I thought about it, but it is tricky to do.  OTOH, now that I have it in final, tested form, it might actually be possible to pull this off...","commit_id":"8e2d6abc28cf749baed1ce545b09a1c5520b93eb"}]}
