diff --git a/src/askem_beaker/contexts/dataset/context.py b/src/askem_beaker/contexts/dataset/context.py index b71333e..41a59b2 100644 --- a/src/askem_beaker/contexts/dataset/context.py +++ b/src/askem_beaker/contexts/dataset/context.py @@ -246,15 +246,16 @@ async def save_dataset_request(self, message): logger.error(f"new dataset: {pprint.pformat(create_req.json())}") new_dataset["id"] = new_dataset_id - new_dataset_url = f"{dataservice_url}/datasets/{new_dataset_id}" - data_url_req = requests.get(f"{new_dataset_url}/upload-url?filename={filename}", auth=self.auth.requests_auth()) - data_url = data_url_req.json().get('url', None) code = self.get_code( - "df_save_as", + "hmi_create_csv_dataset", { "var_name": var_name, - "data_url": data_url, + "id": new_dataset_id, + "username": self.auth.username, + "password": self.auth.password, + "filename": filename, + "dataservice_url": dataservice_url } ) df_response = await self.execute(code) diff --git a/src/askem_beaker/contexts/dataset/procedures/python3/hmi_create_csv_dataset.py b/src/askem_beaker/contexts/dataset/procedures/python3/hmi_create_csv_dataset.py new file mode 100644 index 0000000..2b49406 --- /dev/null +++ b/src/askem_beaker/contexts/dataset/procedures/python3/hmi_create_csv_dataset.py @@ -0,0 +1,39 @@ +import os +import requests +import tempfile + +from json import JSONDecodeError + +with tempfile.TemporaryFile() as temp_csv_file: + {{ var_name|default("df") }}.to_csv(temp_csv_file, index=False, header=True) + temp_csv_file.seek(0) + # Set the HMI_SERVER endpoint + hmi_server = "{{dataservice_url}}" + + # Define the id and filename dynamically + id = "{{id}}" + filename = "{{filename}}" + + # Prepare the request payload + payload = {'id': id, 'filename': filename} + files = {'file': temp_csv_file} + + # Set the headers with the content type + # headers = {} + + # Make the HTTP PUT request to upload the file bytes + url = f'{hmi_server}/datasets/{id}/upload-csv' + response = requests.put(url, data=payload, files=files, auth=("{{username}}", "{{password}}")) + + # Check the response status code + if response.status_code < 300: + try: + message = response.json() + except JSONDecodeError: + message = f'File uploaded successfully with status code {response.status_code}.' + else: + message = f'File upload failed with status code {response.status_code}.' + if response.text: + message += f' Response message: {response.text}' + + message diff --git a/src/askem_beaker/contexts/pyciemss/context.py b/src/askem_beaker/contexts/pyciemss/context.py index c850f3f..8bed857 100644 --- a/src/askem_beaker/contexts/pyciemss/context.py +++ b/src/askem_beaker/contexts/pyciemss/context.py @@ -138,9 +138,11 @@ async def save_results_to_hmi(self, message): data_url_req = requests.get(f"{dataset_url}/upload-url?filename=result.csv", auth=auth) data_url = data_url_req.json().get('url', None) code = self.get_code( - "df_save_as", + "df_create_csv_dataset", { - "data_url": data_url, + "id": dataset_id, + "auth": self.get_auth(), + "filename": "result.csv" } ) kernel_response = await self.execute(code) # TODO: Check error