)]}'
{"nova/tests/test_db_api.py":[{"author":{"_account_id":2835,"name":"Brian Elliott","email":"bdelliott@gmail.com","username":"belliott"},"change_message_id":"403f25f813bc64f01a1d937dc908ecf42ca4361c","unresolved":false,"context_lines":[{"line_number":1610,"context_line":"            self.assertEqual(migration[\u0027instance_uuid\u0027], instance[\u0027uuid\u0027])"},{"line_number":1611,"context_line":""},{"line_number":1612,"context_line":""},{"line_number":1613,"context_line":"class ModelsObjectComparatorMixin(object):"},{"line_number":1614,"context_line":""},{"line_number":1615,"context_line":"    def _assertEqualObjects(self, obj1, obj2):"},{"line_number":1616,"context_line":"        obj1 \u003d dict(obj1.iteritems())"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOH%2F%2F%2BRY%3D","line":1613,"updated":"2013-03-18 21:04:16.000000000","message":"I\u0027d rather just have private methods on the test case class than create a separate mixin that is only used by 1 class.","commit_id":"f185300f6d0f05f37be80cf9a2d8ba9cf987b590"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"bfd563f5dcb710b7a75ac45cbfd3da1d6e8b59d4","unresolved":false,"context_lines":[{"line_number":1610,"context_line":"            self.assertEqual(migration[\u0027instance_uuid\u0027], instance[\u0027uuid\u0027])"},{"line_number":1611,"context_line":""},{"line_number":1612,"context_line":""},{"line_number":1613,"context_line":"class ModelsObjectComparatorMixin(object):"},{"line_number":1614,"context_line":""},{"line_number":1615,"context_line":"    def _assertEqualObjects(self, obj1, obj2):"},{"line_number":1616,"context_line":"        obj1 \u003d dict(obj1.iteritems())"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOH%2F%2F93c%3D","line":1613,"in_reply_to":"AAAAOH%2F%2F%2BRY%3D","updated":"2013-03-19 03:41:07.000000000","message":"Yes I agree that in this moment it is used only by one class and looks little bit strange. \u003d) \nBut it is only beginning, of bp db-api-tests\nand it will be used by almost all groups of methods (for each group we will have one Class)...\n\nSo I think it is reasonable to add separated mixing for it.","commit_id":"f185300f6d0f05f37be80cf9a2d8ba9cf987b590"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"bff486e822fe242cdbdf438b500f871b20a469ab","unresolved":false,"context_lines":[{"line_number":1612,"context_line":""},{"line_number":1613,"context_line":"class ModelsObjectComparatorMixin(object):"},{"line_number":1614,"context_line":""},{"line_number":1615,"context_line":"    def _assertEqualObjects(self, obj1, obj2):"},{"line_number":1616,"context_line":"        obj1 \u003d dict(obj1.iteritems())"},{"line_number":1617,"context_line":"        obj2 \u003d dict(obj2.iteritems())"},{"line_number":1618,"context_line":"        for key, value in obj1.iteritems():"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOH%2F%2F9X4%3D","line":1615,"updated":"2013-03-19 15:09:56.000000000","message":"In order to make sure the objects are equal you should also iterate through obj2 and ensure everything in it is also in obj1, or compare length as in the other method.","commit_id":"f185300f6d0f05f37be80cf9a2d8ba9cf987b590"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"989e179a4da32d325ede5ad592a8b0f775a4f5c1","unresolved":false,"context_lines":[{"line_number":1612,"context_line":""},{"line_number":1613,"context_line":"class ModelsObjectComparatorMixin(object):"},{"line_number":1614,"context_line":""},{"line_number":1615,"context_line":"    def _assertEqualObjects(self, obj1, obj2):"},{"line_number":1616,"context_line":"        obj1 \u003d dict(obj1.iteritems())"},{"line_number":1617,"context_line":"        obj2 \u003d dict(obj2.iteritems())"},{"line_number":1618,"context_line":"        for key, value in obj1.iteritems():"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOH%2F%2F9L8%3D","line":1615,"in_reply_to":"AAAAOH%2F%2F9X4%3D","updated":"2013-03-19 16:40:42.000000000","message":"Thanks\u003d)","commit_id":"f185300f6d0f05f37be80cf9a2d8ba9cf987b590"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"f39dbb804107c0ffaf8ae6f745335fd68504251d","unresolved":false,"context_lines":[{"line_number":1615,"context_line":"        return dict([(k, v) for k, v in obj.iteritems()"},{"line_number":1616,"context_line":"                                if k not in ignored_keys])"},{"line_number":1617,"context_line":""},{"line_number":1618,"context_line":"    def _assertEqualObjects(self, obj1, obj2, ignored_keys\u003d[]):"},{"line_number":1619,"context_line":"        obj1 \u003d self._dict_from_object(obj1, ignored_keys)"},{"line_number":1620,"context_line":"        obj2 \u003d self._dict_from_object(obj2, ignored_keys)"},{"line_number":1621,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOH%2F%2F9CY%3D","line":1618,"updated":"2013-03-19 17:55:01.000000000","message":"The ignored_keys param brings up one of the design quirks of python.  It\u0027s explained at http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument pretty well.  In this case I don\u0027t see any issues because it\u0027s not modified but I\u0027d still prefer the standard workaround of defaulting to \u0027None\u0027 and then \u0027if ignored_keys is None: ignored_keys \u003d []\u0027","commit_id":"869fa6e708d3dbb2af26e6326c2d6eb91e7c9fa6"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"39640cdb7d9f26b18877b532bdf77a17fbfd58e1","unresolved":false,"context_lines":[{"line_number":1615,"context_line":"        return dict([(k, v) for k, v in obj.iteritems()"},{"line_number":1616,"context_line":"                                if k not in ignored_keys])"},{"line_number":1617,"context_line":""},{"line_number":1618,"context_line":"    def _assertEqualObjects(self, obj1, obj2, ignored_keys\u003d[]):"},{"line_number":1619,"context_line":"        obj1 \u003d self._dict_from_object(obj1, ignored_keys)"},{"line_number":1620,"context_line":"        obj2 \u003d self._dict_from_object(obj2, ignored_keys)"},{"line_number":1621,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOH%2F%2F9AU%3D","line":1618,"in_reply_to":"AAAAOH%2F%2F9CY%3D","updated":"2013-03-19 18:07:00.000000000","message":"omg\u003d) thanks fixed it\u003d)","commit_id":"869fa6e708d3dbb2af26e6326c2d6eb91e7c9fa6"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"f39dbb804107c0ffaf8ae6f745335fd68504251d","unresolved":false,"context_lines":[{"line_number":1623,"context_line":"        for key, value in obj1.iteritems():"},{"line_number":1624,"context_line":"            self.assertEqual(value, obj2[key])"},{"line_number":1625,"context_line":""},{"line_number":1626,"context_line":"    def _assertEqualListsOfObjects(self, objs1, objs2, ignored_keys\u003d[]):"},{"line_number":1627,"context_line":"        self.assertEqual(len(objs1), len(objs2))"},{"line_number":1628,"context_line":"        objs2 \u003d dict([(o[\u0027id\u0027], o) for o in objs2])"},{"line_number":1629,"context_line":"        for o1 in objs1:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOH%2F%2F9Dg%3D","line":1626,"updated":"2013-03-19 17:55:01.000000000","message":"Does this method need the ignored_keys param?  It seems a little out of place here.","commit_id":"869fa6e708d3dbb2af26e6326c2d6eb91e7c9fa6"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"39640cdb7d9f26b18877b532bdf77a17fbfd58e1","unresolved":false,"context_lines":[{"line_number":1623,"context_line":"        for key, value in obj1.iteritems():"},{"line_number":1624,"context_line":"            self.assertEqual(value, obj2[key])"},{"line_number":1625,"context_line":""},{"line_number":1626,"context_line":"    def _assertEqualListsOfObjects(self, objs1, objs2, ignored_keys\u003d[]):"},{"line_number":1627,"context_line":"        self.assertEqual(len(objs1), len(objs2))"},{"line_number":1628,"context_line":"        objs2 \u003d dict([(o[\u0027id\u0027], o) for o in objs2])"},{"line_number":1629,"context_line":"        for o1 in objs1:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOH%2F%2F9AY%3D","line":1626,"in_reply_to":"AAAAOH%2F%2F9Dg%3D","updated":"2013-03-19 18:07:00.000000000","message":"bug/typo, yes this method should also get this parameter and use it in _assertEqualObjects.","commit_id":"869fa6e708d3dbb2af26e6326c2d6eb91e7c9fa6"}]}
