)]}'
{"keystone/common/utils.py":[{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"80588b22ae1c3dcbe3c859e3785c1d5b9f89d646","unresolved":false,"context_lines":[{"line_number":160,"context_line":"            \u0027extra\u0027: jsonutils.dumps({})}"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"def convert_v3_to_ec2_credential(credential):"},{"line_number":164,"context_line":"    blob \u003d get_blob_from_credential(credential)"},{"line_number":165,"context_line":"    return {\u0027access\u0027: blob.get(\u0027access\u0027),"},{"line_number":166,"context_line":"            \u0027secret\u0027: blob.get(\u0027secret\u0027),"},{"line_number":167,"context_line":"            \u0027user_id\u0027: credential.user_id,"},{"line_number":168,"context_line":"            \u0027tenant_id\u0027: credential.project_id,"},{"line_number":169,"context_line":"            }"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"def unixtime(dt_obj):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_fabdc101","side":"PARENT","line":169,"range":{"start_line":163,"start_character":0,"end_line":169,"end_character":13},"updated":"2018-05-15 15:25:54.000000000","message":"It doesn\u0027t look like this is used anywhere else as well.","commit_id":"f0f1bdefece94ebfa08eaa442e486b7285c2da9b"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"6a0ef97050c41a55edcf977a19c2f68673cc9bd6","unresolved":false,"context_lines":[{"line_number":160,"context_line":"            \u0027extra\u0027: jsonutils.dumps({})}"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"def convert_v3_to_ec2_credential(credential):"},{"line_number":164,"context_line":"    blob \u003d get_blob_from_credential(credential)"},{"line_number":165,"context_line":"    return {\u0027access\u0027: blob.get(\u0027access\u0027),"},{"line_number":166,"context_line":"            \u0027secret\u0027: blob.get(\u0027secret\u0027),"},{"line_number":167,"context_line":"            \u0027user_id\u0027: credential.user_id,"},{"line_number":168,"context_line":"            \u0027tenant_id\u0027: credential.project_id,"},{"line_number":169,"context_line":"            }"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"def unixtime(dt_obj):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_026cc6cb","side":"PARENT","line":169,"range":{"start_line":163,"start_character":0,"end_line":169,"end_character":13},"in_reply_to":"5f7c97a3_fabdc101","updated":"2018-05-16 06:13:20.000000000","message":"Done","commit_id":"f0f1bdefece94ebfa08eaa442e486b7285c2da9b"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"80588b22ae1c3dcbe3c859e3785c1d5b9f89d646","unresolved":false,"context_lines":[{"line_number":136,"context_line":"    return list(unique.values())"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"def get_blob_from_credential(credential):"},{"line_number":140,"context_line":"    try:"},{"line_number":141,"context_line":"        blob \u003d jsonutils.loads(credential.blob)"},{"line_number":142,"context_line":"    except (ValueError, TypeError):"},{"line_number":143,"context_line":"        raise exception.ValidationError("},{"line_number":144,"context_line":"            message\u003d_(\u0027Invalid blob in credential\u0027))"},{"line_number":145,"context_line":"    if not blob or not isinstance(blob, dict):"},{"line_number":146,"context_line":"        raise exception.ValidationError(attribute\u003d\u0027blob\u0027,"},{"line_number":147,"context_line":"                                        target\u003d\u0027credential\u0027)"},{"line_number":148,"context_line":"    return blob"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"def convert_v3_to_ec2_credential(credential):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_3ae9f9e4","line":148,"range":{"start_line":139,"start_character":0,"end_line":148,"end_character":15},"updated":"2018-05-15 15:25:54.000000000","message":"and it looks like this is only used in \"convert_v3_to_ec2_credential\"","commit_id":"979a95b0aa356372fc5c27378769594a11c49d82"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"6a0ef97050c41a55edcf977a19c2f68673cc9bd6","unresolved":false,"context_lines":[{"line_number":136,"context_line":"    return list(unique.values())"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"def get_blob_from_credential(credential):"},{"line_number":140,"context_line":"    try:"},{"line_number":141,"context_line":"        blob \u003d jsonutils.loads(credential.blob)"},{"line_number":142,"context_line":"    except (ValueError, TypeError):"},{"line_number":143,"context_line":"        raise exception.ValidationError("},{"line_number":144,"context_line":"            message\u003d_(\u0027Invalid blob in credential\u0027))"},{"line_number":145,"context_line":"    if not blob or not isinstance(blob, dict):"},{"line_number":146,"context_line":"        raise exception.ValidationError(attribute\u003d\u0027blob\u0027,"},{"line_number":147,"context_line":"                                        target\u003d\u0027credential\u0027)"},{"line_number":148,"context_line":"    return blob"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"def convert_v3_to_ec2_credential(credential):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_649d8b08","line":148,"range":{"start_line":139,"start_character":0,"end_line":148,"end_character":15},"in_reply_to":"5f7c97a3_3ae9f9e4","updated":"2018-05-16 06:13:20.000000000","message":"Done","commit_id":"979a95b0aa356372fc5c27378769594a11c49d82"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"80588b22ae1c3dcbe3c859e3785c1d5b9f89d646","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    return (p_len \u003d\u003d k_len) \u0026 (result \u003d\u003d 0)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"def setup_remote_pydev_debug():"},{"line_number":185,"context_line":"    if CONF.pydev_debug_host and CONF.pydev_debug_port:"},{"line_number":186,"context_line":"        try:"},{"line_number":187,"context_line":"            try:"},{"line_number":188,"context_line":"                from pydev import pydevd"},{"line_number":189,"context_line":"            except ImportError:"},{"line_number":190,"context_line":"                import pydevd"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"            pydevd.settrace(CONF.pydev_debug_host,"},{"line_number":193,"context_line":"                            port\u003dCONF.pydev_debug_port,"},{"line_number":194,"context_line":"                            stdoutToServer\u003dTrue,"},{"line_number":195,"context_line":"                            stderrToServer\u003dTrue)"},{"line_number":196,"context_line":"            return True"},{"line_number":197,"context_line":"        except Exception:"},{"line_number":198,"context_line":"            LOG.exception("},{"line_number":199,"context_line":"                \u0027Error setting up the debug environment. Verify that the \u0027"},{"line_number":200,"context_line":"                \u0027option --debug-url has the format \u003chost\u003e:\u003cport\u003e and that a \u0027"},{"line_number":201,"context_line":"                \u0027debugger processes is listening on that port.\u0027)"},{"line_number":202,"context_line":"            raise"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"def get_unix_user(user\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_7ae531db","line":202,"range":{"start_line":184,"start_character":0,"end_line":202,"end_character":17},"updated":"2018-05-15 15:25:54.000000000","message":"Same here, doesn\u0027t seem like anything else is using this.","commit_id":"979a95b0aa356372fc5c27378769594a11c49d82"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"6a0ef97050c41a55edcf977a19c2f68673cc9bd6","unresolved":false,"context_lines":[{"line_number":181,"context_line":"    return (p_len \u003d\u003d k_len) \u0026 (result \u003d\u003d 0)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"def setup_remote_pydev_debug():"},{"line_number":185,"context_line":"    if CONF.pydev_debug_host and CONF.pydev_debug_port:"},{"line_number":186,"context_line":"        try:"},{"line_number":187,"context_line":"            try:"},{"line_number":188,"context_line":"                from pydev import pydevd"},{"line_number":189,"context_line":"            except ImportError:"},{"line_number":190,"context_line":"                import pydevd"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"            pydevd.settrace(CONF.pydev_debug_host,"},{"line_number":193,"context_line":"                            port\u003dCONF.pydev_debug_port,"},{"line_number":194,"context_line":"                            stdoutToServer\u003dTrue,"},{"line_number":195,"context_line":"                            stderrToServer\u003dTrue)"},{"line_number":196,"context_line":"            return True"},{"line_number":197,"context_line":"        except Exception:"},{"line_number":198,"context_line":"            LOG.exception("},{"line_number":199,"context_line":"                \u0027Error setting up the debug environment. Verify that the \u0027"},{"line_number":200,"context_line":"                \u0027option --debug-url has the format \u003chost\u003e:\u003cport\u003e and that a \u0027"},{"line_number":201,"context_line":"                \u0027debugger processes is listening on that port.\u0027)"},{"line_number":202,"context_line":"            raise"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"def get_unix_user(user\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_84a0e743","line":202,"range":{"start_line":184,"start_character":0,"end_line":202,"end_character":17},"in_reply_to":"5f7c97a3_7ae531db","updated":"2018-05-16 06:13:20.000000000","message":"I\u0027d like to remove this in another patch since it\u0027s related to eventlet and keystone-manage","commit_id":"979a95b0aa356372fc5c27378769594a11c49d82"}]}
