diff --git a/Babylon/commands/powerbi/dataset/services/powerbi_params_svc.py b/Babylon/commands/powerbi/dataset/services/powerbi_params_svc.py index d6fd80fb..aabd562c 100644 --- a/Babylon/commands/powerbi/dataset/services/powerbi_params_svc.py +++ b/Babylon/commands/powerbi/dataset/services/powerbi_params_svc.py @@ -1,4 +1,5 @@ import logging +from time import sleep from Babylon.utils.request import oauth_request @@ -21,14 +22,21 @@ def get(self, workspace_id: str, dataset_id: str): output_data = response.json().get("value") return output_data - def update(self, workspace_id: str, params: list[tuple[str, str]], dataset_id: str): + def update(self, workspace_id: str, params: list[tuple[str, str]], dataset_id: str, max_retries: int = 2): workspace_id = workspace_id or self.state["powerbi"]["workspace"]["id"] # Preparing parameter data details = {"updateDetails": [{"name": param.get("id"), "newValue": param.get('value')} for param in params]} update_url = (f"https://api.powerbi.com/v1.0/myorg/groups/{workspace_id}" f"/datasets/{dataset_id}/Default.UpdateParameters") + tries = 0 response = oauth_request(update_url, self.powerbi_token, json=details, type="POST") + while response is None and tries < max_retries: + tries += 1 + sleep(1) + response = oauth_request(update_url, self.powerbi_token, json=details, type="POST") if response is None: - logger.info(f"[powerbi] failled to update dataset with id: {dataset_id}") + logger.info(f"[powerbi] failled to update dataset with id: {dataset_id}" + f"\n parameters: {details}" + f"\n tries: {1 + tries}") return None - logger.info("[powerbi] parameters successfully updated") + logger.info(f"[powerbi] parameters successfully updated (try #{tries})")