From 53d81af58bbf653207171a658571e523b2abdb96 Mon Sep 17 00:00:00 2001 From: akash5100 Date: Wed, 7 Sep 2022 14:22:36 +0530 Subject: [PATCH 1/5] Add createScreenshot function --- hvpy/__init__.py | 2 +- hvpy/helpers.py | 84 ++++++++++++++++++++++++++++++++++++++- hvpy/tests/test_helper.py | 37 ++++++++++++++++- 3 files changed, 120 insertions(+), 3 deletions(-) diff --git a/hvpy/__init__.py b/hvpy/__init__.py index a86fdde..14c3a62 100644 --- a/hvpy/__init__.py +++ b/hvpy/__init__.py @@ -2,6 +2,6 @@ from .datasource import * from .event import * from .facade import * -from .helpers import createMovie +from .helpers import createMovie, createScreenshot from .utils import create_events, create_layers, save_file from .version import __version__ diff --git a/hvpy/helpers.py b/hvpy/helpers.py index b04aa48..01fd2fa 100644 --- a/hvpy/helpers.py +++ b/hvpy/helpers.py @@ -4,11 +4,13 @@ from datetime import datetime from hvpy.api_groups.movies.queue_movie import queueMovieInputParameters -from hvpy.facade import downloadMovie, getMovieStatus, queueMovie +from hvpy.api_groups.screenshots.take_screenshot import takeScreenshotInputParameters +from hvpy.facade import downloadMovie, downloadScreenshot, getMovieStatus, queueMovie, takeScreenshot from hvpy.utils import _add_shared_docstring, save_file __all__ = [ "createMovie", + "createScreenshot", ] @@ -124,3 +126,83 @@ def createMovie( overwrite=overwrite, ) return Path(filename) + + +@_add_shared_docstring(takeScreenshotInputParameters) +def createScreenshot( + date: datetime, + imageScale: float, + layers: str, + events: Optional[str] = None, + eventLabels: Optional[bool] = False, + scale: Optional[bool] = False, + scaleType: Optional[str] = None, + scaleX: Optional[int] = None, + scaleY: Optional[int] = None, + width: Optional[str] = None, + height: Optional[str] = None, + x0: Optional[str] = None, + y0: Optional[str] = None, + x1: Optional[str] = None, + y1: Optional[str] = None, + x2: Optional[str] = None, + y2: Optional[str] = None, + watermark: Optional[bool] = False, + overwrite: bool = False, + filename: Union[str, Path] = None, +) -> Path: + """ + Automatically creates a screenshot using `takeScreenshot` functions. + + Parameters + ---------- + {Insert} + overwrite + Whether to overwrite the file if it already exists. + Default is `False`. + filename + The path to save the file to. + Optional, will default to ``f"{starttime}_{endtime}.{format}"``. + + Examples + -------- + >>> from hvpy import createScreenshot, DataSource, create_events, create_layers, EventType + >>> from datetime import datetime, timedelta + >>> screenshot_location = createScreenshot( + ... date=datetime.today() - timedelta(days=15), + ... layers=create_layers([(DataSource.AIA_171, 100)]), + ... events=create_events([EventType.ACTIVE_REGION]), + ... eventLabels=True, + ... imageScale=1, + ... x0=0, + ... y0=0, + ... width=100, + ... height=100, + ... filename="my_screenshot", + ... ) + >>> # This is to cleanup the file created from the example + >>> # you don't need to do this + >>> from pathlib import Path + >>> Path('my_screenshot.png').unlink() + """ + input_params = locals() + # These are used later on but we want to avoid passing + # them into takeScreenshot. + input_params.pop("overwrite") + input_params.pop("filename") + res = takeScreenshot(**input_params) + if res.get("error"): + raise RuntimeError(res["error"]) + binary_data = downloadScreenshot( + id=res["id"], + ) + if filename is None: + filename = f"{date.strftime('%Y_%m_%d_%H_%M_%S')}.png" + else: + filename = f"{filename}.png" + save_file( + data=binary_data, + filename=filename, + overwrite=True, + ) + return Path(filename) diff --git a/hvpy/tests/test_helper.py b/hvpy/tests/test_helper.py index 96a1188..0d62ef1 100644 --- a/hvpy/tests/test_helper.py +++ b/hvpy/tests/test_helper.py @@ -4,7 +4,7 @@ import pytest from hvpy.datasource import DataSource -from hvpy.helpers import createMovie +from hvpy.helpers import createMovie, createScreenshot from hvpy.utils import create_events, create_layers @@ -93,3 +93,38 @@ def test_error_handling(tmp_path): imageScale=1, filename=f1, ) + + +def test_createScreenshot(date, tmp_path): + f1 = tmp_path / "screenshot" + result = createScreenshot( + date=date, + layers=create_layers([(DataSource.AIA_171, 100)]), + events=create_events(["AR"]), + imageScale=2.5, + x0=0, + y0=0, + width=4000, + height=4000, + filename=f1, + ) + assert isinstance(result, Path) + assert result.exists() + assert result == tmp_path / "screenshot.png" + result.unlink() # clean up + + +def test_createScreenshot_with_none_filename(date): + result = createScreenshot( + date=date, + layers=create_layers([(DataSource.AIA_171, 100)]), + events=create_events(["AR"]), + imageScale=2.5, + x0=0, + y0=0, + width=4000, + height=4000, + ) + assert isinstance(result, Path) + assert result.exists() + result.unlink() # clean up From ae1e69e6d5a437c303ae7d484d89465f29b847a3 Mon Sep 17 00:00:00 2001 From: akash5100 Date: Thu, 8 Sep 2022 12:16:40 +0530 Subject: [PATCH 2/5] Suggested changes for the filename and testing --- hvpy/helpers.py | 11 ++++++----- hvpy/tests/test_helper.py | 1 - 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/hvpy/helpers.py b/hvpy/helpers.py index 342eeec..c00496f 100644 --- a/hvpy/helpers.py +++ b/hvpy/helpers.py @@ -59,7 +59,7 @@ def createMovie( Default is `False`. filename The path to save the file to. - Optional, will default to ``f"{starttime}_{endtime}.{format}"``. + Optional, will default to ``f"{res['id']}_{startTime.date()}_{endTime.date()}.{format}"``. hq Download a higher-quality movie file (valid for "mp4" movies only, ignored otherwise). Default is `False`, optional. @@ -152,7 +152,8 @@ def createScreenshot( filename: Union[str, Path] = None, ) -> Path: """ - Automatically creates a screenshot using `takeScreenshot` functions. + Automatically creates a screenshot using `takeScreenshot`, + `downloadScreenshot` functions. Parameters ---------- @@ -162,7 +163,7 @@ def createScreenshot( Default is `False`. filename The path to save the file to. - Optional, will default to ``f"{starttime}_{endtime}.{format}"``. + Optional, will default to ``f"{res['id']}_{date.date()}.png"``. Examples -------- @@ -197,12 +198,12 @@ def createScreenshot( id=res["id"], ) if filename is None: - filename = f"{date.strftime('%Y_%m_%d_%H_%M_%S')}.png" + filename = f"{res['id']}_{date.date()}.png" else: filename = f"{filename}.png" save_file( data=binary_data, filename=filename, - overwrite=True, + overwrite=overwrite, ) return Path(filename) diff --git a/hvpy/tests/test_helper.py b/hvpy/tests/test_helper.py index 0d62ef1..9e53532 100644 --- a/hvpy/tests/test_helper.py +++ b/hvpy/tests/test_helper.py @@ -111,7 +111,6 @@ def test_createScreenshot(date, tmp_path): assert isinstance(result, Path) assert result.exists() assert result == tmp_path / "screenshot.png" - result.unlink() # clean up def test_createScreenshot_with_none_filename(date): From 0d5af52cbcfd2e266a478e8b5ddc2e7b94947e66 Mon Sep 17 00:00:00 2001 From: Akash Verma Date: Thu, 8 Sep 2022 15:05:25 +0530 Subject: [PATCH 3/5] Apply suggestions from code review Co-authored-by: Nabil Freij --- hvpy/helpers.py | 2 +- hvpy/tests/test_helper.py | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/hvpy/helpers.py b/hvpy/helpers.py index c00496f..e84a1ca 100644 --- a/hvpy/helpers.py +++ b/hvpy/helpers.py @@ -157,13 +157,13 @@ def createScreenshot( Parameters ---------- - {Insert} overwrite Whether to overwrite the file if it already exists. Default is `False`. filename The path to save the file to. Optional, will default to ``f"{res['id']}_{date.date()}.png"``. + {Insert} Examples -------- diff --git a/hvpy/tests/test_helper.py b/hvpy/tests/test_helper.py index 9e53532..c0de367 100644 --- a/hvpy/tests/test_helper.py +++ b/hvpy/tests/test_helper.py @@ -126,4 +126,3 @@ def test_createScreenshot_with_none_filename(date): ) assert isinstance(result, Path) assert result.exists() - result.unlink() # clean up From e929c7c8cc068e9de41b482aa6925c53806aebe8 Mon Sep 17 00:00:00 2001 From: akash5100 Date: Thu, 8 Sep 2022 20:55:24 +0530 Subject: [PATCH 4/5] Applying suggested changes --- hvpy/helpers.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hvpy/helpers.py b/hvpy/helpers.py index c00496f..3ced20e 100644 --- a/hvpy/helpers.py +++ b/hvpy/helpers.py @@ -134,8 +134,8 @@ def createScreenshot( imageScale: float, layers: str, events: Optional[str] = None, - eventLabels: Optional[bool] = False, - scale: Optional[bool] = False, + eventLabels: bool = False, + scale: bool = False, scaleType: Optional[str] = None, scaleX: Optional[int] = None, scaleY: Optional[int] = None, @@ -149,7 +149,7 @@ def createScreenshot( y2: Optional[str] = None, watermark: Optional[bool] = False, overwrite: bool = False, - filename: Union[str, Path] = None, + filename: Optional[Union[str, Path]] = None, ) -> Path: """ Automatically creates a screenshot using `takeScreenshot`, From 413479ef9847ae1bcc9d3df49d878958383348a2 Mon Sep 17 00:00:00 2001 From: akash5100 Date: Thu, 8 Sep 2022 21:00:09 +0530 Subject: [PATCH 5/5] Applying suggested changes --- hvpy/helpers.py | 2 +- hvpy/tests/test_helper.py | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/hvpy/helpers.py b/hvpy/helpers.py index f20eb4a..0853c40 100644 --- a/hvpy/helpers.py +++ b/hvpy/helpers.py @@ -147,7 +147,7 @@ def createScreenshot( y1: Optional[str] = None, x2: Optional[str] = None, y2: Optional[str] = None, - watermark: Optional[bool] = False, + watermark: bool = False, overwrite: bool = False, filename: Optional[Union[str, Path]] = None, ) -> Path: diff --git a/hvpy/tests/test_helper.py b/hvpy/tests/test_helper.py index c0de367..9e53532 100644 --- a/hvpy/tests/test_helper.py +++ b/hvpy/tests/test_helper.py @@ -126,3 +126,4 @@ def test_createScreenshot_with_none_filename(date): ) assert isinstance(result, Path) assert result.exists() + result.unlink() # clean up