diff --git a/qiskit_experiments/database_service/db_experiment_data.py b/qiskit_experiments/database_service/db_experiment_data.py index 50c9b4cb30..341a0782e4 100644 --- a/qiskit_experiments/database_service/db_experiment_data.py +++ b/qiskit_experiments/database_service/db_experiment_data.py @@ -983,6 +983,10 @@ def save(self) -> None: return self._save_experiment_metadata() + if not self._created_in_db: + LOG.warning("Could not save experiment metadata to DB, aborting experiment save") + return + for result in self._analysis_results.values(): result.save() @@ -1011,11 +1015,18 @@ def save(self) -> None: self._service.delete_figure(experiment_id=self.experiment_id, figure_name=name) self._deleted_figures.remove(name) - if self._created_in_db and self.verbose: - print( - "You can view the experiment online at " - "https://quantum-computing.ibm.com/experiments/" + self.experiment_id - ) + if self.verbose: + # this field will be implemented in the new service package + if hasattr(self._service, "web_interface_link"): + print( + "You can view the experiment online at " + f"{self._service.web_interface_link}/{self.experiment_id}" + ) + else: + print( + "You can view the experiment online at " + f"https://quantum-computing.ibm.com/experiments/{self.experiment_id}" + ) @classmethod def load(cls, experiment_id: str, service: DatabaseServiceV1) -> "DbExperimentDataV1": diff --git a/releasenotes/notes/experiment_service_fixes-94730fd6bab83956.yaml b/releasenotes/notes/experiment_service_fixes-94730fd6bab83956.yaml new file mode 100644 index 0000000000..ab98ff4d1b --- /dev/null +++ b/releasenotes/notes/experiment_service_fixes-94730fd6bab83956.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + `Experiment.save()` should now fail gracefully when experiment metadata failed to save instead of crashing + - | + The link to the result db shown after saving is now by default obtained from the service, not hard-coded