From 703eb432da7ccba6e4652115668bcd2778128d77 Mon Sep 17 00:00:00 2001 From: akash5100 Date: Mon, 29 Aug 2022 22:34:39 +0530 Subject: [PATCH 1/7] Save file function --- hvpy/utils.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/hvpy/utils.py b/hvpy/utils.py index fcc2469..3c38afe 100644 --- a/hvpy/utils.py +++ b/hvpy/utils.py @@ -9,6 +9,7 @@ "convert_date_to_unix", "create_layers", "create_events", + "save_file", ] @@ -127,3 +128,11 @@ def create_events(events: List[Union[EventType, str, tuple]]) -> str: raise ValueError(f"{event} is not a EventType or str or two-length tuple") # Strips the final comma return constructed_events[:-1] + + +def save_file(data: bytearray, filename: str) -> None: + """ + Saves a file to the specified path. + """ + with open(filename, "wb") as f: + f.write(data) From 9369bcb01d4459ef0a9637ff40a11261a5ff6158 Mon Sep 17 00:00:00 2001 From: akash5100 Date: Tue, 30 Aug 2022 19:33:47 +0530 Subject: [PATCH 2/7] overwrite option for already existing function --- hvpy/utils.py | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/hvpy/utils.py b/hvpy/utils.py index 3c38afe..3eb9633 100644 --- a/hvpy/utils.py +++ b/hvpy/utils.py @@ -1,4 +1,5 @@ -from typing import Any, List, Union, Callable +from typing import Any, List, Union, Callable, Optional +from pathlib import Path from datetime import datetime from hvpy.datasource import DataSource @@ -130,9 +131,24 @@ def create_events(events: List[Union[EventType, str, tuple]]) -> str: return constructed_events[:-1] -def save_file(data: bytearray, filename: str) -> None: +def save_file(data: bytearray, filename: str, overwrite: Optional[bool] = False) -> None: """ Saves a file to the specified path. - """ - with open(filename, "wb") as f: - f.write(data) + + Parameters + ---------- + data + The data to save. + filename + The path to save the file to. + overwrite + Whether to overwrite the file if it already exists. + Default is `False`, optional. + """ + if Path(filename).exists(): + if overwrite: + Path(filename).write_bytes(data) + else: + raise ValueError(f"{filename} already exists, use overwrite=True to overwrite") + else: + Path(filename).write_bytes(data) From 40e9785b1d3444c0accb795aa71f3a2e3c7ca1bd Mon Sep 17 00:00:00 2001 From: akash5100 Date: Wed, 31 Aug 2022 10:30:56 +0530 Subject: [PATCH 3/7] test with tmp_path --- hvpy/tests/test_utils.py | 27 ++++++++++++++++++++++++++- hvpy/utils.py | 11 +++++------ 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/hvpy/tests/test_utils.py b/hvpy/tests/test_utils.py index 78a335d..56b2d64 100644 --- a/hvpy/tests/test_utils.py +++ b/hvpy/tests/test_utils.py @@ -1,6 +1,8 @@ +from datetime import datetime + import pytest -from hvpy import DataSource, EventType +from hvpy import DataSource, EventType, takeScreenshot from hvpy.utils import ( _create_events_string, _create_layer_string, @@ -8,6 +10,7 @@ _to_event_type, create_events, create_layers, + save_file, ) @@ -65,3 +68,25 @@ def test_create_events(): def test_create_events_string(): assert _create_events_string(EventType.ACTIVE_REGION) == "[AR,all,1]" assert _create_events_string(EventType.ACTIVE_REGION, "xyz") == "[AR,xyz,1]" + + +def test_save_file(tmp_path): + f1 = tmp_path / "test.png" + res = takeScreenshot( + date=datetime.today(), + imageScale=2.44, + layers="[10,1,100]", + x0=0, + y0=0, + width=1920, + height=1200, + display=True, + ) + save_file(res, f1) + assert f1.exists() + + with pytest.raises(ValueError, match="already exists"): + save_file(res, f1) + + save_file(res, f1, overwrite=True) + assert f1.exists() diff --git a/hvpy/utils.py b/hvpy/utils.py index 3eb9633..6e2b7ba 100644 --- a/hvpy/utils.py +++ b/hvpy/utils.py @@ -131,7 +131,7 @@ def create_events(events: List[Union[EventType, str, tuple]]) -> str: return constructed_events[:-1] -def save_file(data: bytearray, filename: str, overwrite: Optional[bool] = False) -> None: +def save_file(data: bytearray, filename: str, overwrite: Optional[bool] = None) -> None: """ Saves a file to the specified path. @@ -145,10 +145,9 @@ def save_file(data: bytearray, filename: str, overwrite: Optional[bool] = False) Whether to overwrite the file if it already exists. Default is `False`, optional. """ - if Path(filename).exists(): - if overwrite: - Path(filename).write_bytes(data) - else: - raise ValueError(f"{filename} already exists, use overwrite=True to overwrite") + if Path(filename).exists() and overwrite is None: + raise ValueError(f"{filename} already exists. Use overwrite=True to overwrite.") + elif Path(filename).exists() and overwrite is True: + Path(filename).write_bytes(data) else: Path(filename).write_bytes(data) From 14963d5619040d1e73b1aefbfe1073a0ba9113d3 Mon Sep 17 00:00:00 2001 From: akash5100 Date: Wed, 31 Aug 2022 15:58:48 +0530 Subject: [PATCH 4/7] update typehint for filename and tests --- hvpy/tests/test_utils.py | 4 ++-- hvpy/utils.py | 12 +++++------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/hvpy/tests/test_utils.py b/hvpy/tests/test_utils.py index 56b2d64..5530383 100644 --- a/hvpy/tests/test_utils.py +++ b/hvpy/tests/test_utils.py @@ -82,11 +82,11 @@ def test_save_file(tmp_path): height=1200, display=True, ) - save_file(res, f1) + save_file(res, f1, overwrite=False) assert f1.exists() with pytest.raises(ValueError, match="already exists"): - save_file(res, f1) + save_file(res, f1, overwrite=False) save_file(res, f1, overwrite=True) assert f1.exists() diff --git a/hvpy/utils.py b/hvpy/utils.py index 6e2b7ba..4bd01d0 100644 --- a/hvpy/utils.py +++ b/hvpy/utils.py @@ -1,4 +1,4 @@ -from typing import Any, List, Union, Callable, Optional +from typing import Any, List, Union, Callable from pathlib import Path from datetime import datetime @@ -131,7 +131,7 @@ def create_events(events: List[Union[EventType, str, tuple]]) -> str: return constructed_events[:-1] -def save_file(data: bytearray, filename: str, overwrite: Optional[bool] = None) -> None: +def save_file(data: bytearray, filename: Path, overwrite: bool = False) -> None: """ Saves a file to the specified path. @@ -143,11 +143,9 @@ def save_file(data: bytearray, filename: str, overwrite: Optional[bool] = None) The path to save the file to. overwrite Whether to overwrite the file if it already exists. - Default is `False`, optional. + Default is `False`. """ - if Path(filename).exists() and overwrite is None: + if filename.exists() and not overwrite: raise ValueError(f"{filename} already exists. Use overwrite=True to overwrite.") - elif Path(filename).exists() and overwrite is True: - Path(filename).write_bytes(data) else: - Path(filename).write_bytes(data) + filename.write_bytes(data) From 80a13b69f23751510d201ae8e82f8d5161409cbb Mon Sep 17 00:00:00 2001 From: Akash Verma Date: Wed, 31 Aug 2022 16:55:10 +0530 Subject: [PATCH 5/7] Apply suggestions from code review Co-authored-by: Nabil Freij --- hvpy/utils.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/hvpy/utils.py b/hvpy/utils.py index 4bd01d0..c532b3f 100644 --- a/hvpy/utils.py +++ b/hvpy/utils.py @@ -131,7 +131,7 @@ def create_events(events: List[Union[EventType, str, tuple]]) -> str: return constructed_events[:-1] -def save_file(data: bytearray, filename: Path, overwrite: bool = False) -> None: +def save_file(data: bytearray, filename: Union[Path, str], overwrite: bool = False) -> None: """ Saves a file to the specified path. @@ -147,5 +147,4 @@ def save_file(data: bytearray, filename: Path, overwrite: bool = False) -> None: """ if filename.exists() and not overwrite: raise ValueError(f"{filename} already exists. Use overwrite=True to overwrite.") - else: - filename.write_bytes(data) + filename.write_bytes(data) From 2ff4f84d4639599cae2d9157e04344a6c1090783 Mon Sep 17 00:00:00 2001 From: akash5100 Date: Wed, 31 Aug 2022 16:58:41 +0530 Subject: [PATCH 6/7] Fix mypy error --- hvpy/utils.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hvpy/utils.py b/hvpy/utils.py index c532b3f..0c2a3d3 100644 --- a/hvpy/utils.py +++ b/hvpy/utils.py @@ -145,6 +145,8 @@ def save_file(data: bytearray, filename: Union[Path, str], overwrite: bool = Fal Whether to overwrite the file if it already exists. Default is `False`. """ + if isinstance(filename, str): + filename = Path(filename) if filename.exists() and not overwrite: raise ValueError(f"{filename} already exists. Use overwrite=True to overwrite.") filename.write_bytes(data) From ee8e60e3a25d5373d252a494197ccde191844b91 Mon Sep 17 00:00:00 2001 From: akash5100 Date: Wed, 31 Aug 2022 17:06:21 +0530 Subject: [PATCH 7/7] test for string input --- hvpy/tests/test_utils.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/hvpy/tests/test_utils.py b/hvpy/tests/test_utils.py index 5530383..10a48b3 100644 --- a/hvpy/tests/test_utils.py +++ b/hvpy/tests/test_utils.py @@ -84,9 +84,11 @@ def test_save_file(tmp_path): ) save_file(res, f1, overwrite=False) assert f1.exists() - with pytest.raises(ValueError, match="already exists"): save_file(res, f1, overwrite=False) - save_file(res, f1, overwrite=True) assert f1.exists() + + f2 = tmp_path / "test2.png" + save_file(res, str(f2), overwrite=False) + assert f2.exists()