)]}'
{"keystone/common/utils.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"7801578ad87f9998913ae6e3a183c10b6a30c8ce","unresolved":false,"context_lines":[{"line_number":81,"context_line":"class SmarterEncoder(jsonutils.json.JSONEncoder):"},{"line_number":82,"context_line":"    \"\"\"Help for JSON encoding dict-like objects.\"\"\""},{"line_number":83,"context_line":"    def default(self, obj):"},{"line_number":84,"context_line":"        if not isinstance(obj, dict) and hasattr(obj, \u0027iteritems\u0027):"},{"line_number":85,"context_line":"            return dict(obj.iteritems())"},{"line_number":86,"context_line":"        return super(SmarterEncoder, self).default(obj)"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_3006fb85","line":84,"updated":"2015-07-31 14:47:05.000000000","message":"I think you should also remove the hasattr check. This won\u0027t work on Python 3 since there is not itemitems method.?","commit_id":"1eb58965c6de1a8c97fc91312b128ce4e3636b9f"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"890d5a735add7be6fb6d3e65066e47d5deb31188","unresolved":false,"context_lines":[{"line_number":81,"context_line":"class SmarterEncoder(jsonutils.json.JSONEncoder):"},{"line_number":82,"context_line":"    \"\"\"Help for JSON encoding dict-like objects.\"\"\""},{"line_number":83,"context_line":"    def default(self, obj):"},{"line_number":84,"context_line":"        if not isinstance(obj, dict) and hasattr(obj, \u0027iteritems\u0027):"},{"line_number":85,"context_line":"            return dict(obj.iteritems())"},{"line_number":86,"context_line":"        return super(SmarterEncoder, self).default(obj)"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a50d1a3_ad3dc9de","line":84,"in_reply_to":"3a50d1a3_3006fb85","updated":"2015-07-31 19:36:17.000000000","message":"Switching to items() here should work since a copy is returned. I\u0027ll proposed that instead.","commit_id":"1eb58965c6de1a8c97fc91312b128ce4e3636b9f"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"971963b3fea4ef24958eaa9f86cc36462b85253e","unresolved":false,"context_lines":[{"line_number":82,"context_line":"class SmarterEncoder(jsonutils.json.JSONEncoder):"},{"line_number":83,"context_line":"    \"\"\"Help for JSON encoding dict-like objects.\"\"\""},{"line_number":84,"context_line":"    def default(self, obj):"},{"line_number":85,"context_line":"        if not isinstance(obj, dict) and hasattr(obj, \u0027items\u0027):"},{"line_number":86,"context_line":"            return dict(obj.items())"},{"line_number":87,"context_line":"        return super(SmarterEncoder, self).default(obj)"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_45ade799","line":85,"updated":"2015-08-01 19:35:39.000000000","message":"So, I was thinking a little more about this. In theory this would be a breaking change unless we make sure whatever objects are passed in as arguments have their iteritems methods renamed to items. Since this isn\u0027t tested I don\u0027t know that it\u0027s actually used.","commit_id":"7fdfcbb93050bbe6c222eb50949882a9f493f348"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"7eb44d0f4b12a0347b94328f6f8506a3c4dbc038","unresolved":false,"context_lines":[{"line_number":82,"context_line":"class SmarterEncoder(jsonutils.json.JSONEncoder):"},{"line_number":83,"context_line":"    \"\"\"Help for JSON encoding dict-like objects.\"\"\""},{"line_number":84,"context_line":"    def default(self, obj):"},{"line_number":85,"context_line":"        if not isinstance(obj, dict) and hasattr(obj, \u0027items\u0027):"},{"line_number":86,"context_line":"            return dict(obj.items())"},{"line_number":87,"context_line":"        return super(SmarterEncoder, self).default(obj)"},{"line_number":88,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_957d56b4","line":85,"in_reply_to":"3a50d1a3_45ade799","updated":"2015-08-02 14:52:28.000000000","message":"ok, back to patch set 1.","commit_id":"7fdfcbb93050bbe6c222eb50949882a9f493f348"}]}
