Skip to content

Commit da7d5b4

Browse files
1d4ncoruscating
andauthored
Add file_delete method to delete experiment file (#101)
* Implement file_delete * Add confirmation prompt and error handling to file_delete * Add release note * Apply suggestions from code review Co-authored-by: Helena Zhang <Helena.Zhang@ibm.com> * Apply suggestions from code review --------- Co-authored-by: Helena Zhang <Helena.Zhang@ibm.com>
1 parent 6b2a590 commit da7d5b4

File tree

4 files changed

+50
-0
lines changed

4 files changed

+50
-0
lines changed

qiskit_ibm_experiment/client/experiment.py

+9
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,15 @@ def experiment_file_download(
345345
"""
346346
return self.api.file_download(experiment_id, file_name, json_decoder)
347347

348+
def experiment_file_delete(self, experiment_id: str, file_name: str):
349+
"""Deletes a data file from the DB
350+
351+
Args:
352+
experiment_id: Experiment ID.
353+
file_name: The path of the data file to delete.
354+
"""
355+
return self.api.file_delete(experiment_id, file_name)
356+
348357
def device_components(self, backend_name: Optional[str]) -> List[Dict]:
349358
"""Return device components for the backend.
350359

qiskit_ibm_experiment/client/experiment_rest_adapter.py

+11
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ class ExperimentRestAdapter:
3737
"files": "/experiments/{uuid}/files",
3838
"files_upload": "/experiments/{uuid}/files/upload/{path}",
3939
"files_download": "/experiments/{uuid}/files/{path}",
40+
"files_delete": "/experiments/{uuid}/files/{path}",
4041
}
4142

4243
_HEADER_JSON_CONTENT = {"Content-Type": "application/json"}
@@ -462,3 +463,13 @@ def file_download(
462463
return result.json(cls=json_decoder)
463464
return result.content
464465
return result
466+
467+
def file_delete(self, experiment_id: str, file_name: str):
468+
"""Deletes a file from the DB
469+
Args:
470+
experiment_id: Experiment ID.
471+
file_name: The path of the data file to delete.
472+
"""
473+
url = self.get_url("files_delete")
474+
url = url.format(uuid=experiment_id, path=file_name)
475+
self.session.delete(url)

qiskit_ibm_experiment/service/ibm_experiment_service.py

+25
Original file line numberDiff line numberDiff line change
@@ -1742,6 +1742,31 @@ def file_download(
17421742
)
17431743
return file_data
17441744

1745+
def file_delete(self, experiment_id: str, file_name: str):
1746+
"""Deletes a data file from the DB
1747+
1748+
Note:
1749+
This method prompts for confirmation and requires a response before proceeding.
1750+
1751+
Args:
1752+
experiment_id: The experiment the data file belongs to.
1753+
file_name: The path of the data file to delete.
1754+
1755+
Raises:
1756+
IBMApiError: If the request to the server failed.
1757+
"""
1758+
if not self._confirm_delete(
1759+
"Are you sure you want to delete the experiment file? [y/N]: "
1760+
):
1761+
return
1762+
try:
1763+
self._api_client.experiment_file_delete(experiment_id, file_name)
1764+
except RequestsApiError as api_err:
1765+
if api_err.status_code == 404:
1766+
logger.warning("File %s not found.", file_name)
1767+
else:
1768+
raise IBMApiError(f"Failed to process the request: {api_err}") from None
1769+
17451770
def experiment_has_file(self, experiment_id: str, file_name: str) -> bool:
17461771
"""Checks whether a specific expriment has a specific file
17471772
Args:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
3+
features:
4+
- |
5+
Added the :meth:`~IBMExperimentService.file_delete` method to delete experiment artifacts.

0 commit comments

Comments
 (0)