Skip to content

Commit 9df4df5

Browse files
authored
Add public load csv API to csv viewer (#40)
akin to how load_config_file is now a non-internal api
1 parent fdafd31 commit 9df4df5

File tree

3 files changed

+22
-18
lines changed

3 files changed

+22
-18
lines changed

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
66
name = "pyqtgraph-scope-plots"
77
description = "Scope like plot utilities for pyqtgraph"
88
readme = "README.md"
9-
version = "1.5.0"
9+
version = "1.5.1"
1010
authors = [
1111
{ name = "Richard Lin", email = "[email protected]" }
1212
]

pyqtgraph_scope_plots/csv/csv_plots.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -422,18 +422,18 @@ def _on_load_csv(self) -> None:
422422
csv_filenames, _ = QFileDialog.getOpenFileNames(None, "Select CSV Files", filter="CSV files (*.csv)")
423423
if not csv_filenames: # nothing selected, user canceled
424424
return
425-
self._load_csv(csv_filenames)
425+
self._load_csvs(csv_filenames)
426426

427427
def _on_append_csv(self) -> None:
428428
csv_filenames, _ = QFileDialog.getOpenFileNames(None, "Select CSV Files", filter="CSV files (*.csv)")
429429
if not csv_filenames: # nothing selected, user canceled
430430
return
431-
self._load_csv(csv_filenames, append=True)
431+
self._load_csvs(csv_filenames, append=True)
432432

433433
def _on_refresh_csv(self) -> None:
434434
"""Reloads all CSVs. Discards data (but not data items) that are no longer present in the reloaded CSVs.
435435
Does not modify data items (new data items are discarded)."""
436-
self._load_csv(
436+
self._load_csvs(
437437
list(self._csv_data_items.keys()),
438438
colnames=itertools.chain(*self._csv_data_items.values()),
439439
append=True,
@@ -460,9 +460,13 @@ def _check_watch(self) -> None:
460460
data_items_to_load.extend(curr_data_items)
461461

462462
if files_to_load:
463-
self._load_csv(files_to_load, colnames=data_items_to_load, append=True)
463+
self._load_csvs(files_to_load, colnames=data_items_to_load, append=True)
464464

465-
def _load_csv(
465+
def load_csvs(self, csv_filepaths: List[str], *, append: bool = False) -> None:
466+
"""Public API for loading CSV files"""
467+
self._load_csvs(csv_filepaths, append=append)
468+
469+
def _load_csvs(
466470
self,
467471
csv_filepaths: List[str],
468472
append: bool = False,
@@ -607,7 +611,7 @@ def _do_load_config(self, filename: str, model: CsvLoaderStateModel) -> None:
607611
f"Some CSV files not found: {', '.join(missing_csv_files)}",
608612
QMessageBox.StandardButton.Ok,
609613
)
610-
self._load_csv(found_csv_files, update=False)
614+
self._load_csvs(found_csv_files, update=False)
611615

612616
data = self._data
613617
self._set_data({}) # blank the data while updates happen, for performance

tests/test_csv_viewer.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,17 @@ def plot(qtbot: QtBot) -> CsvLoaderPlotsTableWidget:
3636

3737

3838
def test_load_mixed_csv(qtbot: QtBot, plot: CsvLoaderPlotsTableWidget) -> None:
39-
plot._load_csv([os.path.join(os.path.dirname(__file__), "data", "test_csv_viewer_data.csv")])
39+
plot._load_csvs([os.path.join(os.path.dirname(__file__), "data", "test_csv_viewer_data.csv")])
4040
qtbot.waitUntil(lambda: plot._plots.count() == 3) # just make sure it loads
4141

4242

4343
def test_load_sparse_csv(qtbot: QtBot, plot: CsvLoaderPlotsTableWidget) -> None:
44-
plot._load_csv([os.path.join(os.path.dirname(__file__), "data", "test_csv_viewer_data_sparse.csv")])
44+
plot._load_csvs([os.path.join(os.path.dirname(__file__), "data", "test_csv_viewer_data_sparse.csv")])
4545
qtbot.waitUntil(lambda: plot._plots.count() == 3) # just make sure it loads
4646

4747

4848
def test_load_multiple_csv(qtbot: QtBot, plot: CsvLoaderPlotsTableWidget) -> None:
49-
plot._load_csv(
49+
plot._load_csvs(
5050
[
5151
os.path.join(os.path.dirname(__file__), "data", "test_csv_viewer_data.csv"),
5252
os.path.join(os.path.dirname(__file__), "data", "test_csv_viewer_data_diffcols.csv"),
@@ -56,16 +56,16 @@ def test_load_multiple_csv(qtbot: QtBot, plot: CsvLoaderPlotsTableWidget) -> Non
5656

5757

5858
def test_append_csv(qtbot: QtBot, plot: CsvLoaderPlotsTableWidget) -> None:
59-
plot._load_csv([os.path.join(os.path.dirname(__file__), "data", "test_csv_viewer_data.csv")])
59+
plot._load_csvs([os.path.join(os.path.dirname(__file__), "data", "test_csv_viewer_data.csv")])
6060
qtbot.waitUntil(lambda: plot._plots.count() == 3)
61-
plot._load_csv([os.path.join(os.path.dirname(__file__), "data", "test_csv_viewer_data_diffcols.csv")], append=True)
61+
plot._load_csvs([os.path.join(os.path.dirname(__file__), "data", "test_csv_viewer_data_diffcols.csv")], append=True)
6262
qtbot.waitUntil(lambda: plot._plots.count() == 4) # test that the new data is appended
6363

6464

6565
def test_watch_stability(qtbot: QtBot, plot: CsvLoaderPlotsTableWidget) -> None:
66-
plot._load_csv([os.path.join(os.path.dirname(__file__), "data", "test_csv_viewer_data.csv")])
66+
plot._load_csvs([os.path.join(os.path.dirname(__file__), "data", "test_csv_viewer_data.csv")])
6767
qtbot.waitUntil(lambda: plot._plots.count() == 3)
68-
with mock.patch.object(CsvLoaderPlotsTableWidget, "_load_csv") as mock_load_csv, mock.patch.object(
68+
with mock.patch.object(CsvLoaderPlotsTableWidget, "_load_csvs") as mock_load_csv, mock.patch.object(
6969
os.path, "getmtime"
7070
) as mock_getmtime:
7171
mock_getmtime.return_value = time.time() - 10 # unchanged file
@@ -84,7 +84,7 @@ def test_save_model_csvs(qtbot: QtBot, plot: CsvLoaderPlotsTableWidget) -> None:
8484
model = plot._do_save_config(os.path.join(os.path.dirname(__file__), "config.yml"))
8585
assert model.csv_files == [] # relpath
8686

87-
plot._load_csv([os.path.join(os.path.dirname(__file__), "data", "test_csv_viewer_data.csv")])
87+
plot._load_csvs([os.path.join(os.path.dirname(__file__), "data", "test_csv_viewer_data.csv")])
8888

8989
# test saving in relpath mode
9090
model = plot._do_save_config(os.path.join(os.path.dirname(__file__), "config.yml"))
@@ -101,19 +101,19 @@ def test_save_model_csvs(qtbot: QtBot, plot: CsvLoaderPlotsTableWidget) -> None:
101101
def test_load_model_csvs_relpath(qtbot: QtBot, plot: CsvLoaderPlotsTableWidget) -> None:
102102
model = plot._do_save_config("/config.yml")
103103

104-
with mock.patch.object(CsvLoaderPlotsTableWidget, "_load_csv") as mock_load_csv:
104+
with mock.patch.object(CsvLoaderPlotsTableWidget, "_load_csvs") as mock_load_csv:
105105
model.csv_files = None
106106
plot._do_load_config(os.path.join(os.path.dirname(__file__), "config.yml"), model)
107107
mock_load_csv.assert_not_called()
108108

109-
with mock.patch.object(CsvLoaderPlotsTableWidget, "_load_csv") as mock_load_csv:
109+
with mock.patch.object(CsvLoaderPlotsTableWidget, "_load_csvs") as mock_load_csv:
110110
model.csv_files = [os.path.join("data", "test_csv_viewer_data.csv")] # relpath
111111
plot._do_load_config(os.path.join(os.path.dirname(__file__), "config.yml"), model)
112112
mock_load_csv.assert_called_with(
113113
[os.path.join(os.path.dirname(__file__), "data", "test_csv_viewer_data.csv")], update=False
114114
)
115115

116-
with mock.patch.object(CsvLoaderPlotsTableWidget, "_load_csv") as mock_load_csv:
116+
with mock.patch.object(CsvLoaderPlotsTableWidget, "_load_csvs") as mock_load_csv:
117117
model.csv_files = [os.path.join(os.path.dirname(__file__), "data", "test_csv_viewer_data.csv")] # abspath
118118
plot._do_load_config(os.path.join(os.path.dirname(__file__), "config.yml"), model)
119119
mock_load_csv.assert_called_with(

0 commit comments

Comments
 (0)