diff --git a/docs/sphinx/source/whatsnew/v0.10.2.rst b/docs/sphinx/source/whatsnew/v0.10.2.rst index 4b18a7fe9b..f95f0bd93d 100644 --- a/docs/sphinx/source/whatsnew/v0.10.2.rst +++ b/docs/sphinx/source/whatsnew/v0.10.2.rst @@ -11,6 +11,10 @@ Deprecations Enhancements ~~~~~~~~~~~~ +* Added support for dates to be specified as strings in the iotools get functions: + :py:func:`pvlib.iotools.get_pvgis_hourly`, :py:func:`pvlib.iotools.get_cams`, + :py:func:`pvlib.iotools.get_bsrn`, and :py:func:`pvlib.iotools.read_midc_raw_data_from_nrel`. + (:pull:`1800`) Bug fixes @@ -31,4 +35,4 @@ Requirements Contributors ~~~~~~~~~~~~ - +* Adam R. Jensen (:ghuser:`AdamRJensen`) diff --git a/pvlib/iotools/bsrn.py b/pvlib/iotools/bsrn.py index b9292b41ae..c9ed8394cd 100644 --- a/pvlib/iotools/bsrn.py +++ b/pvlib/iotools/bsrn.py @@ -154,6 +154,10 @@ def get_bsrn(station, start, end, username, password, # The FTP server uses lowercase station abbreviations station = station.lower() + # Use pd.to_datetime so that strings (e.g. '2021-01-01') are accepted + start = pd.to_datetime(start) + end = pd.to_datetime(end) + # Generate list files to download based on start/end (SSSMMYY.dat.gz) filenames = pd.date_range( start, end.replace(day=1) + pd.DateOffset(months=1), freq='1M')\ diff --git a/pvlib/iotools/midc.py b/pvlib/iotools/midc.py index 75cc5609a7..c554dd1d1f 100644 --- a/pvlib/iotools/midc.py +++ b/pvlib/iotools/midc.py @@ -215,9 +215,9 @@ def read_midc_raw_data_from_nrel(site, start, end, variable_map={}, ---------- site: string The MIDC station id. - start: datetime + start: datetime-like Start date for requested data. - end: datetime + end: datetime-like End date for requested data. variable_map: dict A dictionary mapping MIDC field names to pvlib names. Used to @@ -247,8 +247,8 @@ def read_midc_raw_data_from_nrel(site, start, end, variable_map={}, for more details and considerations. """ args = {'site': site, - 'begin': start.strftime('%Y%m%d'), - 'end': end.strftime('%Y%m%d')} + 'begin': pd.to_datetime(start).strftime('%Y%m%d'), + 'end': pd.to_datetime(end).strftime('%Y%m%d')} url = 'https://midcdmz.nrel.gov/apps/data_api.pl' # NOTE: just use requests.get(url, params=args) to build querystring # number of header columns and data columns do not always match, diff --git a/pvlib/iotools/pvgis.py b/pvlib/iotools/pvgis.py index da238898a8..ca1371d4a1 100644 --- a/pvlib/iotools/pvgis.py +++ b/pvlib/iotools/pvgis.py @@ -217,9 +217,9 @@ def get_pvgis_hourly(latitude, longitude, start=None, end=None, if raddatabase is not None: params['raddatabase'] = raddatabase if start is not None: - params['startyear'] = start if isinstance(start, int) else start.year + params['startyear'] = start if isinstance(start, int) else pd.to_datetime(start).year # noqa: E501 if end is not None: - params['endyear'] = end if isinstance(end, int) else end.year + params['endyear'] = end if isinstance(end, int) else pd.to_datetime(end).year # noqa: E501 if peakpower is not None: params['peakpower'] = peakpower diff --git a/pvlib/iotools/sodapro.py b/pvlib/iotools/sodapro.py index 9fb4602e09..95d6ffd866 100644 --- a/pvlib/iotools/sodapro.py +++ b/pvlib/iotools/sodapro.py @@ -47,8 +47,9 @@ def get_cams(latitude, longitude, start, end, email, identifier='mcclear', altitude=None, time_step='1h', time_ref='UT', verbose=False, integrated=False, label=None, map_variables=True, server=URL, timeout=30): - """ - Retrieve time-series of radiation and/or clear-sky global, beam, and + """Retrieve irradiance and clear-sky time series from CAMS. + + Time-series of radiation and/or clear-sky global, beam, and diffuse radiation from CAMS (see [1]_). Data is retrieved from SoDa [2]_. Time coverage: 2004-01-01 to two days ago @@ -65,9 +66,9 @@ def get_cams(latitude, longitude, start, end, email, identifier='mcclear', in decimal degrees, between -90 and 90, north is positive (ISO 19115) longitude : float in decimal degrees, between -180 and 180, east is positive (ISO 19115) - start: datetime like + start: datetime-like First day of the requested period - end: datetime like + end: datetime-like Last day of the requested period email: str Email address linked to a SoDa account @@ -177,8 +178,8 @@ def get_cams(latitude, longitude, start, end, email, identifier='mcclear', altitude = -999 # Start and end date should be in the format: yyyy-mm-dd - start = start.strftime('%Y-%m-%d') - end = end.strftime('%Y-%m-%d') + start = pd.to_datetime(start).strftime('%Y-%m-%d') + end = pd.to_datetime(end).strftime('%Y-%m-%d') email = email.replace('@', '%2540') # Format email address identifier = 'get_{}'.format(identifier.lower()) # Format identifier str diff --git a/pvlib/iotools/srml.py b/pvlib/iotools/srml.py index 81b61556a0..01b835da6d 100644 --- a/pvlib/iotools/srml.py +++ b/pvlib/iotools/srml.py @@ -243,9 +243,9 @@ def get_srml(station, start, end, filetype='PO', map_variables=True, ---------- station : str Two letter station abbreviation. - start : datetime like + start : datetime-like First day of the requested period - end : datetime like + end : datetime-like Last day of the requested period filetype : string, default: 'PO' SRML file type to gather. See notes for explanation.