import uuid import grpc import mysql_ops from proto import mira_ida_access_service_pb2, mira_ida_access_service_pb2_grpc def get_datasouce_by_id(host_port, conn_id, table_name): channel = grpc.insecure_channel(host_port) stub = mira_ida_access_service_pb2_grpc.MiraIdaAccessStub(channel) request = mira_ida_access_service_pb2.GetPrivateDBConnInfoReq( request_id=str(uuid.uuid4()), db_conn_id=conn_id) response = stub.GetPrivateDBConnInfo(request) db_info = response.data # print("grpc received: ", db_info) if db_info: host = db_info.host port = db_info.port user = db_info.username password = db_info.password database = db_info.db_name encoding = mysql_ops.get_encoding(host, port, user, password, database, table_name) if encoding.startswith("utf8"): encoding = "utf8" if not encoding: raise Exception("failed to get table charset") if not host: raise Exception("failed to get db connect arguments") url = f"jdbc:mysql://{host}:{port}/{database}?useUnicode=true&characterEncoding={encoding}&rewriteBatchedStatements=true" return url, { "user": user, "password": password, "driver": "com.mysql.cj.jdbc.Driver" } else: print("grpc response: ", response) def get_datasource_by_asset_en_name(host_port, asset_en_name, chain_info_id): channel = grpc.insecure_channel(host_port) stub = mira_ida_access_service_pb2_grpc.MiraIdaAccessStub(channel) request = mira_ida_access_service_pb2.GetPrivateAssetInfoByEnNameReq( request_id=str(uuid.uuid4()), asset_en_name=asset_en_name, chain_info_id=int(chain_info_id)) response = stub.GetPrivateAssetInfoByEnName(request) data = response.data conn_id = data.product_info.product_data_set.db_conn_info.db_conn_id if not conn_id: raise Exception("failed to get db conn id") table_name = data.product_info.product_data_set.table_name mysql_url, mysql_prop = get_datasouce_by_id(host_port, conn_id, table_name) return mysql_url, mysql_prop, table_name