From e51ed7a55f8f9229af7593021e07843c2adce8c6 Mon Sep 17 00:00:00 2001 From: edwardpcharles <110316665+edwardpcharles@users.noreply.github.com> Date: Sat, 12 Apr 2025 20:58:52 -0700 Subject: [PATCH 1/3] Update _generate_report.py --- src/sempy_labs/report/_generate_report.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/sempy_labs/report/_generate_report.py b/src/sempy_labs/report/_generate_report.py index 8f376ca3..e2f3dd23 100644 --- a/src/sempy_labs/report/_generate_report.py +++ b/src/sempy_labs/report/_generate_report.py @@ -2,6 +2,7 @@ import pandas as pd import json import os +import base64 from typing import Optional from sempy_labs._helper_functions import ( resolve_workspace_name_and_id, @@ -182,6 +183,7 @@ def get_report_definition( report: str | UUID, workspace: Optional[str | UUID] = None, return_dataframe: bool = True, + files_to_built_in_resources = False ) -> pd.DataFrame | dict: """ Gets the collection of definition files of a report. @@ -198,16 +200,31 @@ def get_report_definition( or if no lakehouse attached, resolves to the workspace of the notebook. return_dataframe : bool, default=True If True, returns a dataframe. If False, returns a json dictionary. + files_to_built_in_resources : bool, default=False + If True, saves the files to the built in resources so they can be downloaded Returns ------- pandas.DataFrame The collection of report definition files within a pandas dataframe. """ - - return get_item_definition( + report_items = get_item_definition( item=report, type="Report", workspace=workspace, return_dataframe=True ) + output_base_dir = f"./builtin/{report}" + os.makedirs(output_base_dir, exist_ok=True) + + for _, row in report_items.iterrows(): + relative_path = row['path'] + base64_payload = row['payload'] + output_path = os.path.join(output_base_dir, relative_path) + + os.makedirs(os.path.dirname(output_path), exist_ok=True) + + with open(output_path, "wb") as f: + f.write(base64.b64decode(base64_payload)) + + return report_items @log From 6842903952087205778f8b2f6dbfeee7be1b41d5 Mon Sep 17 00:00:00 2001 From: edwardpcharles <110316665+edwardpcharles@users.noreply.github.com> Date: Sun, 13 Apr 2025 07:23:35 -0700 Subject: [PATCH 2/3] Update _generate_report.py --- src/sempy_labs/report/_generate_report.py | 40 +++++++++++++++-------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/src/sempy_labs/report/_generate_report.py b/src/sempy_labs/report/_generate_report.py index e2f3dd23..44f2b26c 100644 --- a/src/sempy_labs/report/_generate_report.py +++ b/src/sempy_labs/report/_generate_report.py @@ -201,7 +201,7 @@ def get_report_definition( return_dataframe : bool, default=True If True, returns a dataframe. If False, returns a json dictionary. files_to_built_in_resources : bool, default=False - If True, saves the files to the built in resources so they can be downloaded + If True, saves the files to the built in resources of a fabric notebook so they can be downloaded. If False does nothing. Returns ------- @@ -211,18 +211,32 @@ def get_report_definition( report_items = get_item_definition( item=report, type="Report", workspace=workspace, return_dataframe=True ) - output_base_dir = f"./builtin/{report}" - os.makedirs(output_base_dir, exist_ok=True) - - for _, row in report_items.iterrows(): - relative_path = row['path'] - base64_payload = row['payload'] - output_path = os.path.join(output_base_dir, relative_path) - - os.makedirs(os.path.dirname(output_path), exist_ok=True) - - with open(output_path, "wb") as f: - f.write(base64.b64decode(base64_payload)) + + if files_to_built_in_resources: + output_base_dir = f"./builtin/{report}" + if os.path.exists(output_base_dir): + parent_directory = "./builtin/" + target_name = report + + matching_items = [ + item for item in os.listdir(parent_directory) + if item == target_name + ] + count = len(matching_items) + new_folder_name = f"{output_base_dir} ({count})" + os.makedirs(new_folder_name, exist_ok=True) + else: + os.makedirs(output_base_dir, exist_ok=True) + + for _, row in report_items.iterrows(): + relative_path = row['path'] + base64_payload = row['payload'] + output_path = os.path.join(output_base_dir, relative_path) + + os.makedirs(os.path.dirname(output_path), exist_ok=True) + + with open(output_path, "wb") as f: + f.write(base64.b64decode(base64_payload)) return report_items From 485983aaaefae96a96055b25235d3b7a1e61167f Mon Sep 17 00:00:00 2001 From: edwardpcharles <110316665+edwardpcharles@users.noreply.github.com> Date: Sun, 13 Apr 2025 08:57:28 -0700 Subject: [PATCH 3/3] Update _generate_report.py --- src/sempy_labs/report/_generate_report.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/sempy_labs/report/_generate_report.py b/src/sempy_labs/report/_generate_report.py index 44f2b26c..36731039 100644 --- a/src/sempy_labs/report/_generate_report.py +++ b/src/sempy_labs/report/_generate_report.py @@ -224,7 +224,11 @@ def get_report_definition( ] count = len(matching_items) new_folder_name = f"{output_base_dir} ({count})" + while os.path.exists(new_folder_name): + count += 1 + new_folder_name = f"{output_base_dir} ({count})" os.makedirs(new_folder_name, exist_ok=True) + output_base_dir = new_folder_name else: os.makedirs(output_base_dir, exist_ok=True)