diff --git a/.readthedocs_env.yml b/.readthedocs_env.yml index 4a506191..54016b12 100644 --- a/.readthedocs_env.yml +++ b/.readthedocs_env.yml @@ -22,4 +22,8 @@ dependencies: - reproject - setuptools - sphinx - - sphinx-automodapi + # This pin is to work around a conda verification error + # that first appeared in the CI for https://github.com/WorldWideTelescope/pywwt/pull/375. + # At the time of writing this, the issue only occurs with sphinx-automodapi==0.17, + # which is the newest version. + - sphinx-automodapi=0.16 diff --git a/CHANGELOG.md b/CHANGELOG.md index becf7f5b..0e0b8e5c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,19 @@ +# pypa:pywwt 0.24.0 (2024-05-21) + +- Add an API to allow refreshing of the engine's tile cache (#375, @Carifio24). + This is not something that should be needed in any kind of regular usage, but + for long-lived applications that want to avoid page reloads, it can provide + an emergency means to unstick the data flow. +- Only require `qtpy` if one of the Qt options is enabled (#376, @Carifio24). +- Update Jupyter install requirements (#370, @Carifio24). +- Re-enable DOI registration (#371, @pkgw). The Cranko Zenodo support has been + updated to work with the new Zenodo API contracts. + +The DOI of this release is [10.5281/zenodo.10385538][vdoi]. + +[vdoi]: 10.5281/zenodo.10385538 + + # pypa:pywwt 0.23.0 (2023-11-28) - Update the Jupyter widget implementation to use ES6 class syntax (#368, diff --git a/ci/azure-build-and-test.yml b/ci/azure-build-and-test.yml index 777de085..47d149ee 100644 --- a/ci/azure-build-and-test.yml +++ b/ci/azure-build-and-test.yml @@ -199,7 +199,7 @@ jobs: set -x \conda install -y pytest-cov pytest-remotedata pytest-timeout python setup.py build - pytest -v -s pywwt -p no:warnings --timeout=180 --timeout_method=thread --cov-report=xml --cov=pywwt + pytest -v -s pywwt -p no:warnings --timeout=1800 --timeout_method=thread --cov-report=xml --cov=pywwt displayName: Test with coverage - bash: bash <(curl -s https://codecov.io/bash) diff --git a/ci/azure-deployment.yml b/ci/azure-deployment.yml index 9bf955a7..23725ba3 100644 --- a/ci/azure-deployment.yml +++ b/ci/azure-deployment.yml @@ -111,35 +111,33 @@ jobs: - bash: shred ~/.npmrc displayName: Clean up credentials - # 2023 Nov: temporarily disabling Zenodo; they have just updated their API and broken - # everything, and we want to ge a release out. - #- job: zenodo_publish - # pool: - # vmImage: ubuntu-latest - # variables: - # - group: Deployment Credentials - # - # steps: - # - template: azure-job-setup.yml - # parameters: - # setupCranko: true - # - # - bash: | - # set -xeuo pipefail - # - # if cranko show if-released --exit-code pypa:pywwt ; then - # cranko zenodo upload-artifacts --metadata=ci/zenodo.json5 $BASH_WORKSPACE/sdist/*.tar.gz - # fi - # displayName: Upload source tarball - # env: - # ZENODO_TOKEN: $(ZENODO_TOKEN) - # - # - bash: | - # set -xeuo pipefail - # - # if cranko show if-released --exit-code pypa:pywwt ; then - # cranko zenodo publish --metadata=ci/zenodo.json5 - # fi - # displayName: Publish to Zenodo - # env: - # ZENODO_TOKEN: $(ZENODO_TOKEN) + - job: zenodo_publish + pool: + vmImage: ubuntu-latest + variables: + - group: Deployment Credentials + + steps: + - template: azure-job-setup.yml + parameters: + setupCranko: true + + - bash: | + set -xeuo pipefail + + if cranko show if-released --exit-code pypa:pywwt ; then + cranko zenodo upload-artifacts --metadata=ci/zenodo.json5 $BASH_WORKSPACE/sdist/*.tar.gz + fi + displayName: Upload source tarball + env: + ZENODO_TOKEN: $(ZENODO_TOKEN) + + - bash: | + set -xeuo pipefail + + if cranko show if-released --exit-code pypa:pywwt ; then + cranko zenodo publish --metadata=ci/zenodo.json5 + fi + displayName: Publish to Zenodo + env: + ZENODO_TOKEN: $(ZENODO_TOKEN) diff --git a/ci/azure-job-setup.yml b/ci/azure-job-setup.yml index d195b23f..f7f1bedf 100644 --- a/ci/azure-job-setup.yml +++ b/ci/azure-job-setup.yml @@ -100,8 +100,6 @@ steps: set -euo pipefail source activate-conda.sh set -x - # workaround for the Windows CI image: - conda install -y brotlipy conda config --add channels conda-forge conda config --set channel_priority strict conda update -y --all diff --git a/ci/azure-sdist.yml b/ci/azure-sdist.yml index ea790a7a..859ebdc6 100644 --- a/ci/azure-sdist.yml +++ b/ci/azure-sdist.yml @@ -29,14 +29,12 @@ jobs: - bash: cranko release-workflow apply-versions displayName: Apply Cranko versions - # 2023 Nov: temporarily disabling Zenodo; they have just updated their API and broken - # everything, and we want to ge a release out. - # - bash: | - # cranko zenodo preregister --metadata=ci/zenodo.json5 pypa:pywwt pywwt/_version.py CHANGELOG.md - # displayName: "Preregister Zenodo DOI" - # ${{ if and(eq(variables['Build.SourceBranchName'], 'rc'), ne(variables['build.reason'], 'PullRequest')) }}: - # env: - # ZENODO_TOKEN: $(ZENODO_TOKEN) + - bash: | + cranko zenodo preregister --metadata=ci/zenodo.json5 pypa:pywwt pywwt/_version.py CHANGELOG.md + displayName: "Preregister Zenodo DOI" + ${{ if and(eq(variables['Build.SourceBranchName'], 'rc'), ne(variables['build.reason'], 'PullRequest')) }}: + env: + ZENODO_TOKEN: $(ZENODO_TOKEN) - bash: | set -xeuo pipefail diff --git a/ci/zenodo.json5 b/ci/zenodo.json5 index 4fd5ed97..852b3139 100644 --- a/ci/zenodo.json5 +++ b/ci/zenodo.json5 @@ -1,85 +1,73 @@ -// See https://pkgw.github.io/cranko/book/latest/integrations/zenodo.html -// and https://developers.zenodo.org/#representation - { - conceptrecid: '7164147', - - metadata: { - upload_type: 'software', - language: 'eng', - - // ** Keep this alphabetical by family name!!! ** - creators: [ + "conceptrecid": "7164147", + "metadata": { + "access_right": "open", + "creators": [ { - affiliation: 'Center for Astrophysics | Harvard & Smithsonian', - name: 'Carifio, Jonathan', - orcid: '0000-0002-7759-2601', + "affiliation": "Center for Astrophysics | Harvard & Smithsonian", + "name": "Carifio, Jonathan", + "orcid": "0000-0002-7759-2601" }, { - affiliation: 'Heidelberg Institute for Theoretical Studies', - name: 'Gaibler, Volker', - orcid: '0000-0001-7581-7574', + "affiliation": "Heidelberg Institute for Theoretical Studies", + "name": "Gaibler, Volker", + "orcid": "0000-0001-7581-7574" }, { - affiliation: 'Aperio Software', - name: 'Homeier, Derek', - orcid: '0000-0002-8546-9128', + "affiliation": "Aperio Software", + "name": "Homeier, Derek", + "orcid": "0000-0002-8546-9128" }, { - affiliation: 'Winter Way', - name: 'Norman, Henrik', - orcid: '0000-0003-4189-3450', + "affiliation": "Winter Way", + "name": "Norman, Henrik", + "orcid": "0000-0003-4189-3450" }, { - affiliation: 'Space Telescope Science Institute', - name: 'Otor, O. Justin', - orcid: '0000-0002-4679-5692', + "affiliation": "Space Telescope Science Institute", + "name": "Otor, O. Justin", + "orcid": "0000-0002-4679-5692" }, { - affiliation: 'Aperio Software', - name: 'Robitaille, Thomas P.', - orcid: '0000-0002-8642-1329', + "affiliation": "Aperio Software", + "name": "Robitaille, Thomas P.", + "orcid": "0000-0002-8642-1329" }, { - name: 'Subbarao, Jeffrey', + "name": "Subbarao, Jeffrey" }, { - affiliation: 'Center for Astrophysics | Harvard & Smithsonian', - name: 'Williams, Peter K. G.', - orcid: '0000-0003-3734-3587', + "affiliation": "Center for Astrophysics | Harvard & Smithsonian", + "name": "Williams, Peter K. G.", + "orcid": "0000-0003-3734-3587" }, { - affiliation: 'Center for Astrophysics | Harvard & Smithsonian', - name: 'ZuHone, John', - orcid: '0000-0003-3175-2347', - }, + "affiliation": "Center for Astrophysics | Harvard & Smithsonian", + "name": "ZuHone, John", + "orcid": "0000-0003-3175-2347" + } ], - - // Subset of HTML allowed here: - description: 'pywwt is the official toolkit for accessing WorldWide \ -Telescope (WWT) from Python. Learn more at the pywwt website.', - - access_right: 'open', - license: 'BSD-3-Clause', // see https://spdx.org/licenses/ - - grants: [ - // National Science Foundation: - {id: '10.13039/100000001::1550701'}, - - // As of 2022 August these grants are not in the OpenAIRE "Research Graph" - // and so Zenodo won't let us record them here. Test existence by - // GET'ing `https://zenodo.org/api/grants/$id`. - // - //{id: '10.13039/100000001::1642446'}, - //{id: '10.13039/100000001::2004840'}, + "description": "pywwt is the official toolkit for accessing WorldWide Telescope (WWT) from Python. Learn more at the pywwt website.", + "grants": [ + { + "id": "10.13039/100000001::1550701" + } ], - - // Keywords use an uncontrolled vocabulary (and so are of limited usefulness): - keywords: [ - 'Astronomy', - 'Python', - 'Visualization', - 'WorldWide Telescope', + "keywords": [ + "Astronomy", + "Python", + "Visualization", + "WorldWide Telescope" ], + "language": "eng", + "license": "BSD-3-Clause", + "publication_date": "2024-05-21", + "title": "pypa:pywwt 0.24.0", + "upload_type": "software", + "version": "0.24.0" }, + "conceptdoi": "10.5281/zenodo.7164147", + "record_id": "10385538", + "doi": "10.5281/zenodo.10385538", + "bucket_link": "https://zenodo.org/api/files/6029720a-d8ff-483a-a770-24e40c454989" } diff --git a/frontend/CHANGELOG.md b/frontend/CHANGELOG.md index 388fb452..e6c18174 100644 --- a/frontend/CHANGELOG.md +++ b/frontend/CHANGELOG.md @@ -1,3 +1,9 @@ +# npm:pywwt 1.8.0 (2024-05-21) + +- Require version 0.17 of the research app, which adds an API for refreshing + the tile cache (#375, @Carifio24). + + # npm:pywwt 1.7.0 (2023-11-28) - Update the Jupyter widget implementation to use ES6 class syntax (#368, diff --git a/frontend/package.json b/frontend/package.json index 5e217c1d..5bc73074 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -5,7 +5,7 @@ }, "dependencies": { "@jupyter-widgets/base": "^2 || ^3 || ^4 || ^5 || ^6", - "@wwtelescope/research-app": "^0.16.0", + "@wwtelescope/research-app": "^0.17.0", "underscore": "^1" }, "description": "WorldWide Telescope from Python", @@ -42,5 +42,5 @@ "clean": "shx rm -rf dist", "pywwt-export": "npm run build && npm pack && node pywwt-export.js" }, - "version": "1.7.0" + "version": "1.8.0" } diff --git a/pywwt/_version.py b/pywwt/_version.py index 5d52bd0a..729bbe6e 100644 --- a/pywwt/_version.py +++ b/pywwt/_version.py @@ -1,4 +1,4 @@ -version_info = (0, 23, 0, 'final', 0) # cranko project-version tuple +version_info = (0, 24, 0, 'final', 0) # cranko project-version tuple _specifier_ = { "alpha": ".a", @@ -18,5 +18,5 @@ ) # The strings are auto-updated by Cranko during formal releases: -version_doi = "xx.xxxx/dev-build.pypa:pywwt.version" -concept_doi = "xx.xxxx/dev-build.pypa:pywwt.concept" +version_doi = "10.5281/zenodo.10385538" +concept_doi = "10.5281/zenodo.7164147" diff --git a/pywwt/core.py b/pywwt/core.py index 87b2fc60..945091a4 100644 --- a/pywwt/core.py +++ b/pywwt/core.py @@ -1372,3 +1372,13 @@ def _serialize_to_json(self, file, title, max_width, max_height): def _save_added_data(self, dir): self.layers._save_all_data_for_serialization(dir) + + # Miscellaneous + + def refresh_tile_cache(self): + """ + Clear the current cache of tiles. + Note that this should only be used when necessary, as any + previously downloaded tiles will need to be re-fetched. + """ + self._send_msg(event="clear_tile_cache") diff --git a/pywwt/tests/test_layers.py b/pywwt/tests/test_layers.py index 5615cefa..dea1ff6f 100644 --- a/pywwt/tests/test_layers.py +++ b/pywwt/tests/test_layers.py @@ -10,6 +10,7 @@ import pytest from stat import S_IWGRP, S_IWOTH, S_IWUSR, S_IMODE from tempfile import TemporaryDirectory +from warnings import catch_warnings from . import assert_widget_image, wait_for_test, DATA from ..conftest import RUNNING_ON_CI, QT_INSTALLED # noqa @@ -285,7 +286,7 @@ def test_cartesian_layer(self): # Make sure adding the layer doesn't emit any warnings, which previously # happened due to a bug with the logic in the table layer initialization - with pytest.warns(None) as record: + with catch_warnings(record=True) as record: layer = self.client.layers.add_table_layer( table=table, coord_type="rectangular", x_att="x", y_att="y", z_att="z" ) diff --git a/pywwt/tests/test_qt_widget.py b/pywwt/tests/test_qt_widget.py index c77b4bf9..824251e4 100644 --- a/pywwt/tests/test_qt_widget.py +++ b/pywwt/tests/test_qt_widget.py @@ -6,7 +6,7 @@ from ..conftest import RUNNING_ON_CI -WAIT_TIME = 5 if RUNNING_ON_CI else 1 +WAIT_TIME = 10 if RUNNING_ON_CI else 1 M42 = SkyCoord.from_name('M42') diff --git a/setup.py b/setup.py index 6841a7cf..46eba68d 100755 --- a/setup.py +++ b/setup.py @@ -117,7 +117,6 @@ "numpy>=1.9", "python-dateutil", "pytz", - "qtpy", "reproject>=0.8", "requests", "toasty>=0.18", @@ -142,15 +141,22 @@ "qt": [ 'PyQt5;python_version>="3"', 'PyQtWebEngine;python_version>="3"', + "qtpy", ], "qt6": [ 'PyQt6;python_version>="3"', 'PyQt6-WebEngine;python_version>="3"', + "qtpy", + ], + "notebook": [ + "wwt_kernel_data_relay", + "notebook", ], "lab": [ "jupyterlab", "nbclassic", "notebook", + "wwt_kernel_data_relay", ], }, entry_points={},