From d0a6cdb5bbf8409f6cf6ce7fb48edbf9f29df390 Mon Sep 17 00:00:00 2001 From: David Manthey Date: Sun, 29 Oct 2023 15:48:12 -0400 Subject: [PATCH 1/2] Drop Python 3.6 and Python 3.7 --- .circleci/config.yml | 48 ------------------- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 1 + girder/girder_large_image/__init__.py | 8 +--- .../rest/large_image_resource.py | 11 ++--- girder/setup.py | 5 +- .../girder_large_image_annotation/__init__.py | 9 ++-- girder_annotation/setup.py | 5 +- large_image/__init__.py | 9 ++-- large_image/cache_util/cachefactory.py | 5 +- large_image/tilesource/__init__.py | 6 +-- requirements-test-core.txt | 8 ++-- requirements-test.txt | 11 ++--- setup.py | 23 ++++----- .../large_image_source_bioformats/__init__.py | 8 +--- sources/bioformats/setup.py | 5 +- sources/deepzoom/setup.py | 4 +- sources/dicom/test_dicom/test_web_client.py | 5 -- .../large_image_source_dummy/__init__.py | 9 ++-- sources/dummy/setup.py | 5 +- .../gdal/large_image_source_gdal/__init__.py | 9 ++-- sources/gdal/setup.py | 5 +- .../large_image_source_mapnik/__init__.py | 8 +--- sources/mapnik/setup.py | 5 +- .../large_image_source_multi/__init__.py | 8 +--- .../nd2/large_image_source_nd2/__init__.py | 8 +--- sources/nd2/setup.py | 4 +- .../large_image_source_ometiff/__init__.py | 8 +--- sources/ometiff/setup.py | 5 +- .../large_image_source_openjpeg/__init__.py | 8 +--- sources/openjpeg/setup.py | 8 +--- .../large_image_source_openslide/__init__.py | 8 +--- sources/openslide/setup.py | 5 +- .../pil/large_image_source_pil/__init__.py | 9 ++-- sources/pil/setup.py | 9 ++-- .../large_image_source_rasterio/__init__.py | 8 +--- .../test/large_image_source_test/__init__.py | 8 +--- sources/test/setup.py | 5 +- .../tiff/large_image_source_tiff/__init__.py | 8 +--- sources/tiff/setup.py | 5 +- .../large_image_source_tifffile/__init__.py | 8 +--- sources/tifffile/setup.py | 7 +-- sources/vips/setup.py | 5 +- .../zarr/large_image_source_zarr/__init__.py | 16 ++----- test/test_cache_source.py | 4 -- test/test_converter.py | 2 - test/test_source_base.py | 8 +--- test/test_source_dicomweb.py | 6 --- test/test_source_multi.py | 5 -- test/test_source_nd2.py | 6 --- test/test_source_rasterio.py | 5 -- tox.ini | 15 ++---- .../large_image_converter/__init__.py | 8 +--- utilities/converter/setup.py | 5 +- utilities/tasks/large_image_tasks/__init__.py | 9 ++-- utilities/tasks/setup.py | 5 +- 56 files changed, 100 insertions(+), 342 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index c066eb1fc..eec4a7005 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -119,32 +119,6 @@ jobs: command: | echo "$DOCKERHUB_PASS" | docker login -u "$DOCKERHUB_USERNAME" --password-stdin docker push girder/tox-and-node:latest - py36: - machine: - image: ubuntu-2004:202111-02 - steps: - - checkout - - allservices: - version: "3.6" - node: v14 - - tox: - env: test-py36 - - coverage - - store_artifacts: - path: build/test/artifacts - py37: - machine: - image: ubuntu-2004:202111-02 - steps: - - checkout - - allservices: - version: "3.7" - node: v14 - - tox: - env: test-py37 - - coverage - - store_artifacts: - path: build/test/artifacts py38: machine: image: ubuntu-2004:202111-02 @@ -289,20 +263,6 @@ workflows: - master # Create a branch of this name to push to docker hub - testdocker - - py36: - filters: - tags: - only: /^v.*/ - branches: - ignore: - - gh-pages - - py37: - filters: - tags: - only: /^v.*/ - branches: - ignore: - - gh-pages - py38: filters: tags: @@ -347,8 +307,6 @@ workflows: - gh-pages - wheels: requires: - - py36 - - py37 - py38 - py39 - py310 @@ -363,8 +321,6 @@ workflows: - gh-pages - release: requires: - - py36 - - py37 - py38 - py39 - py310 @@ -378,8 +334,6 @@ workflows: only: master - docs-deploy: requires: - - py36 - - py37 - py38 - py39 - py310 @@ -403,8 +357,6 @@ workflows: only: - master jobs: - - py36 - - py37 - py38 - py39 - py310 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6f4d77f2c..237c9cd5f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -66,7 +66,7 @@ repos: hooks: - id: pyupgrade args: - - --py36-plus + - --py38-plus - --keep-percent-format - repo: https://github.com/astral-sh/ruff-pre-commit # Ruff version. diff --git a/CHANGELOG.md b/CHANGELOG.md index 2bc7ba381..3102f5599 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ - Handle Python 3.12 deprecating utcnow ([#1331](../../pull/1331)) - Turn down logging about annotation ACLs ([#1332](../../pull/1332)) - Add scope to the dicomweb import endpoint access decorator ([#1347](../../pull/1347)) +- Drop support for Python 3.6 and Python 3.7 ([#1352](../../pull/1352)) ## 1.25.0 diff --git a/girder/girder_large_image/__init__.py b/girder/girder_large_image/__init__.py index 9d8e010c9..ed45a8602 100644 --- a/girder/girder_large_image/__init__.py +++ b/girder/girder_large_image/__init__.py @@ -18,6 +18,8 @@ import json import re import warnings +from importlib.metadata import PackageNotFoundError +from importlib.metadata import version as _importlib_version import yaml from girder_jobs.constants import JobStatus @@ -50,12 +52,6 @@ from .rest.large_image_resource import LargeImageResource from .rest.tiles import TilesItemResource -try: - from importlib.metadata import PackageNotFoundError - from importlib.metadata import version as _importlib_version -except ImportError: - from importlib_metadata import PackageNotFoundError - from importlib_metadata import version as _importlib_version try: __version__ = _importlib_version(__name__) except PackageNotFoundError: diff --git a/girder/girder_large_image/rest/large_image_resource.py b/girder/girder_large_image/rest/large_image_resource.py index 652e58b38..48b4ae516 100644 --- a/girder/girder_large_image/rest/large_image_resource.py +++ b/girder/girder_large_image/rest/large_image_resource.py @@ -583,7 +583,7 @@ def configValidate(self, config): paramType='body'), ) @access.admin(scope=TokenScope.DATA_WRITE) - def configFormat(self, config): # noqa + def configFormat(self, config): config = config.read().decode('utf8') if len(self._configValidate(config)): return config @@ -617,13 +617,8 @@ def configFormat(self, config): # noqa if not key.startswith('__comment__'): valstr = repr(val) if len(valstr) + len(key) + 3 >= 79: - try: - valstr = pprint.pformat( - val, width=79, indent=2, compact=True, sort_dicts=False) - except Exception: - # sort_dicts isn't an option before Python 3.8 - valstr = pprint.pformat( - val, width=79, indent=2, compact=True) + valstr = pprint.pformat( + val, width=79, indent=2, compact=True, sort_dicts=False) out.append('%s = %s\n' % (key, valstr)) else: out.append(val) diff --git a/girder/setup.py b/girder/setup.py index df4c41ef6..6c2d1a796 100644 --- a/girder/setup.py +++ b/girder/setup.py @@ -45,8 +45,6 @@ def prerelease_local_scheme(version): 'Development Status :: 5 - Production/Stable', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', @@ -57,7 +55,6 @@ def prerelease_local_scheme(version): 'girder>=3.1.18', 'girder-jobs>=3.0.3', f'large_image{limit_version}', - 'importlib-metadata<5 ; python_version < "3.8"', ], extras_require={ 'tasks': [ @@ -68,7 +65,7 @@ def prerelease_local_scheme(version): include_package_data=True, keywords='girder-plugin, large_image', packages=find_packages(exclude=['test', 'test.*', 'test_girder', 'test_girder.*']), - python_requires='>=3.6', + python_requires='>=3.8', url='https://github.com/girder/large_image', zip_safe=False, entry_points={ diff --git a/girder_annotation/girder_large_image_annotation/__init__.py b/girder_annotation/girder_large_image_annotation/__init__.py index d7dd612cb..08bf28553 100644 --- a/girder_annotation/girder_large_image_annotation/__init__.py +++ b/girder_annotation/girder_large_image_annotation/__init__.py @@ -14,6 +14,9 @@ # limitations under the License. ############################################################################# +from importlib.metadata import PackageNotFoundError +from importlib.metadata import version as _importlib_version + from girder import events from girder.constants import registerAccessFlag from girder.exceptions import ValidationException @@ -26,12 +29,6 @@ from .models.annotation import Annotation from .rest.annotation import AnnotationResource -try: - from importlib.metadata import PackageNotFoundError - from importlib.metadata import version as _importlib_version -except ImportError: - from importlib_metadata import PackageNotFoundError - from importlib_metadata import version as _importlib_version try: __version__ = _importlib_version(__name__) except PackageNotFoundError: diff --git a/girder_annotation/setup.py b/girder_annotation/setup.py index 53d7951c6..c461fd7a6 100644 --- a/girder_annotation/setup.py +++ b/girder_annotation/setup.py @@ -45,8 +45,6 @@ def prerelease_local_scheme(version): 'Development Status :: 5 - Production/Stable', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', @@ -57,7 +55,6 @@ def prerelease_local_scheme(version): 'jsonschema>=2.5.1', f'girder-large-image{limit_version}', 'orjson', - 'importlib-metadata<5 ; python_version < "3.8"', ], extras_require={ 'tasks': [ @@ -67,7 +64,7 @@ def prerelease_local_scheme(version): include_package_data=True, keywords='girder-plugin, large_image', packages=find_packages(exclude=['test', 'test.*', 'test_annotation', 'test_annotation.*']), - python_requires='>=3.6', + python_requires='>=3.8', url='https://github.com/girder/large_image', zip_safe=False, entry_points={ diff --git a/large_image/__init__.py b/large_image/__init__.py index fa6725065..09d89a9a4 100644 --- a/large_image/__init__.py +++ b/large_image/__init__.py @@ -14,15 +14,12 @@ # limitations under the License. ############################################################################# +from importlib.metadata import PackageNotFoundError +from importlib.metadata import version as _importlib_version + from . import tilesource # noqa from .tilesource import canRead, canReadList, getTileSource, new, open # noqa -try: - from importlib.metadata import PackageNotFoundError - from importlib.metadata import version as _importlib_version -except ImportError: - from importlib_metadata import PackageNotFoundError - from importlib_metadata import version as _importlib_version try: __version__ = _importlib_version(__name__) except PackageNotFoundError: diff --git a/large_image/cache_util/cachefactory.py b/large_image/cache_util/cachefactory.py index 7af95cf7b..a809b967d 100644 --- a/large_image/cache_util/cachefactory.py +++ b/large_image/cache_util/cachefactory.py @@ -24,10 +24,7 @@ except ImportError: psutil = None -try: - from importlib.metadata import entry_points -except ImportError: - from importlib_metadata import entry_points +from importlib.metadata import entry_points from .. import config from ..exceptions import TileCacheError diff --git a/large_image/tilesource/__init__.py b/large_image/tilesource/__init__.py index 4ace39d79..73fa9c56a 100644 --- a/large_image/tilesource/__init__.py +++ b/large_image/tilesource/__init__.py @@ -1,11 +1,7 @@ import os import re import uuid - -try: - from importlib.metadata import entry_points -except ImportError: - from importlib_metadata import entry_points +from importlib.metadata import entry_points from .. import config from ..constants import NEW_IMAGE_PATH_FLAG, SourcePriority diff --git a/requirements-test-core.txt b/requirements-test-core.txt index 61dce4429..0cff321f8 100644 --- a/requirements-test-core.txt +++ b/requirements-test-core.txt @@ -1,18 +1,18 @@ # Top level dependencies sources/bioformats sources/deepzoom -sources/dicom ; python_version >= '3.8' +sources/dicom sources/dummy sources/gdal sources/multi -sources/nd2 ; python_version >= '3.7' +sources/nd2 sources/openjpeg sources/openslide sources/pil[all] -sources/rasterio[all] ; python_version >= '3.8' +sources/rasterio[all] sources/test sources/tiff -sources/tifffile ; python_version >= '3.7' +sources/tifffile sources/vips sources/zarr # must be after sources/tiff diff --git a/requirements-test.txt b/requirements-test.txt index ff21f2fc6..e506a291b 100644 --- a/requirements-test.txt +++ b/requirements-test.txt @@ -3,18 +3,18 @@ girder>=3.1.18 girder-jobs>=3.0.3 sources/bioformats sources/deepzoom -sources/dicom ; python_version >= '3.8' +sources/dicom sources/dummy sources/gdal sources/multi -sources/nd2 ; python_version >= '3.7' +sources/nd2 sources/openjpeg sources/openslide sources/pil[all] -sources/rasterio[all] ; python_version >= '3.8' +sources/rasterio[all] sources/test sources/tiff -sources/tifffile ; python_version >= '3.7' +sources/tifffile sources/vips sources/zarr # must be after sources/tiff @@ -31,8 +31,7 @@ girder_annotation/. # Extras from main setup.py pylibmc>=1.5.1 matplotlib -simplejpeg ; python_version >= "3.7" -simplejpeg<1.6.6 ; python_version < "3.7" +simplejpeg # External dependencies pip>=9 diff --git a/setup.py b/setup.py index 3ee7ba9f5..10b6036e7 100644 --- a/setup.py +++ b/setup.py @@ -41,27 +41,26 @@ def prerelease_local_scheme(version): 'tiledoutput': ['pyvips'], 'performance': [ 'psutil>=4.2.0', - 'simplejpeg ; python_version >= "3.7"', - 'simplejpeg<1.6.6 ; python_version < "3.7"', + 'simplejpeg', ], } sources = { 'bioformats': [f'large-image-source-bioformats{limit_version}'], 'deepzoom': [f'large-image-source-deepzoom{limit_version}'], - 'dicom': [f'large-image-source-dicom{limit_version} ; python_version >= "3.8"'], + 'dicom': [f'large-image-source-dicom{limit_version}'], 'dummy': [f'large-image-source-dummy{limit_version}'], 'gdal': [f'large-image-source-gdal{limit_version}'], 'mapnik': [f'large-image-source-mapnik{limit_version}'], 'multi': [f'large-image-source-multi{limit_version}'], - 'nd2': [f'large-image-source-nd2{limit_version} ; python_version >= "3.7"'], + 'nd2': [f'large-image-source-nd2{limit_version}'], 'ometiff': [f'large-image-source-ometiff{limit_version}'], 'openjpeg': [f'large-image-source-openjpeg{limit_version}'], 'openslide': [f'large-image-source-openslide{limit_version}'], 'pil': [f'large-image-source-pil{limit_version}'], - 'rasterio': [f'large-image-source-rasterio{limit_version} ; python_version >= "3.8"'], + 'rasterio': [f'large-image-source-rasterio{limit_version}'], 'test': [f'large-image-source-test{limit_version}'], 'tiff': [f'large-image-source-tiff{limit_version}'], - 'tifffile': [f'large-image-source-tifffile{limit_version} ; python_version >= "3.7"'], + 'tifffile': [f'large-image-source-tifffile{limit_version}'], 'vips': [f'large-image-source-vips{limit_version}'], 'zarr': [f'large-image-source-zarr{limit_version}'], } @@ -69,7 +68,7 @@ def prerelease_local_scheme(version): extraReqs['sources'] = list(set(itertools.chain.from_iterable(sources.values()))) extraReqs['all'] = list(set(itertools.chain.from_iterable(extraReqs.values())) | { f'large-image-source-pil[all]{limit_version}', - f'large-image-source-rasterio[all]{limit_version} ; python_version >= "3.8"', + f'large-image-source-rasterio[all]{limit_version}', }) # The common packages are ones that will install on Ubuntu, OSX, and Windows # from pypi with all needed dependencies. @@ -78,7 +77,7 @@ def prerelease_local_scheme(version): 'deepzoom', 'dicom', 'multi', 'nd2', 'test', 'tifffile', 'zarr', })) | { f'large-image-source-pil[all]{limit_version}', - f'large-image-source-rasterio[all]{limit_version} ; python_version >= "3.8"', + f'large-image-source-rasterio[all]{limit_version}', }) setup( @@ -86,8 +85,7 @@ def prerelease_local_scheme(version): use_scm_version={'local_scheme': prerelease_local_scheme, 'fallback_version': '0.0.0'}, setup_requires=[ - 'setuptools-scm<7 ; python_version < "3.7"', - 'setuptools-scm ; python_version >= "3.7"', + 'setuptools-scm', ], description=description, long_description=long_description, @@ -98,8 +96,6 @@ def prerelease_local_scheme(version): 'Development Status :: 5 - Production/Stable', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', @@ -111,13 +107,12 @@ def prerelease_local_scheme(version): 'palettable', 'Pillow', 'numpy', - 'importlib-metadata<5 ; python_version < "3.8"', ], extras_require=extraReqs, include_package_data=True, keywords='large_image', packages=['large_image'], url='https://github.com/girder/large_image', - python_requires='>=3.6', + python_requires='>=3.8', zip_safe=False, ) diff --git a/sources/bioformats/large_image_source_bioformats/__init__.py b/sources/bioformats/large_image_source_bioformats/__init__.py index 2be2f8894..cf7cc582c 100644 --- a/sources/bioformats/large_image_source_bioformats/__init__.py +++ b/sources/bioformats/large_image_source_bioformats/__init__.py @@ -30,6 +30,8 @@ import threading import types import weakref +from importlib.metadata import PackageNotFoundError +from importlib.metadata import version as _importlib_version import numpy as np @@ -40,12 +42,6 @@ from large_image.exceptions import TileSourceError, TileSourceFileNotFoundError from large_image.tilesource import FileTileSource, nearPowerOfTwo -try: - from importlib.metadata import PackageNotFoundError - from importlib.metadata import version as _importlib_version -except ImportError: - from importlib_metadata import PackageNotFoundError - from importlib_metadata import version as _importlib_version try: __version__ = _importlib_version(__name__) except PackageNotFoundError: diff --git a/sources/bioformats/setup.py b/sources/bioformats/setup.py index 8dedf0424..ff702ca77 100644 --- a/sources/bioformats/setup.py +++ b/sources/bioformats/setup.py @@ -45,8 +45,6 @@ def prerelease_local_scheme(version): 'Development Status :: 5 - Production/Stable', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', @@ -56,7 +54,6 @@ def prerelease_local_scheme(version): install_requires=[ f'large-image{limit_version}', 'python-bioformats>=1.5.2', - 'importlib-metadata<5 ; python_version < "3.8"', ], extras_require={ 'girder': f'girder-large-image{limit_version}', @@ -64,7 +61,7 @@ def prerelease_local_scheme(version): keywords='large_image, tile source', packages=find_packages(exclude=['test', 'test.*']), url='https://github.com/girder/large_image', - python_requires='>=3.6', + python_requires='>=3.8', entry_points={ 'large_image.source': [ 'bioformats = large_image_source_bioformats:BioformatsFileTileSource', diff --git a/sources/deepzoom/setup.py b/sources/deepzoom/setup.py index e747a5703..22f758ff7 100644 --- a/sources/deepzoom/setup.py +++ b/sources/deepzoom/setup.py @@ -45,8 +45,6 @@ def prerelease_local_scheme(version): 'Development Status :: 5 - Production/Stable', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', @@ -62,7 +60,7 @@ def prerelease_local_scheme(version): keywords='large_image, tile source', packages=find_packages(exclude=['test', 'test.*']), url='https://github.com/girder/large_image', - python_requires='>=3.6', + python_requires='>=3.8', entry_points={ 'large_image.source': [ 'deepzoom = large_image_source_deepzoom:DeepzoomFileTileSource', diff --git a/sources/dicom/test_dicom/test_web_client.py b/sources/dicom/test_dicom/test_web_client.py index f1b72a0cc..3fb2835b0 100644 --- a/sources/dicom/test_dicom/test_web_client.py +++ b/sources/dicom/test_dicom/test_web_client.py @@ -1,12 +1,7 @@ import os -import sys import pytest -pytestmark = [ - pytest.mark.skipif(sys.version_info < (3, 8), reason='requires python3.8 or higher'), -] - @pytest.mark.girder() @pytest.mark.girder_client() diff --git a/sources/dummy/large_image_source_dummy/__init__.py b/sources/dummy/large_image_source_dummy/__init__.py index 6e359692a..90bad21c4 100644 --- a/sources/dummy/large_image_source_dummy/__init__.py +++ b/sources/dummy/large_image_source_dummy/__init__.py @@ -14,15 +14,12 @@ # limitations under the License. ############################################################################## +from importlib.metadata import PackageNotFoundError +from importlib.metadata import version as _importlib_version + from large_image.constants import SourcePriority from large_image.tilesource import TileSource -try: - from importlib.metadata import PackageNotFoundError - from importlib.metadata import version as _importlib_version -except ImportError: - from importlib_metadata import PackageNotFoundError - from importlib_metadata import version as _importlib_version try: __version__ = _importlib_version(__name__) except PackageNotFoundError: diff --git a/sources/dummy/setup.py b/sources/dummy/setup.py index 63730f3a6..c50107f25 100644 --- a/sources/dummy/setup.py +++ b/sources/dummy/setup.py @@ -45,8 +45,6 @@ def prerelease_local_scheme(version): 'Development Status :: 5 - Production/Stable', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', @@ -55,12 +53,11 @@ def prerelease_local_scheme(version): ], install_requires=[ f'large-image{limit_version}', - 'importlib-metadata<5 ; python_version < "3.8"', ], keywords='large_image, tile source', packages=find_packages(exclude=['test', 'test.*']), url='https://github.com/girder/large_image', - python_requires='>=3.6', + python_requires='>=3.8', entry_points={ 'large_image.source': [ 'dummy = large_image_source_dummy:DummyTileSource', diff --git a/sources/gdal/large_image_source_gdal/__init__.py b/sources/gdal/large_image_source_gdal/__init__.py index 7fd62acad..75cb99aea 100644 --- a/sources/gdal/large_image_source_gdal/__init__.py +++ b/sources/gdal/large_image_source_gdal/__init__.py @@ -40,6 +40,9 @@ # isort: on +from importlib.metadata import PackageNotFoundError +from importlib.metadata import version as _importlib_version + import large_image from large_image.cache_util import LruCacheMetaclass, methodcache from large_image.constants import (TILE_FORMAT_IMAGE, TILE_FORMAT_NUMPY, @@ -53,12 +56,6 @@ ProjUnitsAcrossLevel0_MaxSize) from large_image.tilesource.utilities import JSONDict -try: - from importlib.metadata import PackageNotFoundError - from importlib.metadata import version as _importlib_version -except ImportError: - from importlib_metadata import PackageNotFoundError - from importlib_metadata import version as _importlib_version try: __version__ = _importlib_version(__name__) except PackageNotFoundError: diff --git a/sources/gdal/setup.py b/sources/gdal/setup.py index b162018d2..81be056aa 100644 --- a/sources/gdal/setup.py +++ b/sources/gdal/setup.py @@ -45,8 +45,6 @@ def prerelease_local_scheme(version): 'Development Status :: 5 - Production/Stable', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', @@ -58,7 +56,6 @@ def prerelease_local_scheme(version): 'gdal', 'packaging', 'pyproj>=2.2.0', - 'importlib-metadata<5 ; python_version < "3.8"', ], extras_require={ 'girder': f'girder-large-image{limit_version}', @@ -66,7 +63,7 @@ def prerelease_local_scheme(version): keywords='large_image, tile source', packages=find_packages(exclude=['test', 'test.*']), url='https://github.com/girder/large_image', - python_requires='>=3.6', + python_requires='>=3.8', entry_points={ 'large_image.source': [ 'gdal = large_image_source_gdal:GDALFileTileSource', diff --git a/sources/mapnik/large_image_source_mapnik/__init__.py b/sources/mapnik/large_image_source_mapnik/__init__.py index 2a65589da..70d06db8b 100644 --- a/sources/mapnik/large_image_source_mapnik/__init__.py +++ b/sources/mapnik/large_image_source_mapnik/__init__.py @@ -15,6 +15,8 @@ ############################################################################# import functools +from importlib.metadata import PackageNotFoundError +from importlib.metadata import version as _importlib_version import mapnik import PIL.Image @@ -26,12 +28,6 @@ from large_image.exceptions import TileSourceError from large_image.tilesource.utilities import JSONDict -try: - from importlib.metadata import PackageNotFoundError - from importlib.metadata import version as _importlib_version -except ImportError: - from importlib_metadata import PackageNotFoundError - from importlib_metadata import version as _importlib_version try: __version__ = _importlib_version(__name__) except PackageNotFoundError: diff --git a/sources/mapnik/setup.py b/sources/mapnik/setup.py index 13a720a7e..b6e82a022 100644 --- a/sources/mapnik/setup.py +++ b/sources/mapnik/setup.py @@ -45,8 +45,6 @@ def prerelease_local_scheme(version): 'Development Status :: 5 - Production/Stable', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', @@ -57,7 +55,6 @@ def prerelease_local_scheme(version): f'large-image{limit_version}', f'large-image-source-gdal{limit_version}', 'mapnik', - 'importlib-metadata<5 ; python_version < "3.8"', ], extras_require={ 'girder': f'girder-large-image{limit_version}', @@ -65,7 +62,7 @@ def prerelease_local_scheme(version): keywords='large_image, tile source', packages=find_packages(exclude=['test', 'test.*']), url='https://github.com/girder/large_image', - python_requires='>=3.6', + python_requires='>=3.8', entry_points={ 'large_image.source': [ 'mapnik = large_image_source_mapnik:MapnikFileTileSource', diff --git a/sources/multi/large_image_source_multi/__init__.py b/sources/multi/large_image_source_multi/__init__.py index f8a8f2b38..56f3f649f 100644 --- a/sources/multi/large_image_source_multi/__init__.py +++ b/sources/multi/large_image_source_multi/__init__.py @@ -6,6 +6,8 @@ import os import re import threading +from importlib.metadata import PackageNotFoundError +from importlib.metadata import version as _importlib_version from pathlib import Path import jsonschema @@ -19,12 +21,6 @@ from large_image.tilesource import FileTileSource from large_image.tilesource.utilities import _makeSameChannelDepth -try: - from importlib.metadata import PackageNotFoundError - from importlib.metadata import version as _importlib_version -except ImportError: - from importlib_metadata import PackageNotFoundError - from importlib_metadata import version as _importlib_version try: __version__ = _importlib_version(__name__) except PackageNotFoundError: diff --git a/sources/nd2/large_image_source_nd2/__init__.py b/sources/nd2/large_image_source_nd2/__init__.py index 7e09f50f1..91dda8a8e 100644 --- a/sources/nd2/large_image_source_nd2/__init__.py +++ b/sources/nd2/large_image_source_nd2/__init__.py @@ -17,6 +17,8 @@ import math import os import threading +from importlib.metadata import PackageNotFoundError +from importlib.metadata import version as _importlib_version import numpy as np @@ -27,12 +29,6 @@ nd2 = None -try: - from importlib.metadata import PackageNotFoundError - from importlib.metadata import version as _importlib_version -except ImportError: - from importlib_metadata import PackageNotFoundError - from importlib_metadata import version as _importlib_version try: __version__ = _importlib_version(__name__) except PackageNotFoundError: diff --git a/sources/nd2/setup.py b/sources/nd2/setup.py index 7a7bec0b0..2f66d4d61 100644 --- a/sources/nd2/setup.py +++ b/sources/nd2/setup.py @@ -45,7 +45,6 @@ def prerelease_local_scheme(version): 'Development Status :: 5 - Production/Stable', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', @@ -56,7 +55,6 @@ def prerelease_local_scheme(version): f'large-image{limit_version}', 'dask[array]', 'nd2[legacy]>=0.2.3', - 'importlib-metadata<5 ; python_version < "3.8"', ], extras_require={ 'girder': f'girder-large-image{limit_version}', @@ -64,7 +62,7 @@ def prerelease_local_scheme(version): keywords='large_image, tile source', packages=find_packages(exclude=['test', 'test.*']), url='https://github.com/girder/large_image', - python_requires='>=3.7', + python_requires='>=3.8', entry_points={ 'large_image.source': [ 'nd2 = large_image_source_nd2:ND2FileTileSource', diff --git a/sources/ometiff/large_image_source_ometiff/__init__.py b/sources/ometiff/large_image_source_ometiff/__init__.py index 9694e6a1f..c37983964 100644 --- a/sources/ometiff/large_image_source_ometiff/__init__.py +++ b/sources/ometiff/large_image_source_ometiff/__init__.py @@ -18,6 +18,8 @@ import math import os from collections import OrderedDict +from importlib.metadata import PackageNotFoundError +from importlib.metadata import version as _importlib_version import numpy as np import PIL.Image @@ -28,12 +30,6 @@ from large_image.constants import TILE_FORMAT_NUMPY, TILE_FORMAT_PIL, SourcePriority from large_image.exceptions import TileSourceError, TileSourceFileNotFoundError -try: - from importlib.metadata import PackageNotFoundError - from importlib.metadata import version as _importlib_version -except ImportError: - from importlib_metadata import PackageNotFoundError - from importlib_metadata import version as _importlib_version try: __version__ = _importlib_version(__name__) except PackageNotFoundError: diff --git a/sources/ometiff/setup.py b/sources/ometiff/setup.py index 6339e6221..d909c43d5 100644 --- a/sources/ometiff/setup.py +++ b/sources/ometiff/setup.py @@ -45,8 +45,6 @@ def prerelease_local_scheme(version): 'Development Status :: 5 - Production/Stable', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', @@ -56,7 +54,6 @@ def prerelease_local_scheme(version): install_requires=[ f'large-image{limit_version}', f'large-image-source-tiff{limit_version}', - 'importlib-metadata<5 ; python_version < "3.8"', ], extras_require={ 'girder': f'girder-large-image{limit_version}', @@ -64,7 +61,7 @@ def prerelease_local_scheme(version): keywords='large_image, tile source', packages=find_packages(exclude=['test', 'test.*']), url='https://github.com/girder/large_image', - python_requires='>=3.6', + python_requires='>=3.8', entry_points={ 'large_image.source': [ 'ometiff = large_image_source_ometiff:OMETiffFileTileSource', diff --git a/sources/openjpeg/large_image_source_openjpeg/__init__.py b/sources/openjpeg/large_image_source_openjpeg/__init__.py index a500250da..f8ca22f7d 100644 --- a/sources/openjpeg/large_image_source_openjpeg/__init__.py +++ b/sources/openjpeg/large_image_source_openjpeg/__init__.py @@ -22,6 +22,8 @@ import queue import struct import warnings +from importlib.metadata import PackageNotFoundError +from importlib.metadata import version as _importlib_version from xml.etree import ElementTree import glymur @@ -32,12 +34,6 @@ from large_image.exceptions import TileSourceError, TileSourceFileNotFoundError from large_image.tilesource import FileTileSource, etreeToDict -try: - from importlib.metadata import PackageNotFoundError - from importlib.metadata import version as _importlib_version -except ImportError: - from importlib_metadata import PackageNotFoundError - from importlib_metadata import version as _importlib_version try: __version__ = _importlib_version(__name__) except PackageNotFoundError: diff --git a/sources/openjpeg/setup.py b/sources/openjpeg/setup.py index b681ee429..a5f7ebc0c 100644 --- a/sources/openjpeg/setup.py +++ b/sources/openjpeg/setup.py @@ -45,8 +45,6 @@ def prerelease_local_scheme(version): 'Development Status :: 5 - Production/Stable', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', @@ -55,9 +53,7 @@ def prerelease_local_scheme(version): ], install_requires=[ f'large-image{limit_version}', - 'glymur>=0.8.18 ; python_version >= "3.7"', - 'glymur>=0.8.18,<0.9.4 ; python_version < "3.7"', - 'importlib-metadata<5 ; python_version < "3.8"', + 'glymur>=0.8.18', ], extras_require={ 'girder': f'girder-large-image{limit_version}', @@ -65,7 +61,7 @@ def prerelease_local_scheme(version): keywords='large_image, tile source', packages=find_packages(exclude=['test', 'test.*']), url='https://github.com/girder/large_image', - python_requires='>=3.6', + python_requires='>=3.8', entry_points={ 'large_image.source': [ 'openjpeg = large_image_source_openjpeg:OpenjpegFileTileSource', diff --git a/sources/openslide/large_image_source_openslide/__init__.py b/sources/openslide/large_image_source_openslide/__init__.py index fc4ce796a..25588e8b3 100644 --- a/sources/openslide/large_image_source_openslide/__init__.py +++ b/sources/openslide/large_image_source_openslide/__init__.py @@ -17,6 +17,8 @@ import io import math import os +from importlib.metadata import PackageNotFoundError +from importlib.metadata import version as _importlib_version import openslide import PIL @@ -27,12 +29,6 @@ from large_image.exceptions import TileSourceError, TileSourceFileNotFoundError from large_image.tilesource import FileTileSource, nearPowerOfTwo -try: - from importlib.metadata import PackageNotFoundError - from importlib.metadata import version as _importlib_version -except ImportError: - from importlib_metadata import PackageNotFoundError - from importlib_metadata import version as _importlib_version try: __version__ = _importlib_version(__name__) except PackageNotFoundError: diff --git a/sources/openslide/setup.py b/sources/openslide/setup.py index d6a3c4495..0080c0060 100644 --- a/sources/openslide/setup.py +++ b/sources/openslide/setup.py @@ -45,8 +45,6 @@ def prerelease_local_scheme(version): 'Development Status :: 5 - Production/Stable', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', @@ -57,7 +55,6 @@ def prerelease_local_scheme(version): f'large-image{limit_version}', 'openslide-python>=1.1.0', 'tifftools>=1.2.0', - 'importlib-metadata<5 ; python_version < "3.8"', ], extras_require={ 'girder': f'girder-large-image{limit_version}', @@ -65,7 +62,7 @@ def prerelease_local_scheme(version): keywords='large_image, tile source', packages=find_packages(exclude=['test', 'test.*']), url='https://github.com/girder/large_image', - python_requires='>=3.6', + python_requires='>=3.8', entry_points={ 'large_image.source': [ 'openslide = large_image_source_openslide:OpenslideFileTileSource', diff --git a/sources/pil/large_image_source_pil/__init__.py b/sources/pil/large_image_source_pil/__init__.py index 90d180a70..361fab9be 100644 --- a/sources/pil/large_image_source_pil/__init__.py +++ b/sources/pil/large_image_source_pil/__init__.py @@ -46,12 +46,9 @@ except Exception: pass -try: - from importlib.metadata import PackageNotFoundError - from importlib.metadata import version as _importlib_version -except ImportError: - from importlib_metadata import PackageNotFoundError - from importlib_metadata import version as _importlib_version +from importlib.metadata import PackageNotFoundError +from importlib.metadata import version as _importlib_version + try: __version__ = _importlib_version(__name__) except PackageNotFoundError: diff --git a/sources/pil/setup.py b/sources/pil/setup.py index d258f59e3..7b85dd776 100644 --- a/sources/pil/setup.py +++ b/sources/pil/setup.py @@ -45,8 +45,6 @@ def prerelease_local_scheme(version): 'Development Status :: 5 - Production/Stable', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', @@ -55,13 +53,12 @@ def prerelease_local_scheme(version): ], install_requires=[ f'large-image{limit_version}', - 'importlib-metadata<5 ; python_version < "3.8"', ], extras_require={ 'all': [ - 'rawpy ; python_version >= "3.7" and python_version < "3.12"', + 'rawpy ; python_version < "3.12"', 'pillow-heif', - 'pillow-jxl-plugin ; python_version >= "3.8"', + 'pillow-jxl-plugin', 'pillow-jpls ; python_version < "3.12"', ], 'girder': f'girder-large-image{limit_version}', @@ -69,7 +66,7 @@ def prerelease_local_scheme(version): keywords='large_image, tile source', packages=find_packages(exclude=['test', 'test.*']), url='https://github.com/girder/large_image', - python_requires='>=3.6', + python_requires='>=3.8', entry_points={ 'large_image.source': [ 'pil = large_image_source_pil:PILFileTileSource', diff --git a/sources/rasterio/large_image_source_rasterio/__init__.py b/sources/rasterio/large_image_source_rasterio/__init__.py index 082dcc022..f40ebb06c 100644 --- a/sources/rasterio/large_image_source_rasterio/__init__.py +++ b/sources/rasterio/large_image_source_rasterio/__init__.py @@ -21,6 +21,8 @@ import threading import warnings from contextlib import suppress +from importlib.metadata import PackageNotFoundError +from importlib.metadata import version as _importlib_version import numpy as np import PIL.Image @@ -43,12 +45,6 @@ ProjUnitsAcrossLevel0_MaxSize) from large_image.tilesource.utilities import JSONDict -try: - from importlib.metadata import PackageNotFoundError - from importlib.metadata import version as _importlib_version -except ImportError: - from importlib_metadata import PackageNotFoundError - from importlib_metadata import version as _importlib_version try: __version__ = _importlib_version(__name__) except PackageNotFoundError: diff --git a/sources/test/large_image_source_test/__init__.py b/sources/test/large_image_source_test/__init__.py index cee039925..036a8d91e 100644 --- a/sources/test/large_image_source_test/__init__.py +++ b/sources/test/large_image_source_test/__init__.py @@ -18,6 +18,8 @@ import itertools import math import re +from importlib.metadata import PackageNotFoundError +from importlib.metadata import version as _importlib_version import numpy as np from PIL import Image, ImageDraw, ImageFont @@ -28,12 +30,6 @@ from large_image.tilesource import TileSource from large_image.tilesource.utilities import _imageToNumpy, _imageToPIL -try: - from importlib.metadata import PackageNotFoundError - from importlib.metadata import version as _importlib_version -except ImportError: - from importlib_metadata import PackageNotFoundError - from importlib_metadata import version as _importlib_version try: __version__ = _importlib_version(__name__) except PackageNotFoundError: diff --git a/sources/test/setup.py b/sources/test/setup.py index 84757d108..6bbfaddfe 100644 --- a/sources/test/setup.py +++ b/sources/test/setup.py @@ -45,8 +45,6 @@ def prerelease_local_scheme(version): 'Development Status :: 5 - Production/Stable', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', @@ -55,12 +53,11 @@ def prerelease_local_scheme(version): ], install_requires=[ f'large-image{limit_version}', - 'importlib-metadata<5 ; python_version < "3.8"', ], keywords='large_image, tile source', packages=find_packages(exclude=['test', 'test.*']), url='https://github.com/girder/large_image', - python_requires='>=3.6', + python_requires='>=3.8', entry_points={ 'large_image.source': [ 'test = large_image_source_test:TestTileSource', diff --git a/sources/tiff/large_image_source_tiff/__init__.py b/sources/tiff/large_image_source_tiff/__init__.py index 90ea45d22..2b827a503 100644 --- a/sources/tiff/large_image_source_tiff/__init__.py +++ b/sources/tiff/large_image_source_tiff/__init__.py @@ -20,6 +20,8 @@ import json import math import os +from importlib.metadata import PackageNotFoundError +from importlib.metadata import version as _importlib_version import cachetools import numpy as np @@ -36,12 +38,6 @@ from .exceptions import (InvalidOperationTiffError, IOOpenTiffError, IOTiffError, TiffError, ValidationTiffError) -try: - from importlib.metadata import PackageNotFoundError - from importlib.metadata import version as _importlib_version -except ImportError: - from importlib_metadata import PackageNotFoundError - from importlib_metadata import version as _importlib_version try: __version__ = _importlib_version(__name__) except PackageNotFoundError: diff --git a/sources/tiff/setup.py b/sources/tiff/setup.py index 027ff854b..e00fbe64c 100644 --- a/sources/tiff/setup.py +++ b/sources/tiff/setup.py @@ -45,8 +45,6 @@ def prerelease_local_scheme(version): 'Development Status :: 5 - Production/Stable', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', @@ -57,7 +55,6 @@ def prerelease_local_scheme(version): f'large-image{limit_version}', 'pylibtiff', 'tifftools>=1.2.0', - 'importlib-metadata<5 ; python_version < "3.8"', ], extras_require={ 'girder': f'girder-large-image{limit_version}', @@ -65,7 +62,7 @@ def prerelease_local_scheme(version): keywords='large_image, tile source', packages=find_packages(exclude=['test', 'test.*']), url='https://github.com/girder/large_image', - python_requires='>=3.6', + python_requires='>=3.8', entry_points={ 'large_image.source': [ 'tiff = large_image_source_tiff:TiffFileTileSource', diff --git a/sources/tifffile/large_image_source_tifffile/__init__.py b/sources/tifffile/large_image_source_tifffile/__init__.py index af1c7ea37..3f8f580fd 100644 --- a/sources/tifffile/large_image_source_tifffile/__init__.py +++ b/sources/tifffile/large_image_source_tifffile/__init__.py @@ -3,6 +3,8 @@ import math import os import threading +from importlib.metadata import PackageNotFoundError +from importlib.metadata import version as _importlib_version import numpy as np import zarr @@ -15,12 +17,6 @@ tifffile = None -try: - from importlib.metadata import PackageNotFoundError - from importlib.metadata import version as _importlib_version -except ImportError: - from importlib_metadata import PackageNotFoundError - from importlib_metadata import version as _importlib_version try: __version__ = _importlib_version(__name__) except PackageNotFoundError: diff --git a/sources/tifffile/setup.py b/sources/tifffile/setup.py index d21c2396d..3fbfd7d00 100644 --- a/sources/tifffile/setup.py +++ b/sources/tifffile/setup.py @@ -45,7 +45,6 @@ def prerelease_local_scheme(version): 'Development Status :: 5 - Production/Stable', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', @@ -56,9 +55,7 @@ def prerelease_local_scheme(version): f'large-image{limit_version}', 'dask[array]', 'tifffile[all]', - 'zarr ; python_version >= "3.8" and python_version < "3.11"', - 'zarr<2.11 ; python_version < "3.8"', - 'importlib-metadata<5 ; python_version < "3.8"', + 'zarr', ], extras_require={ 'girder': f'girder-large-image{limit_version}', @@ -66,7 +63,7 @@ def prerelease_local_scheme(version): keywords='large_image, tile source', packages=find_packages(exclude=['test', 'test.*']), url='https://github.com/girder/large_image', - python_requires='>=3.7', + python_requires='>=3.8', entry_points={ 'large_image.source': [ 'tifffile = large_image_source_tifffile:TifffileFileTileSource', diff --git a/sources/vips/setup.py b/sources/vips/setup.py index 768481cbb..7f15b095b 100644 --- a/sources/vips/setup.py +++ b/sources/vips/setup.py @@ -45,8 +45,6 @@ def prerelease_local_scheme(version): 'Development Status :: 5 - Production/Stable', 'License :: OSI Approved :: Apache Software License', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', @@ -58,7 +56,6 @@ def prerelease_local_scheme(version): 'numpy', 'packaging', 'pyvips', - 'importlib-metadata<5 ; python_version < "3.8"', ], extras_require={ 'girder': 'girder-large-image', @@ -66,7 +63,7 @@ def prerelease_local_scheme(version): keywords='large_image, tile source', packages=find_packages(exclude=['test', 'test.*']), url='https://github.com/girder/large_image', - python_requires='>=3.6', + python_requires='>=3.8', entry_points={ 'large_image.source': [ 'vips = large_image_source_vips:VipsFileTileSource', diff --git a/sources/zarr/large_image_source_zarr/__init__.py b/sources/zarr/large_image_source_zarr/__init__.py index e6eddfc82..6c403bdf2 100644 --- a/sources/zarr/large_image_source_zarr/__init__.py +++ b/sources/zarr/large_image_source_zarr/__init__.py @@ -1,8 +1,8 @@ -import functools import math -import operator import os import threading +from importlib.metadata import PackageNotFoundError +from importlib.metadata import version as _importlib_version import numpy as np import packaging.version @@ -15,12 +15,6 @@ from large_image.tilesource import FileTileSource from large_image.tilesource.utilities import nearPowerOfTwo -try: - from importlib.metadata import PackageNotFoundError - from importlib.metadata import version as _importlib_version -except ImportError: - from importlib_metadata import PackageNotFoundError - from importlib_metadata import version as _importlib_version try: __version__ = _importlib_version(__name__) except PackageNotFoundError: @@ -161,10 +155,8 @@ def _scanZarrArray(self, group, arr, results): return if 'x' not in axes or 'y' not in axes: return - # Change this to `math.prod(arr.shape)` when dropping Python 3.7 - check = (is_ome, functools.reduce(operator.mul, arr.shape, 1), - channels is not None, tuple(axes.keys()), - tuple(channels) if channels else ()) + check = (is_ome, math.prod(arr.shape), channels is not None, + tuple(axes.keys()), tuple(channels) if channels else ()) if results['best'] is None or check > results['best']: results['best'] = check results['series'] = [(group, arr)] diff --git a/test/test_cache_source.py b/test/test_cache_source.py index 290ea5bab..f4315f142 100644 --- a/test/test_cache_source.py +++ b/test/test_cache_source.py @@ -1,5 +1,3 @@ -import sys - import pytest import large_image @@ -49,8 +47,6 @@ def testCacheSourceStyleFirst(): assert ts1.getTile(0, 0, 4) == tile1 -@pytest.mark.skipif(sys.version_info < (3, 7), - reason='requires python >= 3.7 for a source with the issue') @pytest.mark.singular() def testCacheSourceBadStyle(): cachesClear() diff --git a/test/test_converter.py b/test/test_converter.py index ea76df031..809fa5aeb 100644 --- a/test/test_converter.py +++ b/test/test_converter.py @@ -1,7 +1,6 @@ import json import os import shutil -import sys import large_image_converter import large_image_converter.__main__ as main @@ -317,7 +316,6 @@ def testConvertFromTestSourceFrameArray(tmpdir): assert len(info['ifds']) == 6 -@pytest.mark.skipif(sys.version_info < (3, 7), reason='requires python >= 3.7 for the test image') def testConvertImageJ(tmpdir): imagePath = datastore.fetch('synthetic_imagej.tiff') outputPath = os.path.join(tmpdir, 'out.tiff') diff --git a/test/test_source_base.py b/test/test_source_base.py index e63fbf1b1..2cb753722 100644 --- a/test/test_source_base.py +++ b/test/test_source_base.py @@ -34,7 +34,6 @@ 'deepzoom': {}, 'dicom': { 'read': r'\.dcm$', - 'python': sys.version_info >= (3, 8), }, 'dummy': {'any': True, 'skipTiles': r''}, 'gdal': { @@ -54,7 +53,6 @@ }, 'nd2': { 'read': r'\.(nd2)$', - 'python': sys.version_info >= (3, 7), }, 'ometiff': {'read': r'\.(ome\.tif.*)$'}, 'openjpeg': {'read': r'\.(jp2)$'}, @@ -65,13 +63,11 @@ }, 'pil': { 'read': r'\.(jpg|jpeg|png|tif.*)$', - 'noread': r'(G10-3|JK-kidney|d042-353.*tif|huron|one_layer_missing|US_Geo|extraoverview' + ( - r'|sample.*ome' if sys.version_info < (3, 7) else r'') + r')', + 'noread': r'(G10-3|JK-kidney|d042-353.*tif|huron|one_layer_missing|US_Geo|extraoverview)', }, 'rasterio': { 'read': r'\.(jpg|jpeg|jp2|ptif|scn|svs|tif.*|qptiff)$', 'noread': r'(huron\.image2_jpeg2k|sample_jp2k_33003|TCGA-DU-6399|\.(ome.tiff|nc)$)', - 'python': sys.version_info >= (3, 8), }, 'test': {'any': True, 'skipTiles': r''}, 'tiff': { @@ -85,7 +81,6 @@ 'noread': r'((\.(nc|nd2|yml|yaml|json|czi|png|jpg|jpeg|jp2|dcm|zarr\.db|zarr\.zip)$)' + (r'|bad_axes' if sys.version_info < (3, 9) else '') + r')', - 'python': sys.version_info >= (3, 7), }, 'vips': { 'read': r'', @@ -767,7 +762,6 @@ def testStyleFunctionsWarnings(): assert source._styleFunctionWarnings -@pytest.mark.skipif(sys.version_info < (3, 7), reason='requires python >= 3.7 for the source') @pytest.mark.singular() def testStyleRepeatedFrame(): imagePath = datastore.fetch('ITGA3Hi_export_crop2.nd2') diff --git a/test/test_source_dicomweb.py b/test/test_source_dicomweb.py index 63aeb0097..3a87467b5 100644 --- a/test/test_source_dicomweb.py +++ b/test/test_source_dicomweb.py @@ -1,15 +1,9 @@ -import sys - import pytest from large_image.cache_util import cachesClear from . import utilities -pytestmark = [ - pytest.mark.skipif(sys.version_info < (3, 8), reason='requires python3.8 or higher'), -] - @pytest.mark.plugin('large_image_source_dicom') def testTilesFromDICOMweb(): diff --git a/test/test_source_multi.py b/test/test_source_multi.py index d1016753e..93da891e1 100644 --- a/test/test_source_multi.py +++ b/test/test_source_multi.py @@ -1,6 +1,5 @@ import json import os -import sys import large_image_source_multi import numpy as np @@ -76,7 +75,6 @@ def testTilesFromMultiSimpleScaling(): utilities.checkTilesZXY(source, tileMetadata, tileParams={'frame': frame}) -@pytest.mark.skipif(sys.version_info < (3, 7), reason='requires python >= 3.7 for a sub-source') def testTilesFromMultiMultiSource(multiSourceImagePath): imagePath = multiSourceImagePath source = large_image_source_multi.open(imagePath) @@ -135,7 +133,6 @@ def testTilesFromNonschemaMultiString(): large_image_source_multi.open(sourceString) -@pytest.mark.skipif(sys.version_info < (3, 7), reason='requires python >= 3.7 for a sub-source') def testInternalMetadata(multiSourceImagePath): imagePath = multiSourceImagePath source = large_image_source_multi.open(imagePath) @@ -143,7 +140,6 @@ def testInternalMetadata(multiSourceImagePath): assert 'frames' in metadata -@pytest.mark.skipif(sys.version_info < (3, 7), reason='requires python >= 3.7 for a sub-source') def testAssociatedImages(multiSourceImagePath): imagePath = multiSourceImagePath source = large_image_source_multi.open(imagePath) @@ -202,7 +198,6 @@ def testFramesAsAxes(): assert tileMetadata['IndexRange']['IndexZ'] == 8 -@pytest.mark.skipif(sys.version_info < (3, 7), reason='requires python >= 3.7 for a sub-source') def testMultiComposite(): datastore.fetch('ITGA3Hi_export_crop2.nd2') imagePath = datastore.fetch('multi-source-composite.yaml') diff --git a/test/test_source_nd2.py b/test/test_source_nd2.py index 98151817b..d97900ebc 100644 --- a/test/test_source_nd2.py +++ b/test/test_source_nd2.py @@ -1,5 +1,3 @@ -import sys - try: import large_image_source_nd2 except ImportError: @@ -9,10 +7,6 @@ from . import utilities from .datastore import datastore -pytestmark = [ - pytest.mark.skipif(sys.version_info < (3, 7), reason='requires python3.7 or higher'), -] - def testTilesFromND2(): imagePath = datastore.fetch('ITGA3Hi_export_crop2.nd2') diff --git a/test/test_source_rasterio.py b/test/test_source_rasterio.py index a7937e468..88bd50702 100644 --- a/test/test_source_rasterio.py +++ b/test/test_source_rasterio.py @@ -1,17 +1,12 @@ -import sys from unittest import TestCase try: import large_image_source_rasterio except ImportError: pass -import pytest from .source_geo_base import _GDALBaseSourceTest -if sys.version_info < (3, 8): - pytest.skip(reason='requires python3.8 or higher', allow_module_level=True) - class RasterioSourceTests(_GDALBaseSourceTest, TestCase): diff --git a/tox.ini b/tox.ini index e6babbe17..f69bdc468 100644 --- a/tox.ini +++ b/tox.ini @@ -1,6 +1,6 @@ [tox] envlist = - test-py{36,37,38,39,310,311,312} + test-py{38,39,310,311,312} docs lint lintclient @@ -52,13 +52,6 @@ setenv = PIP_FIND_LINKS=https://girder.github.io/large_image_wheels GDAL_PAM_ENABLED=no -# Versions that don't have all tile sources -[testenv:test-py{36,37}] -deps = {[testenv:test]deps} -allowlist_externals = {[testenv:test]allowlist_externals} -commands = {[testenv:test]commands} -setenv = {[testenv:test]setenv} - # Versions that do have all tile sources. Using the requirements-dev.txt file # installs in editable mode, which then includes results in coverage. [testenv:test-py{38,39,310,311,312}] @@ -85,7 +78,7 @@ commands = pytest --numprocesses 1 -m 'singular and not girder_client' --cov-config tox.ini --suppress-no-test-exit-code {posargs} pytest --numprocesses logical -m 'not singular and not girder_client' --cov-config tox.ini --cov-append --suppress-no-test-exit-code {posargs} -[testenv:server-py{36,37,38,39,310,311,312}] +[testenv:server-py{38,39,310,311,312}] deps = {[testenv:server]deps} commands = {[testenv:server]commands} @@ -107,7 +100,7 @@ commands = pytest --numprocesses 1 -m 'singular and not girder' --cov-config tox.ini --suppress-no-test-exit-code {posargs} pytest --numprocesses logical -m 'not singular and not girder and not notebook' --cov-config tox.ini --cov-append --suppress-no-test-exit-code {posargs} -[testenv:core-py{36,37,38,39,310,311,312}] +[testenv:core-py{38,39,310,311,312}] deps = {[testenv:core]deps} commands = {[testenv:core]commands} @@ -221,7 +214,7 @@ deps = commands = pip freeze -[testenv:dev-py{36,37,38,39,310,311,312}] +[testenv:dev-py{38,39,310,311,312}] usedevelop = true deps = {[testenv:dev]deps} commands = {[testenv:dev]commands} diff --git a/utilities/converter/large_image_converter/__init__.py b/utilities/converter/large_image_converter/__init__.py index e5ae29707..6cbef0ae4 100644 --- a/utilities/converter/large_image_converter/__init__.py +++ b/utilities/converter/large_image_converter/__init__.py @@ -9,6 +9,8 @@ import struct import threading import time +from importlib.metadata import PackageNotFoundError +from importlib.metadata import version as _importlib_version from tempfile import TemporaryDirectory import numpy as np @@ -21,12 +23,6 @@ pyvips = None -try: - from importlib.metadata import PackageNotFoundError - from importlib.metadata import version as _importlib_version -except ImportError: - from importlib_metadata import PackageNotFoundError - from importlib_metadata import version as _importlib_version try: __version__ = _importlib_version(__name__) except PackageNotFoundError: diff --git a/utilities/converter/setup.py b/utilities/converter/setup.py index 22c0f77d5..3cbe33b51 100644 --- a/utilities/converter/setup.py +++ b/utilities/converter/setup.py @@ -50,8 +50,6 @@ def prerelease_local_scheme(version): 'Topic :: Scientific/Engineering', 'Intended Audience :: Science/Research', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', @@ -65,7 +63,6 @@ def prerelease_local_scheme(version): 'psutil', 'pyvips', 'tifftools', - 'importlib-metadata<5 ; python_version < "3.8"', ], extras_require={ 'jp2k': [ @@ -83,5 +80,5 @@ def prerelease_local_scheme(version): entry_points={ 'console_scripts': ['large_image_converter = large_image_converter.__main__:main'], }, - python_requires='>=3.6', + python_requires='>=3.8', ) diff --git a/utilities/tasks/large_image_tasks/__init__.py b/utilities/tasks/large_image_tasks/__init__.py index 0b7fb5eb5..20ea25701 100644 --- a/utilities/tasks/large_image_tasks/__init__.py +++ b/utilities/tasks/large_image_tasks/__init__.py @@ -4,14 +4,11 @@ __email__ = 'kitware@kitware.com' +from importlib.metadata import PackageNotFoundError +from importlib.metadata import version as _importlib_version + from girder_worker import GirderWorkerPluginABC -try: - from importlib.metadata import PackageNotFoundError - from importlib.metadata import version as _importlib_version -except ImportError: - from importlib_metadata import PackageNotFoundError - from importlib_metadata import version as _importlib_version try: __version__ = _importlib_version(__name__) except PackageNotFoundError: diff --git a/utilities/tasks/setup.py b/utilities/tasks/setup.py index cbd93b814..2535e48bd 100644 --- a/utilities/tasks/setup.py +++ b/utilities/tasks/setup.py @@ -50,8 +50,6 @@ def prerelease_local_scheme(version): 'Topic :: Scientific/Engineering', 'Intended Audience :: Science/Research', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', @@ -61,7 +59,6 @@ def prerelease_local_scheme(version): install_requires=[ # Packages required by both producer and consumer side installations 'girder-worker-utils>=0.8.5', - 'importlib-metadata<5 ; python_version < "3.8"', ], extras_require={ 'girder': [ @@ -75,7 +72,7 @@ def prerelease_local_scheme(version): 'girder-worker[worker]>=0.6.0', ], }, - python_requires='>=3.6', + python_requires='>=3.8', entry_points={ 'girder_worker_plugins': [ 'large_image_tasks = large_image_tasks:LargeImageTasks', From f2ead8b2c33df16aa138d19ffad60bfd5af565e5 Mon Sep 17 00:00:00 2001 From: David Manthey Date: Wed, 1 Nov 2023 09:27:29 -0400 Subject: [PATCH 2/2] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3102f5599..fa280b4c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ - Turn down logging about annotation ACLs ([#1332](../../pull/1332)) - Add scope to the dicomweb import endpoint access decorator ([#1347](../../pull/1347)) - Drop support for Python 3.6 and Python 3.7 ([#1352](../../pull/1352)) +- Standardize DICOMweb assetstore parameter names/style ([#1338](../../pull/1338)) ## 1.25.0