Skip to content

Commit 909e306

Browse files
committed
Improved logging
1 parent 566f662 commit 909e306

File tree

2 files changed

+53
-44
lines changed

2 files changed

+53
-44
lines changed

src/tdamapper/app.py

Lines changed: 43 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -122,10 +122,11 @@ def _umap(X):
122122

123123

124124
def run_mapper(df, **kwargs):
125+
logger.info("Mapper computation started...")
125126
if df is None or df.empty:
126-
logger.error("No data found. Please upload a file first.")
127+
error = "Mapper computation failed: no data found, please load data first."
128+
logger.error(error)
127129
return
128-
logger.info("Computing Mapper.")
129130

130131
mapper_config = MapperConfig(**kwargs)
131132

@@ -197,10 +198,12 @@ def run_mapper(df, **kwargs):
197198
if clustering_scale_data:
198199
X = StandardScaler().fit_transform(X)
199200
mapper_graph = mapper.fit_transform(X, y)
201+
logger.info("Mapper computation completed.")
200202
return mapper_graph, df_y
201203

202204

203205
def create_mapper_figure(df_X, df_y, df_target, mapper_graph, **kwargs):
206+
logger.info("Mapper rendering started...")
204207
df_colors = pd.concat([df_target, df_y, df_X], axis=1)
205208
mapper_config = MapperConfig(**kwargs)
206209
plot_dimensions = mapper_config.plot_dimensions
@@ -231,7 +234,7 @@ def create_mapper_figure(df_X, df_y, df_target, mapper_graph, **kwargs):
231234
xaxis=dict(scaleanchor="y"),
232235
uirevision="constant",
233236
)
234-
logger.info("Mapper run completed successfully.")
237+
logger.info("Mapper rendering completed.")
235238
return mapper_fig
236239

237240

@@ -259,7 +262,7 @@ def __init__(self, storage):
259262

260263
ui.button(
261264
"⬆️ Load Data",
262-
on_click=self.load_file,
265+
on_click=self.load_data,
263266
color="themelight",
264267
).classes("w-full text-themedark")
265268

@@ -619,39 +622,48 @@ def upload_file(self, file):
619622
df = pd.read_csv(file.content)
620623
self.storage["df"] = fix_data(df)
621624
self.storage["labels"] = pd.DataFrame()
622-
logger.info("File uploaded successfully.")
623-
ui.notify("File uploaded successfully.", type="info")
625+
message = "File upload completed."
626+
logger.info(message)
627+
ui.notify(message, type="info")
624628
else:
625-
logger.info("No file uploaded.")
629+
error = "File upload failed: no file provided."
630+
logger.info(error)
631+
ui.notify(error, type="warning")
626632

627-
def load_file(self):
633+
def load_data(self):
628634
if self.load_type.value == LOAD_EXAMPLE:
629635
if self.load_example.value == LOAD_EXAMPLE_DIGITS:
630636
df, labels = load_digits(as_frame=True, return_X_y=True)
631637
elif self.load_example.value == LOAD_EXAMPLE_IRIS:
632638
df, labels = load_iris(as_frame=True, return_X_y=True)
633639
else:
634-
logger.error("Unknown example dataset selected.")
640+
error = "Load data failed: unknown example dataset selected."
641+
logger.error(error)
642+
ui.notify(error, type="warning")
635643
return
636644
self.storage["df"] = fix_data(df)
637645
self.storage["labels"] = fix_data(labels)
638646
elif self.load_type.value == LOAD_CSV:
639647
df = self.storage.get("df", pd.DataFrame())
640648
if df is None or df.empty:
641-
logger.warning("No data found. Please upload a file first.")
642-
ui.notify("No data found. Please upload a file first.", type="warning")
649+
error = "Load data failed: no data found, please upload a file first."
650+
logger.warning(error)
651+
ui.notify(error, type="warning")
643652
return
644653
else:
645-
logger.error("Unknown load type selected.")
654+
error = "Load data failed: unknown load type selected."
655+
logger.error(error)
656+
ui.notify(error, type="warning")
646657
return
647658

648659
df = self.storage.get("df", pd.DataFrame())
649660
if df is not None or not df.empty:
650-
logger.info("Data loaded successfully.")
651-
ui.notify("File loaded successfully.", type="positive")
661+
logger.info("Load data completed.")
662+
ui.notify("Load data completed.", type="positive")
652663
else:
653-
logger.warning("No data found. Please upload a file first.")
654-
ui.notify("No data found. Please upload a file first.", type="warning")
664+
error = "Load data failed: no data found, please upload a file first."
665+
logger.warning(error)
666+
ui.notify(error, type="warning")
655667

656668
def notification_running_start(self, message):
657669
notification = ui.notification(timeout=None, type="ongoing")
@@ -670,27 +682,24 @@ async def async_run_mapper(self):
670682
notification = self.notification_running_start("Running Mapper...")
671683
df_X = self.storage.get("df", pd.DataFrame())
672684
if df_X is None or df_X.empty:
673-
logger.warning("No data found. Please load data first.")
674-
self.notification_running_stop(
675-
notification,
676-
"Running Mapper failed: No data found, please load data first.",
677-
type="warning",
678-
)
685+
error = "Run Mapper failed: no data found, please load data first."
686+
logger.warning(error)
687+
self.notification_running_stop(notification, error, type="warning")
679688
return
680689
mapper_config = self.get_mapper_config()
681690
result = await run.cpu_bound(run_mapper, df_X, **asdict(mapper_config))
682691
if result is None:
683-
self.notification_running_stop(
684-
notification, "Running Mapper failed.", type="error"
685-
)
692+
error = "Run Mapper failed: something went wrong."
693+
logger.error(error)
694+
self.notification_running_stop(notification, error, type="error")
686695
return
687696
mapper_graph, df_y = result
688697
if mapper_graph is not None:
689698
self.storage["mapper_graph"] = mapper_graph
690699
if df_y is not None:
691700
self.storage["df_y"] = df_y
692701
self.notification_running_stop(
693-
notification, "Running Mapper completed.", type="positive"
702+
notification, "Run Mapper completed.", type="positive"
694703
)
695704
await self.async_draw_mapper()
696705

@@ -705,11 +714,12 @@ async def async_draw_mapper(self):
705714
mapper_graph = self.storage.get("mapper_graph", None)
706715

707716
if df_X.empty or mapper_graph is None:
708-
logger.warning("No data or Mapper graph found. Please run Mapper first.")
717+
error = (
718+
"Draw Mapper failed: no Mapper graph found, please run Mapper first."
719+
)
720+
logger.warning(error)
709721
self.notification_running_stop(
710-
notification=notification,
711-
message="Drawing Mapper failed: no data or graph found.",
712-
type="warning",
722+
notification=notification, message=error, type="warning"
713723
)
714724
return
715725

@@ -722,9 +732,8 @@ async def async_draw_mapper(self):
722732
**asdict(mapper_config),
723733
)
724734
if mapper_fig is None:
725-
self.notification_running_stop(
726-
notification, "Drawing Mapper failed.", type="error"
727-
)
735+
error = "Draw Mapper failed: something went wrong."
736+
self.notification_running_stop(notification, error, type="error")
728737
return
729738

730739
logger.info("Displaying Mapper plot.")
@@ -734,7 +743,7 @@ async def async_draw_mapper(self):
734743
with self.plot_container:
735744
self.draw_area = ui.plotly(mapper_fig).classes("w-full h-full")
736745
self.notification_running_stop(
737-
notification, "Drawing Mapper completed", type="positive"
746+
notification, "Draw Mapper completed.", type="positive"
738747
)
739748

740749

tests/test_unit_app.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ async def test_run_app_fail(user: User) -> None:
2121
await user.should_see("Run Mapper")
2222
await user.should_see("Redraw")
2323
user.find("Run Mapper").click()
24-
await user.should_see("Running Mapper failed")
25-
await user.should_not_see("File loaded successfully")
24+
await user.should_see("Run Mapper failed")
25+
await user.should_not_see("Load data completed")
2626

2727

2828
async def test_run_app_success(user: User) -> None:
@@ -35,19 +35,19 @@ async def test_run_app_success(user: User) -> None:
3535
await user.should_see("Run Mapper")
3636
await user.should_see("Redraw")
3737
user.find("Load Data").click()
38-
await user.should_see("File loaded successfully")
39-
await user.should_not_see("No data found.")
38+
await user.should_see("Load data completed")
39+
await user.should_not_see("Load data failed")
4040
user.find("Run Mapper").click()
4141
await user.should_see("Running Mapper...")
42-
await user.should_not_see("No data found.")
43-
await user.should_see("Running Mapper completed", retries=RETRIES)
42+
await user.should_not_see("Run Mapper failed")
43+
await user.should_see("Run Mapper completed", retries=RETRIES)
4444
await user.should_see("Drawing Mapper...")
45-
await user.should_not_see("No data")
46-
await user.should_see("Drawing Mapper completed", retries=RETRIES)
45+
await user.should_not_see("Draw Mapper failed")
46+
await user.should_see("Draw Mapper completed", retries=RETRIES)
4747
user.find("Redraw").click()
4848
await user.should_see("Drawing Mapper...")
49-
await user.should_not_see("No data")
50-
await user.should_see("Drawing Mapper completed", retries=RETRIES)
49+
await user.should_not_see("Draw Mapper failed")
50+
await user.should_see("Draw Mapper completed", retries=RETRIES)
5151

5252

5353
def test_run_mapper() -> None:

0 commit comments

Comments
 (0)