import os import pandas as pd import requests import time import json def data_to_json(data: pd.DataFrame): json_data = data.to_dict(orient='records') json_string = json.dumps(json_data, indent=None) return json_string PLG_ENDPOINT = 'https://us-east-1.data.tidbcloud.com/api/v1beta/app/dataapi-LXLoOkXt/endpoint/v1/' PLG_PUBLIC_KEY = os.getenv('DATA_API_PUBLIC_KEY') PLG_PRIVATE_KEY = os.getenv('DATA_API_PRIVATE_KEY') class DataAPIRequester: def __init__(self, target, endpoint=PLG_ENDPOINT, public_key=PLG_PUBLIC_KEY, private_key=PLG_PRIVATE_KEY, params=None): self.endpoint = endpoint self.url = self.endpoint + target self.params = params or {} self.public_key = public_key self.private_key = private_key def get_data(self): auth = requests.auth.HTTPDigestAuth(self.public_key, self.private_key) response = requests.get(self.url, auth=auth, params=self.params) time.sleep(1) return response.json()['data']['rows'] def send_data(self, data: pd.DataFrame, max_row=25): if len(data) == 0: return 200 headers = {'content-type': 'application/json'} auth = requests.auth.HTTPDigestAuth(self.public_key, self.private_key) for s in range(0, len(data), max_row): e = min(s + max_row, len(data)) json_string = data_to_json(data[s: e]) response = requests.post(self.url, headers=headers, auth=auth, data=json_string) # TODO: judgement of result.code if response.status_code != 200: print(response.text) return response.status_code