From faa3f598c2f168ff2baafe551bb06602a55b3f14 Mon Sep 17 00:00:00 2001 From: akash5100 Date: Sun, 14 Aug 2022 10:09:54 +0530 Subject: [PATCH 1/4] Add downloadMovie endpoint --- hvpy/api_groups/movies/download_movie.py | 35 +++++++++++++++++++ .../movies/tests/test_download_movie.py | 32 +++++++++++++++++ .../movies/tests/test_get_movie_status.py | 2 +- hvpy/facade.py | 28 +++++++++++++++ hvpy/parameters.py | 2 ++ 5 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 hvpy/api_groups/movies/download_movie.py create mode 100644 hvpy/api_groups/movies/tests/test_download_movie.py diff --git a/hvpy/api_groups/movies/download_movie.py b/hvpy/api_groups/movies/download_movie.py new file mode 100644 index 0000000..f47565c --- /dev/null +++ b/hvpy/api_groups/movies/download_movie.py @@ -0,0 +1,35 @@ +from typing import Optional + +from hvpy.io import HvpyParameters, OutputType + + +class downloadMovieInputParameters(HvpyParameters): + """ + Handles the input parameters of the ``downloadMovie`` API. + + Attributes + ---------- + {Shared} + id + Unique movie identifier, returned as a response by the ``queueMovie`` endpoint request. + format + Movie format. + hq + Download high quality movie file. + Defaults to `False`, optional. + + References + ---------- + * ``__ + {Shared} + """ + + id: str + format: str + hq: Optional[bool] = False + + def get_output_type(self) -> OutputType: + """ + Returns the output type of the API call. + """ + return OutputType.RAW diff --git a/hvpy/api_groups/movies/tests/test_download_movie.py b/hvpy/api_groups/movies/tests/test_download_movie.py new file mode 100644 index 0000000..281a755 --- /dev/null +++ b/hvpy/api_groups/movies/tests/test_download_movie.py @@ -0,0 +1,32 @@ +import pytest + +from hvpy import downloadMovie +from hvpy.api_groups.movies.download_movie import downloadMovieInputParameters + + +def test_raw_response(): + response = downloadMovie( + id="h2n6n", + format="mp4", + ) + assert isinstance(response, bytes) + + +def test_error_handling(): + with pytest.raises(TypeError, match="missing 1 required positional argument: 'id'"): + downloadMovie( + format="mp4", + ) + + with pytest.raises(TypeError, match="missing 1 required positional argument: 'format'"): + downloadMovie( + id="VXvX5", + ) + + +def test_url_property(): + params = downloadMovieInputParameters( + id="VXvX5", + format="mp4", + ) + assert params.url == "https://api.beta.helioviewer.org/v2/downloadMovie/" diff --git a/hvpy/api_groups/movies/tests/test_get_movie_status.py b/hvpy/api_groups/movies/tests/test_get_movie_status.py index 7a11609..bfe757a 100644 --- a/hvpy/api_groups/movies/tests/test_get_movie_status.py +++ b/hvpy/api_groups/movies/tests/test_get_movie_status.py @@ -22,7 +22,7 @@ def test_str_response(): assert response.startswith("myCallback(") -def test_error_hanpytestdling(): +def test_error_handling(): with pytest.raises(TypeError, match="missing 1 required positional argument: 'id'"): getMovieStatus( format="mp4", diff --git a/hvpy/facade.py b/hvpy/facade.py index 5730ef1..46322da 100644 --- a/hvpy/facade.py +++ b/hvpy/facade.py @@ -18,6 +18,7 @@ "queueMovie", "reQueueMovie", "getMovieStatus", + "downloadMovie", ] @@ -446,3 +447,30 @@ def getMovieStatus( token=token, ) return execute_api_call(input_parameters=params) + + +@add_shared_docstring(downloadMovieInputParameters) +def downloadMovie( + id: str, + format: str, + hq: Optional[bool] = False, +) -> Union[bytes, str, Dict[str, Any]]: + """ + Download a custom movie that was generated using the ``queueMovie`` API + endpoint. + + Parameters + ---------- + {Insert} + Examples + -------- + >>> from hvpy import downloadMovie + >>> downloadMovie(id="h2n6n", format="mp4") + b'...' + """ + params = downloadMovieInputParameters( + id=id, + format=format, + hq=hq, + ) + return execute_api_call(input_parameters=params) diff --git a/hvpy/parameters.py b/hvpy/parameters.py index 52f67ca..d101e83 100644 --- a/hvpy/parameters.py +++ b/hvpy/parameters.py @@ -10,6 +10,7 @@ from hvpy.api_groups.official_clients.get_data_sources import getDataSourcesInputParameters from hvpy.api_groups.screenshots.download_screenshot import downloadScreenshotInputParameters from hvpy.api_groups.screenshots.take_screenshot import takeScreenshotInputParameters +from .api_groups.movies.download_movie import downloadMovieInputParameters __all__ = [ "getJP2ImageInputParameters", @@ -24,4 +25,5 @@ "queueMovieInputParameters", "reQueueMovieInputParameters", "getMovieStatusInputParameters", + "downloadMovieInputParameters", ] From 6bd7ab2f2d0d6e807b930b494d137174e6457c42 Mon Sep 17 00:00:00 2001 From: akash5100 Date: Sun, 14 Aug 2022 11:07:11 +0530 Subject: [PATCH 2/4] Fix typos and update docstrings --- hvpy/api_groups/movies/download_movie.py | 8 +++----- hvpy/parameters.py | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/hvpy/api_groups/movies/download_movie.py b/hvpy/api_groups/movies/download_movie.py index f47565c..87f0bf9 100644 --- a/hvpy/api_groups/movies/download_movie.py +++ b/hvpy/api_groups/movies/download_movie.py @@ -1,5 +1,3 @@ -from typing import Optional - from hvpy.io import HvpyParameters, OutputType @@ -13,9 +11,9 @@ class downloadMovieInputParameters(HvpyParameters): id Unique movie identifier, returned as a response by the ``queueMovie`` endpoint request. format - Movie format. + Movie Format (mp4, webm, or flv). hq - Download high quality movie file. + Download a higher-quality movie file (valid for .mp4 movies only, ignored otherwise). Defaults to `False`, optional. References @@ -26,7 +24,7 @@ class downloadMovieInputParameters(HvpyParameters): id: str format: str - hq: Optional[bool] = False + hq: bool = False def get_output_type(self) -> OutputType: """ diff --git a/hvpy/parameters.py b/hvpy/parameters.py index d101e83..1c4f3ce 100644 --- a/hvpy/parameters.py +++ b/hvpy/parameters.py @@ -3,6 +3,7 @@ from hvpy.api_groups.jpeg2000.get_jpx import getJPXInputParameters from hvpy.api_groups.jpeg2000.get_jpx_closest_to_mid_point import getJPXClosestToMidPointInputParameters from hvpy.api_groups.jpeg2000.get_status import getStatusInputParameters +from hvpy.api_groups.movies.download_movie import downloadMovieInputParameters from hvpy.api_groups.movies.get_movie_status import getMovieStatusInputParameters from hvpy.api_groups.movies.queue_movie import queueMovieInputParameters from hvpy.api_groups.movies.re_queue_movie import reQueueMovieInputParameters @@ -10,7 +11,6 @@ from hvpy.api_groups.official_clients.get_data_sources import getDataSourcesInputParameters from hvpy.api_groups.screenshots.download_screenshot import downloadScreenshotInputParameters from hvpy.api_groups.screenshots.take_screenshot import takeScreenshotInputParameters -from .api_groups.movies.download_movie import downloadMovieInputParameters __all__ = [ "getJP2ImageInputParameters", From cdb4ef9e756baa987cc11bd0f2d91eb8d0595300 Mon Sep 17 00:00:00 2001 From: Nabil Freij Date: Sat, 13 Aug 2022 22:58:43 -0700 Subject: [PATCH 3/4] Apply suggestions from code review --- hvpy/api_groups/movies/download_movie.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hvpy/api_groups/movies/download_movie.py b/hvpy/api_groups/movies/download_movie.py index 87f0bf9..fcbe00a 100644 --- a/hvpy/api_groups/movies/download_movie.py +++ b/hvpy/api_groups/movies/download_movie.py @@ -11,9 +11,9 @@ class downloadMovieInputParameters(HvpyParameters): id Unique movie identifier, returned as a response by the ``queueMovie`` endpoint request. format - Movie Format (mp4, webm, or flv). + Movie Format ("mp4", "webm", or "flv"). hq - Download a higher-quality movie file (valid for .mp4 movies only, ignored otherwise). + Download a higher-quality movie file (valid for "mp4" movies only, ignored otherwise). Defaults to `False`, optional. References From 085b4091345085e853c1f7580d5caf8059d81750 Mon Sep 17 00:00:00 2001 From: Nabil Freij Date: Sat, 13 Aug 2022 22:59:13 -0700 Subject: [PATCH 4/4] Update hvpy/facade.py --- hvpy/facade.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hvpy/facade.py b/hvpy/facade.py index 46322da..9161ae4 100644 --- a/hvpy/facade.py +++ b/hvpy/facade.py @@ -453,7 +453,7 @@ def getMovieStatus( def downloadMovie( id: str, format: str, - hq: Optional[bool] = False, + hq: bool = False, ) -> Union[bytes, str, Dict[str, Any]]: """ Download a custom movie that was generated using the ``queueMovie`` API