)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"126b3bbbe0728395f43cdcffa81a8f9c102b4945","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix str2dict and dict2str\u0027s incorrect behavior"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Fixes bug 1258065"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: Idf14c077eeeda6f18f534ad8f62cd741d0c0a2eb"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAATn%2F91pk%3D","line":9,"updated":"2013-12-05 11:55:03.000000000","message":"Closes-bug: #1258065","commit_id":"458f3abea8a1a93b3300e5ee165507aad043fa06"}],"neutron/common/utils.py":[{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"6edb5f2355af05ff1930afee0a0294e09ca50651","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"def dict2str(dic):"},{"line_number":178,"context_line":"    return json.dumps(sorted(dic.iteritems()))"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"def str2dict(string):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F91I0%3D","line":178,"updated":"2013-12-05 13:57:35.000000000","message":"Maybe \n json.dumps(dic.items())\n\nshould be sufficient because the results are used only as items in unordered set, therefore the ordering is lost anyway.","commit_id":"458f3abea8a1a93b3300e5ee165507aad043fa06"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"3e2ce1c68fb69846bdeb3862a9ef4d5413c59c22","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"def dict2str(dic):"},{"line_number":178,"context_line":"    return json.dumps(sorted(dic.iteritems()))"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"def str2dict(string):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F90hM%3D","line":178,"in_reply_to":"AAAATn%2F906U%3D","updated":"2013-12-05 15:38:01.000000000","message":"My point was that you don\u0027t need to have same order because set used in diff_list_of_dict is not ordered anyway.","commit_id":"458f3abea8a1a93b3300e5ee165507aad043fa06"},{"author":{"_account_id":7676,"name":"Jianing Yang","email":"jianingy.yang@gmail.com","username":"jianingy"},"change_message_id":"df8b79f97f4c7febbecaea6cf2c6c87af3e2967b","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"def dict2str(dic):"},{"line_number":178,"context_line":"    return json.dumps(sorted(dic.iteritems()))"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"def str2dict(string):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F906U%3D","line":178,"in_reply_to":"AAAATn%2F91I0%3D","updated":"2013-12-05 14:34:43.000000000","message":"frankly, i am not sure if dict.items() guarantee to return in the same order every time (don\u0027t know if some sort of changes between two calls of items() might change its order?). So I take a safe move here.","commit_id":"458f3abea8a1a93b3300e5ee165507aad043fa06"},{"author":{"_account_id":8641,"name":"DennyZhang","email":"filebat.mark@gmail.com","username":"dennyzhang"},"change_message_id":"c0a117f7ba867161efadb0fe3076b8782bda9c12","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"def str2dict(string):"},{"line_number":182,"context_line":"    return dict(json.loads(string))"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"def diff_list_of_dict(old_list, new_list):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F91F4%3D","line":182,"updated":"2013-12-05 14:08:50.000000000","message":"Please notes:\n1. OK:  json.loads(\u0027{inside_addr:10.0.1.2,inside_port:22}\u0027) \n2. ERROR: json.loads(\u0027inside_addr:10.0.1.2,inside_port:22\u0027)","commit_id":"458f3abea8a1a93b3300e5ee165507aad043fa06"},{"author":{"_account_id":8655,"name":"Jakub Libosvar","email":"libosvar@redhat.com","username":"jlibosva"},"change_message_id":"3e2ce1c68fb69846bdeb3862a9ef4d5413c59c22","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"def str2dict(string):"},{"line_number":182,"context_line":"    return dict(json.loads(string))"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"def diff_list_of_dict(old_list, new_list):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F90gI%3D","line":182,"in_reply_to":"AAAATn%2F91F4%3D","updated":"2013-12-05 15:38:01.000000000","message":"IIUC the functions above are used only in diff_list_of_dict thus your use case no. 2 is not relevant. I might be wrong but I didn\u0027t see usage of the functions above anywhere.","commit_id":"458f3abea8a1a93b3300e5ee165507aad043fa06"}],"neutron/tests/unit/test_common_utils.py":[{"author":{"_account_id":8641,"name":"DennyZhang","email":"filebat.mark@gmail.com","username":"dennyzhang"},"change_message_id":"c0a117f7ba867161efadb0fe3076b8782bda9c12","unresolved":false,"context_lines":[{"line_number":290,"context_line":""},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"class TestDictUtils(base.BaseTestCase):"},{"line_number":293,"context_line":"    def test_dict_str_conversion(self):"},{"line_number":294,"context_line":"        dic \u003d {\"key1\": \"value1\", \"key2\": \"value2\","},{"line_number":295,"context_line":"               \"key3\": \"subkey1\u003dsubvalue1,subkey2\u003dsubvalue2\"}"},{"line_number":296,"context_line":"        self.assertEqual(utils.str2dict(utils.dict2str(dic)), dic)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F91Fk%3D","line":293,"updated":"2013-12-05 14:08:50.000000000","message":"Please add dedicate test cases for str2dict and dict2str respectively. Like encryption and decryption, they may both have problem, but decryption(encryption(Data)) may equals Data.","commit_id":"458f3abea8a1a93b3300e5ee165507aad043fa06"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"11a363a6a4af6d2e2d9eefa8f15926016984562b","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        expected \u003d \"key1\u003dvalue1,key2\u003dvalue2\""},{"line_number":296,"context_line":"        self.assertEqual(utils.dict2str(dic), expected)"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"    def test_str2dict(self):"},{"line_number":299,"context_line":"        string\u003d \"key1\u003dvalue1,key2\u003dvalue2\""},{"line_number":300,"context_line":"        expected \u003d {\"key1\": \"value1\", \"key2\": \"value2\"}"},{"line_number":301,"context_line":"        self.assertEqual(utils.str2dict(string), expected)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F9x6g%3D","line":298,"updated":"2013-12-06 00:21:54.000000000","message":"add a case to test more than 2 key value pairs, please","commit_id":"c58bcac07bee6f1786b8a97ec79189cc89c645c0"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a542eb4729e51fe6c9864dddb180dbb968c4da41","unresolved":false,"context_lines":[{"line_number":296,"context_line":"        self.assertEqual(utils.dict2str(dic), expected)"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"    def test_str2dict(self):"},{"line_number":299,"context_line":"        string\u003d \"key1\u003dvalue1,key2\u003dvalue2\""},{"line_number":300,"context_line":"        expected \u003d {\"key1\": \"value1\", \"key2\": \"value2\"}"},{"line_number":301,"context_line":"        self.assertEqual(utils.str2dict(string), expected)"},{"line_number":302,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F90UA%3D","line":299,"updated":"2013-12-05 16:10:44.000000000","message":"Need a space before \u0027\u003d\u0027","commit_id":"c58bcac07bee6f1786b8a97ec79189cc89c645c0"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"a542eb4729e51fe6c9864dddb180dbb968c4da41","unresolved":false,"context_lines":[{"line_number":305,"context_line":"        self.assertEqual(utils.str2dict(utils.dict2str(dic)), dic)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def test_diff_list_of_dict(self):"},{"line_number":308,"context_line":"        old_list \u003d [dict(key1\u003d\"value1\"),"},{"line_number":309,"context_line":"                    dict(key2\u003d\"value2\"),"},{"line_number":310,"context_line":"                    dict(key3\u003d\"value3\")]"},{"line_number":311,"context_line":"        new_list \u003d [dict(key1\u003d\"value1\"),"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F90So%3D","line":308,"updated":"2013-12-05 16:10:44.000000000","message":"Please use {\u0027key1\u0027: \u0027value1\u0027} style. It is a recommended way because it cost less.","commit_id":"c58bcac07bee6f1786b8a97ec79189cc89c645c0"}]}
