diff -Nru drms-0.6.3/changelog/README.rst drms-0.6.4/changelog/README.rst --- drms-0.6.3/changelog/README.rst 1970-01-01 00:00:00.000000000 +0000 +++ drms-0.6.4/changelog/README.rst 2023-06-13 14:41:19.000000000 +0000 @@ -0,0 +1,34 @@ +========= +Changelog +========= + +.. note:: + + This README was adapted from the pytest changelog readme under the terms of the MIT licence. + +This directory contains "news fragments" which are short files that contain a small **ReST**-formatted text that will be added to the next ``CHANGELOG``. + +The ``CHANGELOG`` will be read by users, so this description should be aimed at drms users instead of describing internal changes which are only relevant to the developers. + +Make sure to use full sentences with correct case and punctuation, for example:: + + Add support for Helioprojective coordinates in `sunpy.coordinates.frames`. + +Please try to use Sphinx intersphinx using backticks. + +Each file should be named like ``.[.].rst``, where ```` is a pull request number, ``COUNTER`` is an optional number if a PR needs multiple entries with the same type and ```` is one of: + +* ``breaking``: A change which requires users to change code and is not backwards compatible. (Not to be used for removal of deprecated features.) +* ``feature``: New user facing features and any new behavior. +* ``bugfix``: Fixes a reported bug. +* ``doc``: Documentation addition or improvement, like rewording an entire session or adding missing docs. +* ``docfix``: Correction to existing documentation, such as fixing a typo or adding a missing input parameter. +* ``removal``: Feature deprecation and/or feature removal. +* ``trivial``: A change which has no user facing effect or is tiny change. + +So for example: ``123.feature.rst``, ``456.bugfix.rst``. + +If you are unsure what pull request type to use, don't hesitate to ask in your PR. + +Note that the ``towncrier`` tool will automatically reflow your text, so it will work best if you stick to a single paragraph, but multiple sentences and links are OK and encouraged. +You can install ``towncrier`` and then run ``towncrier --draft`` if you want to get a preview of how your change will look in the final release notes. diff -Nru drms-0.6.3/CHANGELOG.rst drms-0.6.4/CHANGELOG.rst --- drms-0.6.3/CHANGELOG.rst 2022-10-13 21:08:43.000000000 +0000 +++ drms-0.6.4/CHANGELOG.rst 2023-06-13 14:41:19.000000000 +0000 @@ -1,3 +1,14 @@ +0.6.4 (2023-06-09) +================== + +Bug Fixes +--------- + +- Modified :meth:`drms.client.Client._convert_numeric_keywords` to use a row-centric approach for handling hexadecimal strings. (`#102 `__) +- Modified :meth:`drms.utils.to_datetime` to work with Pandas 2.0. (`#103 `__) +- Fixed pandas 2.0.0 warning. (`#97 `__) + + 0.6.3 (2022-10-13) ================== diff -Nru drms-0.6.3/.codecov.yaml drms-0.6.4/.codecov.yaml --- drms-0.6.3/.codecov.yaml 1970-01-01 00:00:00.000000000 +0000 +++ drms-0.6.4/.codecov.yaml 2023-06-13 14:41:19.000000000 +0000 @@ -0,0 +1,6 @@ +comment: off +coverage: + status: + project: + default: + threshold: 0.2% diff -Nru drms-0.6.3/conftest.py drms-0.6.4/conftest.py --- drms-0.6.3/conftest.py 2022-10-13 21:08:43.000000000 +0000 +++ drms-0.6.4/conftest.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,94 +0,0 @@ -from urllib.error import URLError, HTTPError -from urllib.request import urlopen - -import pytest - -import drms - -# Test URLs, used to check if a online site is reachable -jsoc_testurl = "http://jsoc.stanford.edu/" -kis_testurl = "http://drms.leibniz-kis.de/" - - -def pytest_addoption(parser): - parser.addoption("--email", help="Export email address") - - -class lazily_cached: - """ - Lazily evaluted function call with cached result. - """ - - def __init__(self, f, *args, **kwargs): - self.func = lambda: f(*args, **kwargs) - - def __call__(self): - if not hasattr(self, "result"): - self.result = self.func() - return self.result - - -def site_reachable(url, timeout=15): - """ - Checks if the given URL is accessible. - """ - try: - urlopen(url, timeout=timeout) - except (URLError, HTTPError): - return False - return True - - -# Create lazily evaluated, cached site checks for JSOC and KIS. -jsoc_reachable = lazily_cached(site_reachable, jsoc_testurl) -kis_reachable = lazily_cached(site_reachable, kis_testurl) - - -def pytest_runtest_setup(item): - # Skip JSOC online site tests if the site is not reachable. - if item.get_closest_marker("jsoc") is not None: - if not jsoc_reachable(): - pytest.skip("JSOC is not reachable") - - # Skip KIS online site tests if the site is not reachable. - if item.get_closest_marker("kis") is not None: - if not kis_reachable(): - pytest.skip("KIS is not reachable") - - # Skip export tests if no email address was specified. - if item.get_closest_marker("export") is not None: - email = item.config.getoption("email") - if email is None: - pytest.skip("No email address specified; use the --email option to enable export tests") - - -@pytest.fixture -def email(request): - """ - Email address from --email command line option. - """ - return request.config.getoption("--email") - - -@pytest.fixture -def jsoc_client(): - """ - Client fixture for JSOC online tests, does not use email. - """ - return drms.Client("jsoc") - - -@pytest.fixture -def jsoc_client_export(email): - """ - Client fixture for JSOC online tests, uses email if specified. - """ - return drms.Client("jsoc", email=email) - - -@pytest.fixture -def kis_client(): - """ - Client fixture for KIS online tests. - """ - return drms.Client("kis") diff -Nru drms-0.6.3/debian/changelog drms-0.6.4/debian/changelog --- drms-0.6.3/debian/changelog 2022-10-14 12:06:27.000000000 +0000 +++ drms-0.6.4/debian/changelog 2023-06-23 17:59:34.000000000 +0000 @@ -1,3 +1,10 @@ +drms (0.6.4-1) unstable; urgency=medium + + * New upstream version 0.6.4 + * Push Standards-Version to 4.6.2. No changes needed + + -- Ole Streicher Fri, 23 Jun 2023 19:59:34 +0200 + drms (0.6.3-1) unstable; urgency=medium [ Debian Janitor ] diff -Nru drms-0.6.3/debian/control drms-0.6.4/debian/control --- drms-0.6.3/debian/control 2022-10-14 11:49:25.000000000 +0000 +++ drms-0.6.4/debian/control 2023-06-23 17:58:51.000000000 +0000 @@ -13,7 +13,7 @@ python3-pytest-remotedata , python3-setuptools, python3-setuptools-scm -Standards-Version: 4.6.1 +Standards-Version: 4.6.2 Vcs-Browser: https://salsa.debian.org/debian-astro-team/drms Vcs-Git: https://salsa.debian.org/debian-astro-team/drms.git Homepage: https://github.com/sunpy/drms diff -Nru drms-0.6.3/docs/tutorial.rst drms-0.6.4/docs/tutorial.rst --- drms-0.6.3/docs/tutorial.rst 2022-10-13 21:08:43.000000000 +0000 +++ drms-0.6.4/docs/tutorial.rst 2023-06-13 14:41:19.000000000 +0000 @@ -157,7 +157,7 @@ .. code-block:: python >>> import os - >>> email_address = os.environ["JSOC_EMAIL"] + >>> email_address = os.environ["JSOC_EMAIL"] # doctest: +REMOTE_DATA First, we start again with importing the ``drms`` library and creating a `~drms.client.Client` instance: diff -Nru drms-0.6.3/drms/client.py drms-0.6.4/drms/client.py --- drms-0.6.3/drms/client.py 2022-10-13 21:08:43.000000000 +0000 +++ drms-0.6.4/drms/client.py 2023-06-13 14:41:19.000000000 +0000 @@ -651,7 +651,7 @@ idx = kdf[k].str.startswith("0x") if idx.any(): k_idx = kdf.columns.get_loc(k) - kdf[kdf.columns[k_idx]] = kdf[kdf.columns[k_idx]].apply(int, base=16) + kdf.loc[idx, kdf.columns[k_idx]] = kdf.loc[idx, kdf.columns[k_idx]].apply(int, base=16) if k in num_keys: kdf[k] = _pd_to_numeric_coerce(kdf[k]) diff -Nru drms-0.6.3/drms/tests/conftest.py drms-0.6.4/drms/tests/conftest.py --- drms-0.6.3/drms/tests/conftest.py 1970-01-01 00:00:00.000000000 +0000 +++ drms-0.6.4/drms/tests/conftest.py 2023-06-13 14:41:19.000000000 +0000 @@ -0,0 +1,95 @@ +from urllib.error import URLError, HTTPError +from urllib.request import urlopen + +import pytest + +# Test URLs, used to check if a online site is reachable +jsoc_testurl = "http://jsoc.stanford.edu/" +kis_testurl = "http://drms.leibniz-kis.de/" + + +def pytest_addoption(parser): + parser.addoption("--email", action="store", help="Export email address") + + +class lazily_cached: + """ + Lazily evaluted function call with cached result. + """ + + def __init__(self, f, *args, **kwargs): + self.func = lambda: f(*args, **kwargs) + + def __call__(self): + if not hasattr(self, "result"): + self.result = self.func() + return self.result + + +def site_reachable(url, timeout=15): + """ + Checks if the given URL is accessible. + """ + try: + urlopen(url, timeout=timeout) + except (URLError, HTTPError): + return False + return True + + +# Create lazily evaluated, cached site checks for JSOC and KIS. +jsoc_reachable = lazily_cached(site_reachable, jsoc_testurl) +kis_reachable = lazily_cached(site_reachable, kis_testurl) + + +def pytest_runtest_setup(item): + # Skip JSOC online site tests if the site is not reachable. + if item.get_closest_marker("jsoc") is not None: + if not jsoc_reachable(): + pytest.skip("JSOC is not reachable") + + # Skip KIS online site tests if the site is not reachable. + if item.get_closest_marker("kis") is not None: + if not kis_reachable(): + pytest.skip("KIS is not reachable") + + +@pytest.fixture +def email(request): + """ + Email address from --email command line option. + """ + email = request.config.getoption("--email", None, skip=True) + if email is None: + pytest.skip("No email address specified; use the --email option to enable export tests") + return email + + +@pytest.fixture +def jsoc_client(): + """ + Client fixture for JSOC online tests, does not use email. + """ + import drms + + return drms.Client("jsoc") + + +@pytest.fixture +def jsoc_client_export(email): + """ + Client fixture for JSOC online tests, uses email if specified. + """ + import drms + + return drms.Client("jsoc", email=email) + + +@pytest.fixture +def kis_client(): + """ + Client fixture for KIS online tests. + """ + import drms + + return drms.Client("kis") diff -Nru drms-0.6.3/drms/tests/test_jsoc_email.py drms-0.6.4/drms/tests/test_jsoc_email.py --- drms-0.6.3/drms/tests/test_jsoc_email.py 2022-10-13 21:08:43.000000000 +0000 +++ drms-0.6.4/drms/tests/test_jsoc_email.py 2023-06-13 14:41:19.000000000 +0000 @@ -38,7 +38,6 @@ @pytest.mark.jsoc -@pytest.mark.export @pytest.mark.remote_data def test_email_cmdopt_check(email): c = drms.Client("jsoc") @@ -46,7 +45,6 @@ @pytest.mark.jsoc -@pytest.mark.export @pytest.mark.remote_data def test_email_cmdopt_set(email): c = drms.Client("jsoc") @@ -55,7 +53,6 @@ @pytest.mark.jsoc -@pytest.mark.export @pytest.mark.remote_data def test_email_cmdopt_init(email): c = drms.Client("jsoc", email=email) diff -Nru drms-0.6.3/drms/tests/test_jsoc_export.py drms-0.6.4/drms/tests/test_jsoc_export.py --- drms-0.6.3/drms/tests/test_jsoc_export.py 2022-10-13 21:08:43.000000000 +0000 +++ drms-0.6.4/drms/tests/test_jsoc_export.py 2023-06-13 14:41:19.000000000 +0000 @@ -4,7 +4,6 @@ @pytest.mark.jsoc -@pytest.mark.export @pytest.mark.remote_data @pytest.mark.parametrize("method", ["url_quick", "url"]) def test_export_asis_basic(jsoc_client_export, method): @@ -34,7 +33,6 @@ @pytest.mark.jsoc -@pytest.mark.export @pytest.mark.remote_data def test_export_fits_basic(jsoc_client_export): r = jsoc_client_export.export( @@ -63,7 +61,6 @@ @pytest.mark.jsoc -@pytest.mark.export @pytest.mark.remote_data def test_export_im_patch(jsoc_client_export): # TODO: check that this has actually done the export/processing properly? @@ -109,7 +106,6 @@ @pytest.mark.jsoc -@pytest.mark.export @pytest.mark.remote_data def test_export_rebin(jsoc_client_export): # TODO: check that this has actually done the export/processing properly? @@ -141,7 +137,6 @@ @pytest.mark.jsoc -@pytest.mark.export @pytest.mark.remote_data def test_export_invalid_process(jsoc_client_export): with pytest.raises(ValueError, match="foobar is not one of the allowed processing options"): @@ -151,7 +146,6 @@ @pytest.mark.jsoc -@pytest.mark.export @pytest.mark.remote_data def test_export_email(jsoc_client): with pytest.raises(ValueError): diff -Nru drms-0.6.3/drms/tests/test_jsoc_query.py drms-0.6.4/drms/tests/test_jsoc_query.py --- drms-0.6.3/drms/tests/test_jsoc_query.py 2022-10-13 21:08:43.000000000 +0000 +++ drms-0.6.4/drms/tests/test_jsoc_query.py 2023-06-13 14:41:19.000000000 +0000 @@ -95,7 +95,10 @@ @pytest.mark.remote_data -def test_query_hexadecimal_strings(): +@pytest.mark.parametrize( + "query", ["hmi.v_45s[2014.01.01_00:00:35_TAI-2014.01.01_01:00:35_TAI]", "hmi.M_720s[2011.04.14_00:30:00_TAI/6h@2h]"] +) +def test_query_hexadecimal_strings(query): # Exercise the part of client.py that deals with hexadecimal strings c = drms.Client() - c.query("hmi.v_45s[2014.01.01_00:00:35_TAI-2014.01.01_01:00:35_TAI]", key="**ALL**") + c.query(query, key="**ALL**") diff -Nru drms-0.6.3/drms/utils.py drms-0.6.4/drms/utils.py --- drms-0.6.3/drms/utils.py 2022-10-13 21:08:43.000000000 +0000 +++ drms-0.6.4/drms/utils.py 2023-06-13 14:41:19.000000000 +0000 @@ -2,11 +2,16 @@ import numpy as np import pandas as pd +from packaging.version import Version __all__ = ["to_datetime"] +PD_VERSION = Version(pd.__version__) + def _pd_to_datetime_coerce(arg): + if PD_VERSION >= Version("2.0.0"): + return pd.to_datetime(arg, errors="coerce", format="mixed", dayfirst=False) return pd.to_datetime(arg, errors="coerce") @@ -64,11 +69,15 @@ result : pandas.Series or pandas.Timestamp Pandas series or a single Timestamp object. """ - s = pd.Series(tstr, dtype=object).astype(str) - if force or s.str.endswith("_TAI").any(): - s = s.str.replace("_TAI", "") - s = s.str.replace("_", " ") - s = s.str.replace(".", "-", regex=True, n=2) - res = _pd_to_datetime_coerce(s) + date = pd.Series(tstr, dtype=object).astype(str) + if force or date.str.endswith("_TAI").any(): + date = date.str.replace("_TAI", "") + date = date.str.replace("_", " ") + if PD_VERSION >= Version("2.0.0"): + regex = False + else: + regex = True + date = date.str.replace(".", "-", regex=regex, n=2) + res = _pd_to_datetime_coerce(date) res = res.dt.tz_localize(None) return res.iloc[0] if (len(res) == 1) and np.isscalar(tstr) else res diff -Nru drms-0.6.3/drms/_version.py drms-0.6.4/drms/_version.py --- drms-0.6.3/drms/_version.py 2022-10-13 21:09:03.000000000 +0000 +++ drms-0.6.4/drms/_version.py 2023-06-13 14:41:37.000000000 +0000 @@ -1,5 +1,4 @@ -# coding: utf-8 # file generated by setuptools_scm # don't change, don't track in version control -__version__ = version = '0.6.3' -__version_tuple__ = version_tuple = (0, 6, 3) +__version__ = version = '0.6.4' +__version_tuple__ = version_tuple = (0, 6, 4) diff -Nru drms-0.6.3/drms.egg-info/PKG-INFO drms-0.6.4/drms.egg-info/PKG-INFO --- drms-0.6.3/drms.egg-info/PKG-INFO 2022-10-13 21:09:03.000000000 +0000 +++ drms-0.6.4/drms.egg-info/PKG-INFO 2023-06-13 14:41:37.000000000 +0000 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: drms -Version: 0.6.3 +Version: 0.6.4 Summary: Access HMI, AIA and MDI data with Python from the Standford JSOC DRMS Home-page: https://sunpy.org Author: The SunPy Community @@ -18,6 +18,7 @@ Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 Classifier: Topic :: Scientific/Engineering :: Astronomy Classifier: Topic :: Scientific/Engineering :: Physics Provides: drms diff -Nru drms-0.6.3/drms.egg-info/requires.txt drms-0.6.4/drms.egg-info/requires.txt --- drms-0.6.3/drms.egg-info/requires.txt 2022-10-13 21:09:03.000000000 +0000 +++ drms-0.6.4/drms.egg-info/requires.txt 2023-06-13 14:41:37.000000000 +0000 @@ -13,6 +13,7 @@ sphinx-gallery sphinx-changelog sunpy-sphinx-theme +towncrier<22.12.0 [docs] astropy @@ -22,6 +23,7 @@ sphinx-gallery sphinx-changelog sunpy-sphinx-theme +towncrier<22.12.0 [tests] pytest-astropy diff -Nru drms-0.6.3/drms.egg-info/SOURCES.txt drms-0.6.4/drms.egg-info/SOURCES.txt --- drms-0.6.3/drms.egg-info/SOURCES.txt 2022-10-13 21:09:03.000000000 +0000 +++ drms-0.6.4/drms.egg-info/SOURCES.txt 2023-06-13 14:41:37.000000000 +0000 @@ -1,14 +1,20 @@ +.codecov.yaml +.editorconfig +.gitattributes +.gitignore +.pre-commit-config.yaml .readthedocs.yml CHANGELOG.rst CITATION.rst LICENSE.rst MANIFEST.in README.rst -conftest.py pyproject.toml setup.cfg setup.py tox.ini +.github/workflows/ci.yml +changelog/README.rst docs/Makefile docs/citation.rst docs/conf.py @@ -37,6 +43,7 @@ drms.egg-info/requires.txt drms.egg-info/top_level.txt drms/tests/__init__.py +drms/tests/conftest.py drms/tests/test_client.py drms/tests/test_config.py drms/tests/test_exceptions.py @@ -55,7 +62,6 @@ examples/cutout_export_request.py examples/export_as_is.py examples/export_fits.py -examples/export_from_id.py examples/export_jpg.py examples/export_movie.py examples/export_print_urls.py @@ -67,5 +73,4 @@ examples/plot_hmi_modes.py examples/plot_polarfield.py examples/plot_synoptic_mr.py -licenses/README.rst -licenses/TOWNCRIER.rst \ No newline at end of file +examples/skip_export_from_id.py \ No newline at end of file diff -Nru drms-0.6.3/.editorconfig drms-0.6.4/.editorconfig --- drms-0.6.3/.editorconfig 1970-01-01 00:00:00.000000000 +0000 +++ drms-0.6.4/.editorconfig 2023-06-13 14:41:19.000000000 +0000 @@ -0,0 +1,18 @@ +# https://editorconfig.org + +root = true + +# utf, UNIX-style new line +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.{py,rst,md}] +indent_style = space +indent_size = 4 + +[*.yml] +indent_style = space +indent_size = 2 diff -Nru drms-0.6.3/examples/export_from_id.py drms-0.6.4/examples/export_from_id.py --- drms-0.6.3/examples/export_from_id.py 2022-10-13 21:08:43.000000000 +0000 +++ drms-0.6.4/examples/export_from_id.py 1970-01-01 00:00:00.000000000 +0000 @@ -1,41 +0,0 @@ -""" -================================== -Exporting from existing RequestIDs -================================== - -This example takes a RequestID of an already existing export request, prints -the corresponding "Request URL" and downloads the available files. - -Note that you can also use RequestIDs from export requests, that were -submitted using the JSOC website. -""" - -import os - -import drms - -############################################################################### -# Create DRMS client, uses the JSOC baseurl by default, set debug=True to see the DRMS query URLs. - -client = drms.Client(verbose=True) - -# Export request ID -request_id = "JSOC_20201101_198" - -# Querying the server using the entered RequestID. -print(f"Looking up export request {request_id}...") -result = client.export_from_id(request_id) - -# Print request URL and number of available files. -print(f"\nRequest URL: {result.request_url}") -print(f"{int(len(result.urls))} file(s) available for download.\n") - -# Create download directory if it does not exist yet. -out_dir = os.path.join("downloads", request_id) -if not os.path.exists(out_dir): - os.makedirs(out_dir) - -# Download all available files. -result.download(out_dir) -print("Download finished.") -print(f"\nDownload directory:\n {os.path.abspath(out_dir)}\n") diff -Nru drms-0.6.3/examples/skip_export_from_id.py drms-0.6.4/examples/skip_export_from_id.py --- drms-0.6.3/examples/skip_export_from_id.py 1970-01-01 00:00:00.000000000 +0000 +++ drms-0.6.4/examples/skip_export_from_id.py 2023-06-13 14:41:19.000000000 +0000 @@ -0,0 +1,41 @@ +""" +================================== +Exporting from existing RequestIDs +================================== + +This example takes a RequestID of an already existing export request, prints +the corresponding "Request URL" and downloads the available files. + +Note that you can also use RequestIDs from export requests, that were +submitted using the JSOC website. +""" + +import os + +import drms + +############################################################################### +# Create DRMS client, uses the JSOC baseurl by default, set debug=True to see the DRMS query URLs. + +client = drms.Client(verbose=True) + +# Export request ID +request_id = "JSOC_20201101_198" + +# Querying the server using the entered RequestID. +print(f"Looking up export request {request_id}...") +result = client.export_from_id(request_id) + +# Print request URL and number of available files. +print(f"\nRequest URL: {result.request_url}") +print(f"{int(len(result.urls))} file(s) available for download.\n") + +# Create download directory if it does not exist yet. +out_dir = os.path.join("downloads", request_id) +if not os.path.exists(out_dir): + os.makedirs(out_dir) + +# Download all available files. +result.download(out_dir) +print("Download finished.") +print(f"\nDownload directory:\n {os.path.abspath(out_dir)}\n") diff -Nru drms-0.6.3/.gitattributes drms-0.6.4/.gitattributes --- drms-0.6.3/.gitattributes 1970-01-01 00:00:00.000000000 +0000 +++ drms-0.6.4/.gitattributes 2023-06-13 14:41:19.000000000 +0000 @@ -0,0 +1,6 @@ +*fits binary +*fit binary +*fts binary +*fit.gz binary +*fits.gz binary +*fts.gz binary diff -Nru drms-0.6.3/.github/workflows/ci.yml drms-0.6.4/.github/workflows/ci.yml --- drms-0.6.3/.github/workflows/ci.yml 1970-01-01 00:00:00.000000000 +0000 +++ drms-0.6.4/.github/workflows/ci.yml 2023-06-13 14:41:19.000000000 +0000 @@ -0,0 +1,90 @@ +name: CI + +on: + push: + branches: + - 'main' + - '*.*' + - '!*backport*' + tags: + - 'v*' + - '!*dev*' + - '!*pre*' + - '!*post*' + pull_request: + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + core: + uses: OpenAstronomy/github-actions-workflows/.github/workflows/tox.yml@main + with: + submodules: false + coverage: codecov + toxdeps: "'tox<4' tox-pypi-filter" + posargs: -n auto + envs: | + - linux: py310 + + test: + needs: [core] + uses: OpenAstronomy/github-actions-workflows/.github/workflows/tox.yml@main + with: + submodules: false + coverage: codecov + toxdeps: "'tox<4' tox-pypi-filter" + posargs: -n auto + envs: | + - windows: py39 + - macos: py38 + - linux: py39-oldestdeps + + docs: + needs: [core] + uses: OpenAstronomy/github-actions-workflows/.github/workflows/tox.yml@main + with: + default_python: '3.8' + submodules: false + pytest: false + toxdeps: "'tox<4' tox-pypi-filter" + cache-key: docs-${{ github.run_id }} + libraries: | + apt: + - graphviz + envs: | + - linux: build_docs + + online: + if: "!startsWith(github.event.ref, 'refs/tags/v')" + needs: [docs] + uses: OpenAstronomy/github-actions-workflows/.github/workflows/tox.yml@main + with: + default_python: '3.8' + submodules: false + coverage: codecov + toxdeps: "'tox<4' tox-pypi-filter" + posargs: -n 1 --dist loadgroup + envs: | + - linux: py311-online + + publish: + # Build wheels when pushing to any branch + # publish_pure_python.yml will only publish if tagged ^v.* + if: | + ( + github.event_name != 'pull_request' + ) || ( + github.event_name == 'pull_request' && + contains(github.event.pull_request.labels.*.name, 'Run publish') + ) + needs: [test] + uses: OpenAstronomy/github-actions-workflows/.github/workflows/publish_pure_python.yml@main + with: + test_extras: 'dev' + test_command: 'pytest -p no:warnings --doctest-rst --pyargs drms' + submodules: false + secrets: + pypi_token: ${{ secrets.pypi_token }} diff -Nru drms-0.6.3/.gitignore drms-0.6.4/.gitignore --- drms-0.6.3/.gitignore 1970-01-01 00:00:00.000000000 +0000 +++ drms-0.6.4/.gitignore 2023-06-13 14:41:19.000000000 +0000 @@ -0,0 +1,226 @@ +### Python: https://raw.githubusercontent.com/github/gitignore/master/Python.gitignore + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class +tmp/ + +# C extensions +*.so + +# Distribution / packaging +.Python +pip-wheel-metadata/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ +junit/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ + +### https://raw.github.com/github/gitignore/master/Global/OSX.gitignore + +.DS_Store +.AppleDouble +.LSOverride + +# Icon must ends with two \r. +Icon + + +# Thumbnails +._* + +# Files that might appear on external disk +.Spotlight-V100 +.Trashes + +### Linux: https://raw.githubusercontent.com/github/gitignore/master/Global/Linux.gitignore + +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +### MacOS: https://raw.githubusercontent.com/github/gitignore/master/Global/macOS.gitignore + +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### Windows: https://raw.githubusercontent.com/github/gitignore/master/Global/Windows.gitignore + +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +### VScode: https://raw.githubusercontent.com/github/gitignore/master/Global/VisualStudioCode.gitignore +.vscode/* +.vs/* + +### Extra Python Items and DRMS Specific +.hypothesis +.pytest_cache +docs/_build +docs/api/ +docs/generated +docs/whatsnew/latest_changelog.txt +drms/_version.py +examples/**/*.asdf +examples/**/*.csv +examples/jsoc.stanford.edu/ +jsoc.stanford.edu/ + +### Pycharm(?) +.idea + +# Release script +.github_cache + +# Misc Stuff +.history +*.orig +.tmp diff -Nru drms-0.6.3/licenses/README.rst drms-0.6.4/licenses/README.rst --- drms-0.6.3/licenses/README.rst 2022-10-13 21:08:43.000000000 +0000 +++ drms-0.6.4/licenses/README.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -******** -Licenses -******** - -This directory holds license and credit information for works drms is derived from or distributes. - -The license file for the drms package itself is placed in the root directory of this repository as LICENSE.rst. diff -Nru drms-0.6.3/licenses/TOWNCRIER.rst drms-0.6.4/licenses/TOWNCRIER.rst --- drms-0.6.3/licenses/TOWNCRIER.rst 2022-10-13 21:08:43.000000000 +0000 +++ drms-0.6.4/licenses/TOWNCRIER.rst 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -Copyright (c) 2015-2016, Amber Brown, meejah - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff -Nru drms-0.6.3/MANIFEST.in drms-0.6.4/MANIFEST.in --- drms-0.6.3/MANIFEST.in 2022-10-13 21:08:43.000000000 +0000 +++ drms-0.6.4/MANIFEST.in 2023-06-13 14:41:19.000000000 +0000 @@ -1,21 +1,3 @@ -# Exclude specific files -# All files which are tracked by git and not explicitly excluded here are included by setuptools_scm -exclude .codecov.yaml -exclude .mailmap -exclude .editorconfig -exclude .gitattributes -exclude .gitignore -exclude .pep8speaks.yml -exclude .pre-commit-config.yaml -exclude .test_package_pins.txt -exclude .zenodo.json -exclude azure-pipelines.yml -exclude readthedocs.yml -exclude rtd-environment.yml - -# Prune folders prune paper -prune changelog - # This subpackage is only used in development checkouts and should not be included in built tarballs prune drms/_dev diff -Nru drms-0.6.3/PKG-INFO drms-0.6.4/PKG-INFO --- drms-0.6.3/PKG-INFO 2022-10-13 21:09:03.394754400 +0000 +++ drms-0.6.4/PKG-INFO 2023-06-13 14:41:37.696298600 +0000 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: drms -Version: 0.6.3 +Version: 0.6.4 Summary: Access HMI, AIA and MDI data with Python from the Standford JSOC DRMS Home-page: https://sunpy.org Author: The SunPy Community @@ -18,6 +18,7 @@ Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 +Classifier: Programming Language :: Python :: 3.11 Classifier: Topic :: Scientific/Engineering :: Astronomy Classifier: Topic :: Scientific/Engineering :: Physics Provides: drms diff -Nru drms-0.6.3/.pre-commit-config.yaml drms-0.6.4/.pre-commit-config.yaml --- drms-0.6.3/.pre-commit-config.yaml 1970-01-01 00:00:00.000000000 +0000 +++ drms-0.6.4/.pre-commit-config.yaml 2023-06-13 14:41:19.000000000 +0000 @@ -0,0 +1,38 @@ +repos: + - repo: https://github.com/PyCQA/docformatter + rev: v1.7.2 + hooks: + - id: docformatter + args: [--in-place, --pre-summary-newline, --make-summary-multi] + - repo: https://github.com/PyCQA/autoflake + rev: v2.1.1 + hooks: + - id: autoflake + args: ['--in-place', '--remove-all-unused-imports', '--remove-unused-variable'] + exclude: ".*(.fits|.fts|.fit|.txt|tca.*|extern.*|.rst|.md|__init__.py|docs/conf.py)$" + - repo: https://github.com/psf/black + rev: 23.3.0 + hooks: + - id: black + exclude: ".*(.fits|.fts|.fit|.txt|.csv)$" + - repo: https://github.com/PyCQA/isort + rev: 5.12.0 + hooks: + - id: isort + exclude: ".*(.fits|.fts|.fit|.txt|.csv)$" + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.4.0 + hooks: + - id: check-ast + - id: check-case-conflict + - id: trailing-whitespace + exclude: ".*(.fits|.fts|.fit|.txt|.csv)$" + - id: mixed-line-ending + exclude: ".*(.fits|.fts|.fit|.txt|.csv)$" + - id: end-of-file-fixer + exclude: ".*(.fits|.fts|.fit|.txt|.csv)$" + - id: check-yaml + - id: debug-statements + +ci: + autofix_prs: false diff -Nru drms-0.6.3/setup.cfg drms-0.6.4/setup.cfg --- drms-0.6.3/setup.cfg 2022-10-13 21:09:03.398754400 +0000 +++ drms-0.6.4/setup.cfg 2023-06-13 14:41:37.696298600 +0000 @@ -24,6 +24,7 @@ Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 + Programming Language :: Python :: 3.11 Topic :: Scientific/Engineering :: Astronomy Topic :: Scientific/Engineering :: Physics @@ -50,6 +51,7 @@ sphinx-gallery sphinx-changelog sunpy-sphinx-theme + towncrier<22.12.0 [options.packages.find] exclude = drms._dev @@ -68,14 +70,13 @@ remote_data: marks this test function as needing remote data. jsoc: marks the test function as needing a connection to JSOC. kis: marks the test function as needing a connection to KIS. - export: marks the test function as needing a JSOC registered email address. remote_data_strict = True -junit_family = xunit2 filterwarnings = error always::pytest.PytestConfigWarning ignore:numpy.ufunc size changed:RuntimeWarning ignore:numpy.ndarray size changed:RuntimeWarning + ignore:The --rsyncdir command line argument and rsyncdirs config variable are deprecated.:DeprecationWarning [pycodestyle] max_line_length = 110 diff -Nru drms-0.6.3/tox.ini drms-0.6.4/tox.ini --- drms-0.6.3/tox.ini 2022-10-13 21:08:43.000000000 +0000 +++ drms-0.6.4/tox.ini 2023-06-13 14:41:19.000000000 +0000 @@ -1,6 +1,6 @@ [tox] envlist = - py{38,39,310}{,-online,-sunpy} + py{38,39,310,311}{,-online,-sunpy,-oldestdeps} build_docs codestyle isolated_build = true @@ -11,9 +11,6 @@ [testenv] pypi_filter = https://raw.githubusercontent.com/sunpy/sunpy/main/.test_package_pins.txt -# Run the tests in a temporary directory to make sure that we don't import -# drms from the source tree -changedir = .tmp/{envname} description = run tests online: that require remote data @@ -30,7 +27,10 @@ NO_PROXY CIRCLECI deps = + pytest-xdist pytest-timeout + # Oldest deps we pin against + oldestdeps: pandas<2.0 # These are specific extras we use to run the sunpy tests. sunpy: git+https://github.com/sunpy/sunpy sunpy: beautifulsoup4