From 82142b3d7b2633a2b5a526467002382cd086e01f Mon Sep 17 00:00:00 2001 From: Vini Salazar <17276653+vinisalazar@users.noreply.github.com> Date: Wed, 30 Nov 2022 12:21:37 +1100 Subject: [PATCH] Remove ** from kwargs to make them more explicit - Code review for #280 --- erddapy/core/url.py | 10 ++++++++-- erddapy/erddapy.py | 16 +++++++++++----- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/erddapy/core/url.py b/erddapy/core/url.py index 2dadd967..b164e889 100644 --- a/erddapy/core/url.py +++ b/erddapy/core/url.py @@ -26,14 +26,20 @@ def _urlopen(url: str, auth: Optional[tuple] = None, **kwargs: Dict) -> BinaryIO return io.BytesIO(response.content) -def urlopen(url: str, auth: Optional[tuple] = None, **kwargs: Dict) -> BinaryIO: +def urlopen( + url: str, + auth: Optional[tuple] = None, + requests_kwargs: Optional[Dict] = None, +) -> BinaryIO: """Thin wrapper around httpx get content. See httpx.get docs for the `params` and `kwargs` options. """ # Ignoring type checks here b/c mypy does not support decorated functions. - data = _urlopen(url=url, auth=auth, **kwargs) # type: ignore + if requests_kwargs is None: + requests_kwargs = {} + data = _urlopen(url=url, auth=auth, **requests_kwargs) # type: ignore data.seek(0) return data diff --git a/erddapy/erddapy.py b/erddapy/erddapy.py index 3c34b656..b3fb8719 100644 --- a/erddapy/erddapy.py +++ b/erddapy/erddapy.py @@ -331,10 +331,14 @@ def get_download_url( **kwargs, ) - def to_pandas(self, **kw): + def to_pandas( + self, + requests_kwargs: Optional[Dict] = None, + pandas_kwargs: Optional[Dict] = None, + ): """Save a data request to a pandas.DataFrame. - Accepts any `pandas.read_csv` keyword arguments. + Accepts any `pandas.read_csv` keyword arguments, passed as a dictionary to pandas_kwargs. This method uses the .csvp [1] response as the default for simplicity, please check ERDDAP's documentation for the other csv options available. @@ -342,9 +346,11 @@ def to_pandas(self, **kw): [1] Download a ISO-8859-1 .csv file with line 1: name (units). Times are ISO 8601 strings. """ - response = kw.pop("response", "csvp") - url = self.get_download_url(response=response, **kw) - return to_pandas(url, **kw) + if requests_kwargs is None: + requests_kwargs = {} + response = requests_kwargs.pop("response", "csvp") + url = self.get_download_url(response=response, **requests_kwargs) + return to_pandas(url, requests_kwargs, pandas_kwargs) def to_ncCF(self, protocol: str = None, **kw): """Load the data request into a Climate and Forecast compliant netCDF4-python object."""