)]}'
{"tests/sqlalchemy/test_models.py":[{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"79074b488c0d65f4c3de623e07bf6a03f715294f","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                        \u0027save\u0027,"},{"line_number":44,"context_line":"                        \u0027iteritems\u0027)"},{"line_number":45,"context_line":"        for method in dict_methods:"},{"line_number":46,"context_line":"            self.assertTrue(hasattr(models.ModelBase, method))"},{"line_number":47,"context_line":"        if tuple(sys.version_info)[0] \u003d\u003d 2:"},{"line_number":48,"context_line":"            self.assertTrue(hasattr(models.ModelBase, \u0027next\u0027))"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_5a08b227","line":46,"updated":"2014-11-18 16:02:59.000000000","message":"its not related, but can you please add nice error message here?","commit_id":"f5a404cc5d2502920af1ebdbfd11f0caee61394a"},{"author":{"_account_id":12363,"name":"Oleksii Chuprykov","email":"a.chuprikoff@gmail.com","username":"ochuprykov"},"change_message_id":"408e5994f24f911a8a26f2e16dad726f7e0a5df4","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                        \u0027save\u0027,"},{"line_number":44,"context_line":"                        \u0027iteritems\u0027)"},{"line_number":45,"context_line":"        for method in dict_methods:"},{"line_number":46,"context_line":"            self.assertTrue(hasattr(models.ModelBase, method))"},{"line_number":47,"context_line":"        if tuple(sys.version_info)[0] \u003d\u003d 2:"},{"line_number":48,"context_line":"            self.assertTrue(hasattr(models.ModelBase, \u0027next\u0027))"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_953cadc9","line":46,"in_reply_to":"5a890539_5a08b227","updated":"2014-11-18 16:31:14.000000000","message":"Done","commit_id":"f5a404cc5d2502920af1ebdbfd11f0caee61394a"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"dcf2d035787b33119d99f6defa628222b82704e0","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                        \u0027iteritems\u0027)"},{"line_number":45,"context_line":"        for method in dict_methods:"},{"line_number":46,"context_line":"            self.assertTrue(hasattr(models.ModelBase, method))"},{"line_number":47,"context_line":"        if tuple(sys.version_info)[0] \u003d\u003d 2:"},{"line_number":48,"context_line":"            self.assertTrue(hasattr(models.ModelBase, \u0027next\u0027))"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def test_modelbase_set(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_7f14804c","line":47,"updated":"2014-11-18 16:01:50.000000000","message":"IMO usage of ``six`` will looks more pretty here","commit_id":"f5a404cc5d2502920af1ebdbfd11f0caee61394a"},{"author":{"_account_id":12363,"name":"Oleksii Chuprykov","email":"a.chuprikoff@gmail.com","username":"ochuprykov"},"change_message_id":"408e5994f24f911a8a26f2e16dad726f7e0a5df4","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                        \u0027iteritems\u0027)"},{"line_number":45,"context_line":"        for method in dict_methods:"},{"line_number":46,"context_line":"            self.assertTrue(hasattr(models.ModelBase, method))"},{"line_number":47,"context_line":"        if tuple(sys.version_info)[0] \u003d\u003d 2:"},{"line_number":48,"context_line":"            self.assertTrue(hasattr(models.ModelBase, \u0027next\u0027))"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def test_modelbase_set(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_7522e1a3","line":47,"in_reply_to":"5a890539_7f14804c","updated":"2014-11-18 16:31:14.000000000","message":"agree","commit_id":"f5a404cc5d2502920af1ebdbfd11f0caee61394a"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"dcf2d035787b33119d99f6defa628222b82704e0","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                        \u0027updated_at\u0027)"},{"line_number":154,"context_line":"        for method in dict_methods:"},{"line_number":155,"context_line":"            self.assertTrue(hasattr(TestModel, method))"},{"line_number":156,"context_line":"        if tuple(sys.version_info)[0] \u003d\u003d 2:"},{"line_number":157,"context_line":"            self.assertTrue(hasattr(TestModel, \u0027next\u0027))"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_bf098832","line":156,"updated":"2014-11-18 16:01:50.000000000","message":"ditto","commit_id":"f5a404cc5d2502920af1ebdbfd11f0caee61394a"},{"author":{"_account_id":12363,"name":"Oleksii Chuprykov","email":"a.chuprikoff@gmail.com","username":"ochuprykov"},"change_message_id":"408e5994f24f911a8a26f2e16dad726f7e0a5df4","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                        \u0027updated_at\u0027)"},{"line_number":154,"context_line":"        for method in dict_methods:"},{"line_number":155,"context_line":"            self.assertTrue(hasattr(TestModel, method))"},{"line_number":156,"context_line":"        if tuple(sys.version_info)[0] \u003d\u003d 2:"},{"line_number":157,"context_line":"            self.assertTrue(hasattr(TestModel, \u0027next\u0027))"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_b537e9e1","line":156,"in_reply_to":"5a890539_bf098832","updated":"2014-11-18 16:31:14.000000000","message":"Done","commit_id":"f5a404cc5d2502920af1ebdbfd11f0caee61394a"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"c001e4a88a8baa0f814d3844f0a5563543562d4a","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            self.assertTrue(hasattr(models.ModelBase, method),"},{"line_number":46,"context_line":"                            \"Method %s() is not found\" % method)"},{"line_number":47,"context_line":"        if six.PY2:"},{"line_number":48,"context_line":"            self.assertTrue(hasattr(models.ModelBase, \u0027next\u0027),"},{"line_number":49,"context_line":"                            \"Method next() is not found\")"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def test_modelbase_set(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_9aa59eb7","line":48,"updated":"2014-11-19 09:17:45.000000000","message":"I\u0027d argue, next() is a method of an iterator, rather than dict. Having said that, can we put this check into a separate test case (e.g. test_modelbase_acts_like_iterator) and change it to use issubclass()?\n\n  Python 3.4.2 (default, Oct  8 2014, 10:45:20) \n[GCC 4.9.1] on linux\nType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n\u003e\u003e\u003e class A:\n...     def __iter__(self):\n...         return self\n...     def __next__(self):\n...         pass\n... \n\u003e\u003e\u003e import collections\n\u003e\u003e\u003e issubclass(A, collections.Iterator)\nTrue\n\u003e\u003e\u003e\n\nThat should work on both Python 2.x and 3.x without any help from six.\n\nP.S. we could even use issubclass()/abc/collections trick for test_modelbase_has_dict_methods()","commit_id":"2d3bfc44da7a6ee60df65389d91245362a122349"},{"author":{"_account_id":12363,"name":"Oleksii Chuprykov","email":"a.chuprikoff@gmail.com","username":"ochuprykov"},"change_message_id":"b5409345242e72f03a29ac64357e6fa729a346a9","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            self.assertTrue(hasattr(models.ModelBase, method),"},{"line_number":46,"context_line":"                            \"Method %s() is not found\" % method)"},{"line_number":47,"context_line":"        if six.PY2:"},{"line_number":48,"context_line":"            self.assertTrue(hasattr(models.ModelBase, \u0027next\u0027),"},{"line_number":49,"context_line":"                            \"Method next() is not found\")"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def test_modelbase_set(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a890539_7a570927","line":48,"in_reply_to":"5a890539_9aa59eb7","updated":"2014-11-19 13:56:22.000000000","message":"models.ModelBase isn\u0027t valid iterator in py3(as well as six.Iterator isn\u0027t valid iterator in py3).\nMethod __iter__() of this class return another iterator instead of self, so I am not even sure, that models.ModelBase must be an iterator at all.\nMaybe we can remove next() from this test?(and for test below)","commit_id":"2d3bfc44da7a6ee60df65389d91245362a122349"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"f3fff2d09ac22c77b53734aee820d10249847adf","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                            \"Method %s() is not found\" % method)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def test_modelbase_is_six_iterator(self):"},{"line_number":49,"context_line":"        self.assertTrue(issubclass(models.ModelBase, six.Iterator))"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def test_modelbase_set(self):"},{"line_number":52,"context_line":"        self.mb[\u0027world\u0027] \u003d \u0027hello\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_e88ebc26","line":49,"updated":"2014-11-19 23:24:32.000000000","message":"Similarly weird test but ok.","commit_id":"a89ee409e3f525a358ac0c58174fa3b38dd5afd6"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"be404499c1c027fe01603d6f5bd7d156a87ec9b8","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                            \"Method %s() is not found\" % method)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def test_modelbase_is_six_iterator(self):"},{"line_number":49,"context_line":"        self.assertTrue(issubclass(models.ModelBase, six.Iterator))"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def test_modelbase_set(self):"},{"line_number":52,"context_line":"        self.mb[\u0027world\u0027] \u003d \u0027hello\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_00cba6a5","line":49,"updated":"2014-11-21 10:06:25.000000000","message":"why use six here, when there is a corresponding class in the standard library - collections.Iterator? It should work just fine on both Python 2.x and 3.x","commit_id":"a89ee409e3f525a358ac0c58174fa3b38dd5afd6"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"f3fff2d09ac22c77b53734aee820d10249847adf","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"class TimestampMixinTest(oslo_test.BaseTestCase):"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def test_timestampmixin_attr(self):"},{"line_number":142,"context_line":"        methods \u003d (\u0027created_at\u0027,"},{"line_number":143,"context_line":"                   \u0027updated_at\u0027)"},{"line_number":144,"context_line":"        for method in methods:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_c89bc070","line":141,"updated":"2014-11-19 23:24:32.000000000","message":"What a weird test to make sure python/sqlalchemy objects have methods/attributes... Did these disappear sometime in the past that causes this test to be added (the test adds little value imho) if u know?","commit_id":"a89ee409e3f525a358ac0c58174fa3b38dd5afd6"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"be404499c1c027fe01603d6f5bd7d156a87ec9b8","unresolved":false,"context_lines":[{"line_number":139,"context_line":"class TimestampMixinTest(oslo_test.BaseTestCase):"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def test_timestampmixin_attr(self):"},{"line_number":142,"context_line":"        methods \u003d (\u0027created_at\u0027,"},{"line_number":143,"context_line":"                   \u0027updated_at\u0027)"},{"line_number":144,"context_line":"        for method in methods:"},{"line_number":145,"context_line":"            self.assertTrue(hasattr(models.TimestampMixin, method),"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a890539_60f46acf","line":142,"updated":"2014-11-21 10:06:25.000000000","message":"ok, so I\u0027m not against this change in this patch, but let\u0027s tweak the commit message then (now it touches only the next() part of the change)","commit_id":"a89ee409e3f525a358ac0c58174fa3b38dd5afd6"}]}
