)]}'
{"neutron/tests/base.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a4a5ab7093c891448ebef4268381154fca724d1c","unresolved":false,"context_lines":[{"line_number":62,"context_line":"class BaseTestCase(testtools.TestCase):"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def check_python_version(self, hexcode):"},{"line_number":65,"context_line":"        if sys.hexversion \u003e\u003d hexcode:"},{"line_number":66,"context_line":"            return True"},{"line_number":67,"context_line":"        else:"},{"line_number":68,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_1efa30ba","line":65,"updated":"2014-08-07 13:39:23.000000000","message":"\u0027return sys.hexversion \u003e\u003d hexcode\u0027 seems to be better. Also, I don\u0027t personally like that hexversion thing, I would better use sys.version_info instead (comparing it to a tuple that corresponds to your python version, f.e. (2, 6), but that\u0027s more of taste.","commit_id":"693ce40abc6adeb764046184f7951690a1c5b972"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d4c08e093cafc903f6556edfe139d859dce9f4c2","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        else:"},{"line_number":68,"context_line":"            return False"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def check_dict_equality(self, dictA, dictB):"},{"line_number":71,"context_line":"        self.assertEqual("},{"line_number":72,"context_line":"            dictA,"},{"line_number":73,"context_line":"            dict((k, v) for k, v"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_7ed96c55","line":70,"updated":"2014-08-07 13:24:04.000000000","message":"Suggest calling this assertDictEqual() and do either algorithm or call base method based on python version.","commit_id":"693ce40abc6adeb764046184f7951690a1c5b972"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a4a5ab7093c891448ebef4268381154fca724d1c","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        else:"},{"line_number":68,"context_line":"            return False"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def check_dict_equality(self, dictA, dictB):"},{"line_number":71,"context_line":"        self.assertEqual("},{"line_number":72,"context_line":"            dictA,"},{"line_number":73,"context_line":"            dict((k, v) for k, v"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_3eb614fd","line":70,"updated":"2014-08-07 13:39:23.000000000","message":"The name of the method doesn\u0027t seem to correspond to its intent. You\u0027re not searching for equality but whether dictA members are a subset of dictB.","commit_id":"693ce40abc6adeb764046184f7951690a1c5b972"}],"neutron/tests/unit/db/vpn/test_db_vpnaas.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"a0916a81865bd9aadd40bbc3b41c0667ad52fba3","unresolved":false,"context_lines":[{"line_number":1253,"context_line":"                    if expected_status_int \u003d\u003d 200:"},{"line_number":1254,"context_line":"                        res_dict \u003d self.deserialize(self.fmt, res)"},{"line_number":1255,"context_line":"                        for k, v in update.items():"},{"line_number":1256,"context_line":"                            reference \u003d res_dict[\u0027ipsec_site_connection\u0027]"},{"line_number":1257,"context_line":"                            # Account for dict passed by dpd test"},{"line_number":1258,"context_line":"                            if k \u003d\u003d \u0027dpd\u0027:"},{"line_number":1259,"context_line":"                                self.assertEqual("}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_a6d6c1f0","line":1256,"updated":"2014-08-06 15:27:00.000000000","message":"Essentially, we want to compare two nested dicts, right? Since Python 2.6 doesn\u0027t support this (but it is is useful), should we create a common helper function that everyone can use? Maybe it can check if python 2.7 and use the assertDictEqual(), otherwise use a routine to compare for 2.6.","commit_id":"6fd363dbea42ba9ba4a3f2046a742636b6c3e171"},{"author":{"_account_id":6635,"name":"John Davidge","email":"john.davidge@rackspace.com","username":"john-davidge"},"change_message_id":"de52991cf95c1663c7001d875267ebe33c2737f1","unresolved":false,"context_lines":[{"line_number":1253,"context_line":"                    if expected_status_int \u003d\u003d 200:"},{"line_number":1254,"context_line":"                        res_dict \u003d self.deserialize(self.fmt, res)"},{"line_number":1255,"context_line":"                        for k, v in update.items():"},{"line_number":1256,"context_line":"                            reference \u003d res_dict[\u0027ipsec_site_connection\u0027]"},{"line_number":1257,"context_line":"                            # Account for dict passed by dpd test"},{"line_number":1258,"context_line":"                            if k \u003d\u003d \u0027dpd\u0027:"},{"line_number":1259,"context_line":"                                self.assertEqual("}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_c059d68e","line":1256,"in_reply_to":"baada198_a6d6c1f0","updated":"2014-08-08 14:51:53.000000000","message":"This sounds sensible. Implemented in latest patch set.","commit_id":"6fd363dbea42ba9ba4a3f2046a742636b6c3e171"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"e3ffc32ac0e94b3083a23a228f3fb8347e35fb1a","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        for k, v in lifetime.iteritems():"},{"line_number":453,"context_line":"            self.assertEqual(policy[\u0027lifetime\u0027][k], v)"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"    def _check_dpd(self, dpd, ipsec_site_connection):"},{"line_number":456,"context_line":"        # Check if the system can use features of python \u003e 2.7"},{"line_number":457,"context_line":"        if sys.hexversion \u003c 0x02070000:"},{"line_number":458,"context_line":"            self.assertEqual("}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_23161cf3","line":455,"updated":"2014-08-06 17:49:38.000000000","message":"I think this helper function is not reaching totally what Paul suggested on Patch 3. The helper function should be more generic and only verifying the python version in order to leverage the nested dictionaries feature.","commit_id":"05ae2a186edb83254d32b5c73e2c0994deb23112"},{"author":{"_account_id":6635,"name":"John Davidge","email":"john.davidge@rackspace.com","username":"john-davidge"},"change_message_id":"38bb41a02ddf9a07caac04eb1a30833fc4f54e67","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        for k, v in lifetime.iteritems():"},{"line_number":453,"context_line":"            self.assertEqual(policy[\u0027lifetime\u0027][k], v)"},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"    def _check_dpd(self, dpd, ipsec_site_connection):"},{"line_number":456,"context_line":"        # Check if the system can use features of python \u003e 2.7"},{"line_number":457,"context_line":"        if sys.hexversion \u003c 0x02070000:"},{"line_number":458,"context_line":"            self.assertEqual("}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_26f8ea49","line":455,"in_reply_to":"baada198_23161cf3","updated":"2014-08-08 14:51:45.000000000","message":"Addressed this point whilst still attempting to reduce code duplication.","commit_id":"05ae2a186edb83254d32b5c73e2c0994deb23112"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"4840660b1772292d5257ce3fa350964056caef4d","unresolved":false,"context_lines":[{"line_number":466,"context_line":"            dpd,"},{"line_number":467,"context_line":"            dict((k, v) for k, v"},{"line_number":468,"context_line":"                in ipsec_site_connection[\u0027dpd\u0027].items()"},{"line_number":469,"context_line":"                if k in dpd))"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":"    def test_create_ikepolicy(self):"},{"line_number":472,"context_line":"        \"\"\"Test case to create an ikepolicy.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_89bb8973","line":469,"updated":"2014-08-06 18:54:55.000000000","message":"can you make this more generic and it in e.g. BaseTestCase?","commit_id":"0e80fc77c96ed19061159f5d6fe2d2359c521e16"},{"author":{"_account_id":6635,"name":"John Davidge","email":"john.davidge@rackspace.com","username":"john-davidge"},"change_message_id":"9ab6f1245bd890374a922af090eb5a1196130d6e","unresolved":false,"context_lines":[{"line_number":466,"context_line":"            dpd,"},{"line_number":467,"context_line":"            dict((k, v) for k, v"},{"line_number":468,"context_line":"                in ipsec_site_connection[\u0027dpd\u0027].items()"},{"line_number":469,"context_line":"                if k in dpd))"},{"line_number":470,"context_line":""},{"line_number":471,"context_line":"    def test_create_ikepolicy(self):"},{"line_number":472,"context_line":"        \"\"\"Test case to create an ikepolicy.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_886a8ab3","line":469,"in_reply_to":"baada198_89bb8973","updated":"2014-08-08 14:51:37.000000000","message":"Made more generic and added to BaseTestCase.","commit_id":"0e80fc77c96ed19061159f5d6fe2d2359c521e16"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"d4c08e093cafc903f6556edfe139d859dce9f4c2","unresolved":false,"context_lines":[{"line_number":392,"context_line":"            dict((k, v) for k, v"},{"line_number":393,"context_line":"                 in ipsec_site_connection.items()"},{"line_number":394,"context_line":"                 if k in keys))"},{"line_number":395,"context_line":"        if self.check_python_version(0x02070000):"},{"line_number":396,"context_line":"            self.assertDictEqual(dpd, ipsec_site_connection[\u0027dpd\u0027])"},{"line_number":397,"context_line":"        else:"},{"line_number":398,"context_line":"            self.check_dict_equality(dpd, ipsec_site_connection[\u0027dpd\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_fefe5cae","line":395,"updated":"2014-08-07 13:24:04.000000000","message":"If override assertDictEqual() in base, can then change all these to be one method call and base test can be changed when py26 is deprecated.","commit_id":"693ce40abc6adeb764046184f7951690a1c5b972"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a4a5ab7093c891448ebef4268381154fca724d1c","unresolved":false,"context_lines":[{"line_number":393,"context_line":"                 in ipsec_site_connection.items()"},{"line_number":394,"context_line":"                 if k in keys))"},{"line_number":395,"context_line":"        if self.check_python_version(0x02070000):"},{"line_number":396,"context_line":"            self.assertDictEqual(dpd, ipsec_site_connection[\u0027dpd\u0027])"},{"line_number":397,"context_line":"        else:"},{"line_number":398,"context_line":"            self.check_dict_equality(dpd, ipsec_site_connection[\u0027dpd\u0027])"},{"line_number":399,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_1c3799b0","line":396,"updated":"2014-08-07 13:39:23.000000000","message":"assertDictEqual is used by assertEqual if dicts are passed. Also, the previous version checked for subset, and you check for equality.\n\nSo I\u0027m actually confused why your patch helps to fix the test. Can you elaborate how it got into the failure state?","commit_id":"693ce40abc6adeb764046184f7951690a1c5b972"},{"author":{"_account_id":6635,"name":"John Davidge","email":"john.davidge@rackspace.com","username":"john-davidge"},"change_message_id":"f840aa4d572ed2bdb302f9b8cab04c4f6e05346a","unresolved":false,"context_lines":[{"line_number":393,"context_line":"                 in ipsec_site_connection.items()"},{"line_number":394,"context_line":"                 if k in keys))"},{"line_number":395,"context_line":"        if self.check_python_version(0x02070000):"},{"line_number":396,"context_line":"            self.assertDictEqual(dpd, ipsec_site_connection[\u0027dpd\u0027])"},{"line_number":397,"context_line":"        else:"},{"line_number":398,"context_line":"            self.check_dict_equality(dpd, ipsec_site_connection[\u0027dpd\u0027])"},{"line_number":399,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_0229f239","line":396,"in_reply_to":"baada198_1c3799b0","updated":"2014-08-08 14:51:25.000000000","message":"On further investigation it seems the the failure was simply caused by the introduction of sorting. I had assumed it was a problem with assertEqual being unable to adequately deal with a dictionary but this is not the case. Have removed much of the extra code and simply replaced with a check to ensure the dpd dictionary does not get sorted before testing.","commit_id":"693ce40abc6adeb764046184f7951690a1c5b972"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a4a5ab7093c891448ebef4268381154fca724d1c","unresolved":false,"context_lines":[{"line_number":1259,"context_line":"                    if expected_status_int \u003d\u003d 200:"},{"line_number":1260,"context_line":"                        res_dict \u003d self.deserialize(self.fmt, res)"},{"line_number":1261,"context_line":"                        for k, v in update.items():"},{"line_number":1262,"context_line":"                            reference \u003d res_dict[\u0027ipsec_site_connection\u0027]"},{"line_number":1263,"context_line":"                            # Account for dict passed by dpd test"},{"line_number":1264,"context_line":"                            if k \u003d\u003d \u0027dpd\u0027:"},{"line_number":1265,"context_line":"                                if self.check_python_version(0x02070000):"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_7c1c1515","line":1262,"updated":"2014-08-07 13:39:23.000000000","message":"so you fetch each loop iteration. why?","commit_id":"693ce40abc6adeb764046184f7951690a1c5b972"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a4a5ab7093c891448ebef4268381154fca724d1c","unresolved":false,"context_lines":[{"line_number":1261,"context_line":"                        for k, v in update.items():"},{"line_number":1262,"context_line":"                            reference \u003d res_dict[\u0027ipsec_site_connection\u0027]"},{"line_number":1263,"context_line":"                            # Account for dict passed by dpd test"},{"line_number":1264,"context_line":"                            if k \u003d\u003d \u0027dpd\u0027:"},{"line_number":1265,"context_line":"                                if self.check_python_version(0x02070000):"},{"line_number":1266,"context_line":"                                    self.assertDictEqual("},{"line_number":1267,"context_line":"                                        v,"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_dc960149","line":1264,"updated":"2014-08-07 13:39:23.000000000","message":"it\u0027s not clear why dpd is so special.","commit_id":"693ce40abc6adeb764046184f7951690a1c5b972"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"a4a5ab7093c891448ebef4268381154fca724d1c","unresolved":false,"context_lines":[{"line_number":1263,"context_line":"                            # Account for dict passed by dpd test"},{"line_number":1264,"context_line":"                            if k \u003d\u003d \u0027dpd\u0027:"},{"line_number":1265,"context_line":"                                if self.check_python_version(0x02070000):"},{"line_number":1266,"context_line":"                                    self.assertDictEqual("},{"line_number":1267,"context_line":"                                        v,"},{"line_number":1268,"context_line":"                                        reference[\u0027dpd\u0027])"},{"line_number":1269,"context_line":"                                else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_9cc1e932","line":1266,"updated":"2014-08-07 13:39:23.000000000","message":"assertDictEqual is the same as assertEqual if dicts are passed.","commit_id":"693ce40abc6adeb764046184f7951690a1c5b972"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"9439ec7648f6a0fe7a273a6a7f198c6ea4e553bb","unresolved":false,"context_lines":[{"line_number":396,"context_line":"            dpd,"},{"line_number":397,"context_line":"            dict((k, v) for k, v"},{"line_number":398,"context_line":"                in ipsec_site_connection[\u0027dpd\u0027].items()"},{"line_number":399,"context_line":"                if k in dpd))"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"    def _set_active(self, model, resource_id):"},{"line_number":402,"context_line":"        service_plugin \u003d manager.NeutronManager.get_service_plugins()["}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_cb47154b","line":399,"updated":"2014-08-07 15:37:35.000000000","message":"Revert this change.","commit_id":"29861b74c46a04f6a602d021e398dacb0ebe0aac"},{"author":{"_account_id":6635,"name":"John Davidge","email":"john.davidge@rackspace.com","username":"john-davidge"},"change_message_id":"ce87bb46f6506a1020e03a24f6f7b4df9bc619dd","unresolved":false,"context_lines":[{"line_number":396,"context_line":"            dpd,"},{"line_number":397,"context_line":"            dict((k, v) for k, v"},{"line_number":398,"context_line":"                in ipsec_site_connection[\u0027dpd\u0027].items()"},{"line_number":399,"context_line":"                if k in dpd))"},{"line_number":400,"context_line":""},{"line_number":401,"context_line":"    def _set_active(self, model, resource_id):"},{"line_number":402,"context_line":"        service_plugin \u003d manager.NeutronManager.get_service_plugins()["}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_2bb6d1db","line":399,"in_reply_to":"baada198_cb47154b","updated":"2014-08-08 14:51:13.000000000","message":"Done","commit_id":"29861b74c46a04f6a602d021e398dacb0ebe0aac"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"671e7b6b793cf20199fc7c21d9ef7bf41f53698a","unresolved":false,"context_lines":[{"line_number":1254,"context_line":"                        res_dict \u003d self.deserialize(self.fmt, res)"},{"line_number":1255,"context_line":"                        for k, v in update.items():"},{"line_number":1256,"context_line":"                            reference \u003d res_dict[\u0027ipsec_site_connection\u0027]"},{"line_number":1257,"context_line":"                            if isinstance(reference[k], int) or k \u003d\u003d \u0027dpd\u0027:"},{"line_number":1258,"context_line":"                                self.assertEqual(reference[k], v)"},{"line_number":1259,"context_line":"                            else:"},{"line_number":1260,"context_line":"                                self.assertEqual(sorted(reference[k]), v)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_d0726049","line":1257,"updated":"2014-08-07 15:24:30.000000000","message":"Maybe you should add a comment, why \u0027dpd\u0027 is a special case?","commit_id":"29861b74c46a04f6a602d021e398dacb0ebe0aac"},{"author":{"_account_id":6635,"name":"John Davidge","email":"john.davidge@rackspace.com","username":"john-davidge"},"change_message_id":"ce87bb46f6506a1020e03a24f6f7b4df9bc619dd","unresolved":false,"context_lines":[{"line_number":1254,"context_line":"                        res_dict \u003d self.deserialize(self.fmt, res)"},{"line_number":1255,"context_line":"                        for k, v in update.items():"},{"line_number":1256,"context_line":"                            reference \u003d res_dict[\u0027ipsec_site_connection\u0027]"},{"line_number":1257,"context_line":"                            if isinstance(reference[k], int) or k \u003d\u003d \u0027dpd\u0027:"},{"line_number":1258,"context_line":"                                self.assertEqual(reference[k], v)"},{"line_number":1259,"context_line":"                            else:"},{"line_number":1260,"context_line":"                                self.assertEqual(sorted(reference[k]), v)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_6bb0c9dc","line":1257,"in_reply_to":"baada198_d0726049","updated":"2014-08-08 14:51:13.000000000","message":"Done","commit_id":"29861b74c46a04f6a602d021e398dacb0ebe0aac"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"06b00e5b5d7c6a416ad203807e0fb0bc3b18e893","unresolved":false,"context_lines":[{"line_number":1253,"context_line":"                    if expected_status_int \u003d\u003d 200:"},{"line_number":1254,"context_line":"                        res_dict \u003d self.deserialize(self.fmt, res)"},{"line_number":1255,"context_line":"                        for k, v in update.items():"},{"line_number":1256,"context_line":"                            reference \u003d res_dict[\u0027ipsec_site_connection\u0027]"},{"line_number":1257,"context_line":"                            # Do not sort int or dict objects"},{"line_number":1258,"context_line":"                            if (isinstance(reference[k], int) or"},{"line_number":1259,"context_line":"                                isinstance(reference[k], dict)):"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_2d0fbe3a","line":1256,"updated":"2014-08-07 20:54:49.000000000","message":"the value does not change during the loop, so there is no need to re-fetch it each iteration.","commit_id":"085937091cfaa6bbfeca1c0e4a97c6bce89466c4"},{"author":{"_account_id":6635,"name":"John Davidge","email":"john.davidge@rackspace.com","username":"john-davidge"},"change_message_id":"7682058aa4e680174545e6c4118175e5b41c8714","unresolved":false,"context_lines":[{"line_number":1253,"context_line":"                    if expected_status_int \u003d\u003d 200:"},{"line_number":1254,"context_line":"                        res_dict \u003d self.deserialize(self.fmt, res)"},{"line_number":1255,"context_line":"                        for k, v in update.items():"},{"line_number":1256,"context_line":"                            reference \u003d res_dict[\u0027ipsec_site_connection\u0027]"},{"line_number":1257,"context_line":"                            # Do not sort int or dict objects"},{"line_number":1258,"context_line":"                            if (isinstance(reference[k], int) or"},{"line_number":1259,"context_line":"                                isinstance(reference[k], dict)):"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_1c3775e5","line":1256,"in_reply_to":"baada198_2d0fbe3a","updated":"2014-08-08 14:50:59.000000000","message":"Done","commit_id":"085937091cfaa6bbfeca1c0e4a97c6bce89466c4"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"06b00e5b5d7c6a416ad203807e0fb0bc3b18e893","unresolved":false,"context_lines":[{"line_number":1254,"context_line":"                        res_dict \u003d self.deserialize(self.fmt, res)"},{"line_number":1255,"context_line":"                        for k, v in update.items():"},{"line_number":1256,"context_line":"                            reference \u003d res_dict[\u0027ipsec_site_connection\u0027]"},{"line_number":1257,"context_line":"                            # Do not sort int or dict objects"},{"line_number":1258,"context_line":"                            if (isinstance(reference[k], int) or"},{"line_number":1259,"context_line":"                                isinstance(reference[k], dict)):"},{"line_number":1260,"context_line":"                                self.assertEqual(reference[k], v)"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_e8e5b43e","line":1257,"updated":"2014-08-07 20:54:49.000000000","message":"And how about strings?.. ;) I would go the other way, by applying sorted() to those types that are known to be ok, leaving all other with no sorting.","commit_id":"085937091cfaa6bbfeca1c0e4a97c6bce89466c4"},{"author":{"_account_id":6635,"name":"John Davidge","email":"john.davidge@rackspace.com","username":"john-davidge"},"change_message_id":"7682058aa4e680174545e6c4118175e5b41c8714","unresolved":false,"context_lines":[{"line_number":1254,"context_line":"                        res_dict \u003d self.deserialize(self.fmt, res)"},{"line_number":1255,"context_line":"                        for k, v in update.items():"},{"line_number":1256,"context_line":"                            reference \u003d res_dict[\u0027ipsec_site_connection\u0027]"},{"line_number":1257,"context_line":"                            # Do not sort int or dict objects"},{"line_number":1258,"context_line":"                            if (isinstance(reference[k], int) or"},{"line_number":1259,"context_line":"                                isinstance(reference[k], dict)):"},{"line_number":1260,"context_line":"                                self.assertEqual(reference[k], v)"}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_5c2d6d8f","line":1257,"in_reply_to":"baada198_e8e5b43e","updated":"2014-08-08 14:50:59.000000000","message":"Done","commit_id":"085937091cfaa6bbfeca1c0e4a97c6bce89466c4"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"255fb4f83985817b23d83430fdcc0fbbf10a89ea","unresolved":false,"context_lines":[{"line_number":1255,"context_line":"                        reference \u003d res_dict[\u0027ipsec_site_connection\u0027]"},{"line_number":1256,"context_line":"                        for k, v in update.items():"},{"line_number":1257,"context_line":"                            # Sort lists before checking equality"},{"line_number":1258,"context_line":"                            if isinstance(reference[k], list):"},{"line_number":1259,"context_line":"                                self.assertEqual(sorted(reference[k]), v)"},{"line_number":1260,"context_line":"                            else:"},{"line_number":1261,"context_line":"                                self.assertEqual(reference[k], v)"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_3758d256","line":1258,"updated":"2014-08-08 11:17:34.000000000","message":"i prefer to make this conditional check the key (eg. \"peer_cidrs\") rather than a type of value because it would be stricter.","commit_id":"4f9b096056b45a574a16183599076a04f20d005e"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"5aec10bea006a21c3333211b30aa5d16ed358dce","unresolved":false,"context_lines":[{"line_number":1255,"context_line":"                        reference \u003d res_dict[\u0027ipsec_site_connection\u0027]"},{"line_number":1256,"context_line":"                        for k, v in update.items():"},{"line_number":1257,"context_line":"                            # Sort lists before checking equality"},{"line_number":1258,"context_line":"                            if isinstance(reference[k], list):"},{"line_number":1259,"context_line":"                                self.assertEqual(sorted(reference[k]), v)"},{"line_number":1260,"context_line":"                            else:"},{"line_number":1261,"context_line":"                                self.assertEqual(reference[k], v)"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_8f8986c9","line":1258,"in_reply_to":"baada198_3758d256","updated":"2014-08-08 12:56:07.000000000","message":"I am fine either way.","commit_id":"4f9b096056b45a574a16183599076a04f20d005e"},{"author":{"_account_id":6635,"name":"John Davidge","email":"john.davidge@rackspace.com","username":"john-davidge"},"change_message_id":"c94c11e459be63629508532545c81af8b7f0b3f6","unresolved":false,"context_lines":[{"line_number":1255,"context_line":"                        reference \u003d res_dict[\u0027ipsec_site_connection\u0027]"},{"line_number":1256,"context_line":"                        for k, v in update.items():"},{"line_number":1257,"context_line":"                            # Sort lists before checking equality"},{"line_number":1258,"context_line":"                            if isinstance(reference[k], list):"},{"line_number":1259,"context_line":"                                self.assertEqual(sorted(reference[k]), v)"},{"line_number":1260,"context_line":"                            else:"},{"line_number":1261,"context_line":"                                self.assertEqual(reference[k], v)"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_9d28dfef","line":1258,"in_reply_to":"baada198_3758d256","updated":"2014-08-08 14:39:04.000000000","message":"This check needs to ensure that no dictionaries at all are sorted. In this case the only dictionary this affects is the \"peer_cidrs\" dictionary, but personally I prefer the type check in case more dictionaries are added to this test case in the future.","commit_id":"4f9b096056b45a574a16183599076a04f20d005e"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"f015547edb97d2e0e044921054d7a90c2b9855e1","unresolved":false,"context_lines":[{"line_number":1255,"context_line":"                        reference \u003d res_dict[\u0027ipsec_site_connection\u0027]"},{"line_number":1256,"context_line":"                        for k, v in update.items():"},{"line_number":1257,"context_line":"                            # Sort lists before checking equality"},{"line_number":1258,"context_line":"                            if isinstance(reference[k], list):"},{"line_number":1259,"context_line":"                                self.assertEqual(sorted(reference[k]), v)"},{"line_number":1260,"context_line":"                            else:"},{"line_number":1261,"context_line":"                                self.assertEqual(reference[k], v)"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_cbb7a7d5","line":1258,"in_reply_to":"baada198_9d28dfef","updated":"2014-08-11 19:11:29.000000000","message":"Isn\u0027t the real issue that peer_cidrs is a dictionary element (key) that contains a list of IPs and that list can be in any order. Comparing dict\u0027s, like DPD, should not be an issue.","commit_id":"4f9b096056b45a574a16183599076a04f20d005e"},{"author":{"_account_id":6635,"name":"John Davidge","email":"john.davidge@rackspace.com","username":"john-davidge"},"change_message_id":"078f7ac94ba5887bc867b30959a3d8796afd763a","unresolved":false,"context_lines":[{"line_number":1255,"context_line":"                        reference \u003d res_dict[\u0027ipsec_site_connection\u0027]"},{"line_number":1256,"context_line":"                        for k, v in update.items():"},{"line_number":1257,"context_line":"                            # Sort lists before checking equality"},{"line_number":1258,"context_line":"                            if isinstance(reference[k], list):"},{"line_number":1259,"context_line":"                                self.assertEqual(sorted(reference[k]), v)"},{"line_number":1260,"context_line":"                            else:"},{"line_number":1261,"context_line":"                                self.assertEqual(reference[k], v)"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_8cc4d094","line":1258,"in_reply_to":"baada198_cbb7a7d5","updated":"2014-08-12 09:58:10.000000000","message":"That was the original issue, yes. The problem I\u0027m fixing here is that if we simply sort all data before passing it to the assertEqual method we run into issues with elements that are unsortable (e.g. integers) or that give unexpected results when sorted. In this case the DPD dict has its values stripped out and simply becomes a list of its keys after being sorted, so I\u0027ve included a check to make sure only list types are sorted before checking equality.","commit_id":"4f9b096056b45a574a16183599076a04f20d005e"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"f015547edb97d2e0e044921054d7a90c2b9855e1","unresolved":false,"context_lines":[{"line_number":1256,"context_line":"                        for k, v in update.items():"},{"line_number":1257,"context_line":"                            # Sort lists before checking equality"},{"line_number":1258,"context_line":"                            if isinstance(reference[k], list):"},{"line_number":1259,"context_line":"                                self.assertEqual(sorted(reference[k]), v)"},{"line_number":1260,"context_line":"                            else:"},{"line_number":1261,"context_line":"                                self.assertEqual(reference[k], v)"},{"line_number":1262,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_cb2de746","line":1259,"updated":"2014-08-11 19:11:29.000000000","message":"The assert should be expected value and then actual value. Looks like there are two problems here. First, they are reversed. Second, the actual is named \u0027reference\u0027 which is really misleading. Rather see actual used, instead of reference.","commit_id":"4f9b096056b45a574a16183599076a04f20d005e"},{"author":{"_account_id":6635,"name":"John Davidge","email":"john.davidge@rackspace.com","username":"john-davidge"},"change_message_id":"078f7ac94ba5887bc867b30959a3d8796afd763a","unresolved":false,"context_lines":[{"line_number":1256,"context_line":"                        for k, v in update.items():"},{"line_number":1257,"context_line":"                            # Sort lists before checking equality"},{"line_number":1258,"context_line":"                            if isinstance(reference[k], list):"},{"line_number":1259,"context_line":"                                self.assertEqual(sorted(reference[k]), v)"},{"line_number":1260,"context_line":"                            else:"},{"line_number":1261,"context_line":"                                self.assertEqual(reference[k], v)"},{"line_number":1262,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_ec562c2a","line":1259,"in_reply_to":"baada198_cb2de746","updated":"2014-08-12 09:58:10.000000000","message":"Done","commit_id":"4f9b096056b45a574a16183599076a04f20d005e"}]}
