From 508474e0420543e898a709a9fa472465c1717cf0 Mon Sep 17 00:00:00 2001 From: Bill Little Date: Tue, 16 Apr 2024 15:21:13 +0100 Subject: [PATCH] Migrate to pytest (#420) * add pytest dependency * update locks * configure pytest * add pytest log_cli config * update locks after rebase (pep8 update) * review actions --- .github/workflows/ci-tests.yml | 5 +- docs/ref/release_notes.rst | 5 + iris_grib/tests/runner/__init__.py | 8 -- iris_grib/tests/runner/__main__.py | 39 ------- iris_grib/tests/runner/_runner.py | 143 ------------------------- noxfile.py | 7 +- pyproject.toml | 20 +++- requirements/locks/py310-linux-64.lock | 10 +- requirements/locks/py311-linux-64.lock | 9 +- requirements/locks/py39-linux-64.lock | 10 +- requirements/py310.yml | 3 +- requirements/py311.yml | 2 +- requirements/py39.yml | 3 +- requirements/test.txt | 2 +- 14 files changed, 56 insertions(+), 210 deletions(-) delete mode 100644 iris_grib/tests/runner/__init__.py delete mode 100644 iris_grib/tests/runner/__main__.py delete mode 100644 iris_grib/tests/runner/_runner.py diff --git a/.github/workflows/ci-tests.yml b/.github/workflows/ci-tests.yml index 47c49c5c..95c1c92a 100644 --- a/.github/workflows/ci-tests.yml +++ b/.github/workflows/ci-tests.yml @@ -125,7 +125,8 @@ jobs: - name: "iris ${{ matrix.session }}" env: - PY_VER: ${{ matrix.python-version }} IRIS_SOURCE: ${{ matrix.iris-source }} + PY_COLORS: 1 + PY_VER: ${{ matrix.python-version }} run: | - nox --session ${{ matrix.session }} -- --test-data-dir ${HOME}/iris-test-data/test_data \ No newline at end of file + nox --session ${{ matrix.session }} -- --test-data-dir ${HOME}/iris-test-data/test_data diff --git a/docs/ref/release_notes.rst b/docs/ref/release_notes.rst index a58d6304..66eea17a 100644 --- a/docs/ref/release_notes.rst +++ b/docs/ref/release_notes.rst @@ -16,6 +16,11 @@ Features 4.6, i.e. percentile forecasts. `(PR#401) `_ +Dependencies +^^^^^^^^^^^^ +* `@bjlittle `_ migrated to ``pytest``. + `(PR#420) `_ + What's new in iris-grib v0.19.1 ------------------------------- diff --git a/iris_grib/tests/runner/__init__.py b/iris_grib/tests/runner/__init__.py deleted file mode 100644 index c3bac50a..00000000 --- a/iris_grib/tests/runner/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright iris-grib contributors -# -# This file is part of iris-grib and is released under the BSD license. -# See LICENSE in the root of the repository for full licensing details. -""" -Empty file to allow import. - -""" diff --git a/iris_grib/tests/runner/__main__.py b/iris_grib/tests/runner/__main__.py deleted file mode 100644 index bc24db19..00000000 --- a/iris_grib/tests/runner/__main__.py +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright iris-grib contributors -# -# This file is part of iris-grib and is released under the BSD license. -# See LICENSE in the root of the repository for full licensing details. -""" -Provides testing capabilities for installed copies of iris-grib. - -""" - -import argparse - -from ._runner import TestRunner - - -parser = argparse.ArgumentParser( - "iris_grib.tests", description=TestRunner.description -) -for long_opt, short_opt, help_text in TestRunner.user_options: - long_opt = long_opt.strip("=") - if long_opt in TestRunner.boolean_options: - parser.add_argument( - "--" + long_opt, - "-" + short_opt, - action="store_true", - help=help_text, - ) - else: - parser.add_argument("--" + long_opt, "-" + short_opt, help=help_text) -args = parser.parse_args() - -runner = TestRunner() - -runner.initialize_options() -for long_opt, short_opt, help_text in TestRunner.user_options: - arg = long_opt.replace("-", "_").strip("=") - setattr(runner, arg, getattr(args, arg)) -runner.finalize_options() - -runner.run() diff --git a/iris_grib/tests/runner/_runner.py b/iris_grib/tests/runner/_runner.py deleted file mode 100644 index ea797b7a..00000000 --- a/iris_grib/tests/runner/_runner.py +++ /dev/null @@ -1,143 +0,0 @@ -# Copyright iris-grib contributors -# -# This file is part of iris-grib and is released under the BSD license. -# See LICENSE in the root of the repository for full licensing details. -""" -Provides testing capabilities for installed copies of iris-grib. - -""" - -# Because this file is imported by setup.py, there may be additional runtime -# imports later in the file. -import multiprocessing -import os - - -# NOTE: Do not inherit from object as distutils does not like it. -class TestRunner: - """Run the iris-grib tests under nose and multiprocessor for performance""" - - description = ( - "Run tests under nose and multiprocessor for performance. " - "Specifying one or more test flags will run *only* those " - "tests." - ) - user_options = [ - ( - "no-data", - "n", - "Override the paths to the data repositories so it " - "appears to the tests that it does not exist.", - ), - ("stop", "x", "Stop running tests after the first error or failure."), - ("unit-tests", "s", "Run the limited subset of unit tests."), - ("integration-tests", "i", "Run the integration tests."), - ("default-tests", "d", "Run the default tests."), - ( - "coding-tests", - "c", - "Run the coding standards tests. (These are a " - "subset of the default tests.)", - ), - ( - "num-processors=", - "p", - "The number of processors used for running " "the tests.", - ), - ("create-missing", "m", "Create missing test result files."), - ] - boolean_options = [ - "no-data", - "unit-tests", - "stop", - "default-tests", - "integration-tests", - "create-missing", - ] - - def initialize_options(self): - self.no_data = False - self.stop = False - self.unit_tests = False - self.default_tests = False - self.integration_tests = False - self.num_processors = None - self.create_missing = False - - def finalize_options(self): - # These environment variables will be propagated to all the - # processes that nose.run creates. - if self.no_data: - print("Running tests in no-data mode...") - import iris.config - - iris.config.TEST_DATA_DIR = None - if self.create_missing: - os.environ["IRIS_TEST_CREATE_MISSING"] = "true" - - tests = [] - if self.unit_tests: - tests.append("unit") - if self.default_tests: - tests.append("default") - if self.integration_tests: - tests.append("integration") - if not tests: - tests.append("default") - print("Running test suite(s): {}".format(", ".join(tests))) - if self.stop: - print("Stopping tests after the first error or failure") - if self.num_processors is None: - # Choose a magic number that works reasonably well for the default - # number of processes. - self.num_processors = (multiprocessing.cpu_count() + 1) // 4 + 1 - else: - self.num_processors = int(self.num_processors) - - def run(self): - import nose - - if hasattr(self, "distribution") and self.distribution.tests_require: - self.distribution.fetch_build_eggs(self.distribution.tests_require) - - tests = [] - if self.unit_tests: - tests.append("iris_grib.tests.unit") - if self.default_tests: - tests.append("iris_grib.tests") - if self.integration_tests: - tests.append("iris_grib.tests.integration") - - if not tests: - tests.append("iris_grib.tests") - - regexp_pat = r"--match=^([Tt]est(?![Mm]ixin)|[Ss]ystem)" - - n_processors = max(self.num_processors, 1) - - args = [ - "", - None, - "--processes=%s" % n_processors, - "--verbosity=2", - regexp_pat, - "--process-timeout=180", - ] - - if self.stop: - args.append("--stop") - - result = True - for test in tests: - args[1] = test - print() - print( - "Running test discovery on %s with %s processors." - % (test, n_processors) - ) - # run the tests at module level i.e. my_module.tests - # - test must start with test/Test and must not contain the - # word Mixin. - result &= nose.run(argv=args) - if result is False: - exit(1) diff --git a/noxfile.py b/noxfile.py index 9e7e41b6..687f463a 100644 --- a/noxfile.py +++ b/noxfile.py @@ -311,10 +311,9 @@ def tests(session: nox.sessions.Session, iris_source: str): session.run("python", "-m", "eccodes", "selfcheck") session.run( - "python", - "-m", - "iris_grib.tests.runner", - "--default-tests", + "pytest", + "--pyargs", + "iris_grib", ) diff --git a/pyproject.toml b/pyproject.toml index 01beb97c..5a054c51 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -91,4 +91,22 @@ enable_error_code = ["ignore-without-code", "redundant-expr", "truthy-bool"] exclude = [ 'noxfile\.py', 'docs/conf\.py' -] \ No newline at end of file +] + +[tool.pytest.ini_options] +addopts = [ + "--doctest-continue-on-failure", + "--doctest-modules", + "-ra", + "--strict-config", + "--strict-markers", + "-v", +] +doctest_optionflags = "NORMALIZE_WHITESPACE ELLIPSIS NUMBER" +# configure logging as recommended by repo-review +log_cli = "True" +log_cli_level = "INFO" +minversion = "6.0" +testpaths = "iris_grib" +xfail_strict = "True" + diff --git a/requirements/locks/py310-linux-64.lock b/requirements/locks/py310-linux-64.lock index b03ddedf..5a2215eb 100644 --- a/requirements/locks/py310-linux-64.lock +++ b/requirements/locks/py310-linux-64.lock @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: 2526a5d0d002791e04159711082965735b6b14b7b9f6e0fbcba61aff87a09e79 +# input_hash: 1d932b8d3274021fab62c4f076314526d5dfe70494cd975cc07a9a324867d8e7 @EXPLICIT https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81 https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.2.2-hbcca054_0.conda#2f4327a1cbe7f022401b236e915a5fef @@ -82,11 +82,14 @@ https://conda.anaconda.org/conda-forge/noarch/certifi-2024.2.2-pyhd8ed1ab_0.cond https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda#7f4a9e3fcff3f6356ae99244a014da6a https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda#f3ad426304898027fc619827ff428eca https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.0.0-pyhd8ed1ab_0.conda#753d29fe41bb881e4b9c004f0abf973f +https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2#3faab06a954c2a04039983f2c4a50d99 https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda#5cd86562580f274031ede6aa6aa24441 +https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda#8d652ea2ee8eaee02ed8dc820bc794aa https://conda.anaconda.org/conda-forge/noarch/filelock-3.13.4-pyhd8ed1ab_0.conda#6baa2e7fc09bd2c7c82cb6662d5f1d36 https://conda.anaconda.org/conda-forge/noarch/findlibs-0.0.5-pyhd8ed1ab_0.conda#8f325f63020af6f7acbe2c4cb4c920db https://conda.anaconda.org/conda-forge/noarch/fsspec-2024.3.1-pyhca7485f_0.conda#b7f0662ef2c9d4404f0af9eef5ed2fde https://conda.anaconda.org/conda-forge/noarch/idna-3.6-pyhd8ed1ab_0.conda#1a76f09108576397c41c0b0c5bd84134 +https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda#f800d2da156d08e289b14e87e43c1ae5 https://conda.anaconda.org/conda-forge/noarch/iris-sample-data-2.4.0-pyhd8ed1ab_0.tar.bz2#18ee9c07cf945a33f92caf1ee3d23ad9 https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py310hd41b1e2_1.conda#b8d67603d43b23ce7e988a5d81a7ab79 https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda#51bb7010fc86f70eee639b4bb7a894f5 @@ -96,9 +99,9 @@ https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2# https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.5-py310h2372a71_0.conda#f6703fa0214a00bf49d1bef6dc7672d0 https://conda.anaconda.org/conda-forge/noarch/mock-5.1.0-pyhd8ed1ab_0.conda#926c67c0310094cf421ad13f7d3f38e5 https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 -https://conda.anaconda.org/conda-forge/noarch/nose-1.3.7-py_1006.tar.bz2#382019d5f8e9362ef6f60a8d4e7bce8f https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda#7f2e286780f072ed750df46dc2631138 https://conda.anaconda.org/conda-forge/noarch/packaging-24.0-pyhd8ed1ab_0.conda#248f521b64ce055e7feae3105e7abeb8 +https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda#139e9feb65187e916162917bb2484976 https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda#844d9eb3b43095b031874477f7d70088 https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.2-pyhd8ed1ab_0.conda#b9a4dacf97241704529131a0dfc0494f https://conda.anaconda.org/conda-forge/noarch/pyshp-2.3.1-pyhd8ed1ab_0.tar.bz2#92a889dc236a5197612bc85bee6d7174 @@ -107,6 +110,7 @@ https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.4.1-py310h2372a7 https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py310h2372a71_1.conda#bb010e368de4940771368bc3dc4c63e7 https://conda.anaconda.org/conda-forge/noarch/setuptools-69.5.1-pyhd8ed1ab_0.conda#7462280d81f639363e6e63c81276bd9e https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2 +https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5844808ffab9ebdb694585b50ba02a96 https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.1-pyhd8ed1ab_0.conda#2fcb582444635e2c402e8569bb94e039 https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.1.0-py310h2372a71_0.conda#72637c58d36d9475fda24700c9796f19 https://conda.anaconda.org/conda-forge/noarch/wheel-0.43.0-pyhd8ed1ab_1.conda#0b5293a157c2b5cd513dd1b03d8d3aae @@ -125,6 +129,7 @@ https://conda.anaconda.org/conda-forge/noarch/partd-1.4.1-pyhd8ed1ab_0.conda#acf https://conda.anaconda.org/conda-forge/linux-64/pillow-10.3.0-py310hf73ecf8_0.conda#1de56cf017dfd02aa84093206a0141a8 https://conda.anaconda.org/conda-forge/noarch/pip-24.0-pyhd8ed1ab_0.conda#f586ac1e56c8638b64f9c8122a7b8a67 https://conda.anaconda.org/conda-forge/linux-64/proj-9.3.1-h1d62c97_0.conda#44ec51d0857d9be26158bb85caa74fdb +https://conda.anaconda.org/conda-forge/noarch/pytest-8.1.1-pyhd8ed1ab_0.conda#94ff09cdedcb7b17e9cd5097ee2cfcff https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda#2cf4264fffb9e6eff6031c5b6884d61c https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.1-pyhd8ed1ab_0.conda#08807a87fa7af10754d46f63b368e016 https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.7.10-h7f98852_0.tar.bz2#e77615e5141cad5a2acaa043d1cf0ca5 @@ -148,4 +153,3 @@ https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.5-nompi_py310hba70d5 https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.23.0-py310hcc13569_0.conda#89a13de526ea3008341e3a2aeab4da7e https://conda.anaconda.org/conda-forge/linux-64/python-eccodes-1.7.0-py310h1f7b6fc_1.conda#f020ac07b7df9c4b0bd0ece3055b5bd2 https://conda.anaconda.org/conda-forge/noarch/iris-3.8.1-pyha770c72_0.conda#b08a116ef1607e7e960a4caa902e3a90 - diff --git a/requirements/locks/py311-linux-64.lock b/requirements/locks/py311-linux-64.lock index a82f3504..30a46fd5 100644 --- a/requirements/locks/py311-linux-64.lock +++ b/requirements/locks/py311-linux-64.lock @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: 511946459ef14e966c9286ad613478241ad4307a3c433201f92dd2db7ebeb3d8 +# input_hash: c2e09c4aa88ff4e97f86383f01792ed1ae572a5ebf3ee2da38d438e64e36d371 @EXPLICIT https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81 https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.2.2-hbcca054_0.conda#2f4327a1cbe7f022401b236e915a5fef @@ -86,11 +86,13 @@ https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.0.0-pyhd8ed1ab_0.con https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2#3faab06a954c2a04039983f2c4a50d99 https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda#5cd86562580f274031ede6aa6aa24441 https://conda.anaconda.org/conda-forge/linux-64/docutils-0.20.1-py311h38be061_3.conda#1c33f55e5cdcc2a2b973c432b5225bfe +https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda#8d652ea2ee8eaee02ed8dc820bc794aa https://conda.anaconda.org/conda-forge/noarch/filelock-3.13.4-pyhd8ed1ab_0.conda#6baa2e7fc09bd2c7c82cb6662d5f1d36 https://conda.anaconda.org/conda-forge/noarch/findlibs-0.0.5-pyhd8ed1ab_0.conda#8f325f63020af6f7acbe2c4cb4c920db https://conda.anaconda.org/conda-forge/noarch/fsspec-2024.3.1-pyhca7485f_0.conda#b7f0662ef2c9d4404f0af9eef5ed2fde https://conda.anaconda.org/conda-forge/noarch/idna-3.6-pyhd8ed1ab_0.conda#1a76f09108576397c41c0b0c5bd84134 https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2#7de5386c8fea29e76b303f37dde4c352 +https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda#f800d2da156d08e289b14e87e43c1ae5 https://conda.anaconda.org/conda-forge/noarch/iris-sample-data-2.4.0-pyhd8ed1ab_0.tar.bz2#18ee9c07cf945a33f92caf1ee3d23ad9 https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py311h9547e67_1.conda#2c65bdf442b0d37aad080c8a4e0d452f https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda#51bb7010fc86f70eee639b4bb7a894f5 @@ -100,9 +102,9 @@ https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2# https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.5-py311h459d7ec_0.conda#a322b4185121935c871d201ae00ac143 https://conda.anaconda.org/conda-forge/noarch/mock-5.1.0-pyhd8ed1ab_0.conda#926c67c0310094cf421ad13f7d3f38e5 https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 -https://conda.anaconda.org/conda-forge/noarch/nose-1.3.7-py_1006.tar.bz2#382019d5f8e9362ef6f60a8d4e7bce8f https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda#7f2e286780f072ed750df46dc2631138 https://conda.anaconda.org/conda-forge/noarch/packaging-24.0-pyhd8ed1ab_0.conda#248f521b64ce055e7feae3105e7abeb8 +https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda#139e9feb65187e916162917bb2484976 https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda#844d9eb3b43095b031874477f7d70088 https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda#140a7f159396547e9799aa98f9f0742e https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.2-pyhd8ed1ab_0.conda#b9a4dacf97241704529131a0dfc0494f @@ -115,6 +117,7 @@ https://conda.anaconda.org/conda-forge/noarch/setuptools-69.5.1-pyhd8ed1ab_0.con https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2 https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2#4d22a9315e78c6827f806065957d566e https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_0.conda#da1d979339e2714c30a8e806a33ec087 +https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5844808ffab9ebdb694585b50ba02a96 https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.1-pyhd8ed1ab_0.conda#2fcb582444635e2c402e8569bb94e039 https://conda.anaconda.org/conda-forge/noarch/wheel-0.43.0-pyhd8ed1ab_1.conda#0b5293a157c2b5cd513dd1b03d8d3aae https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.4-h0b41bf4_2.conda#82b6df12252e6f32402b96dacc656fec @@ -133,6 +136,7 @@ https://conda.anaconda.org/conda-forge/noarch/partd-1.4.1-pyhd8ed1ab_0.conda#acf https://conda.anaconda.org/conda-forge/linux-64/pillow-10.3.0-py311h18e6fac_0.conda#6c520a9d36c9d7270988c7a6c360d6d4 https://conda.anaconda.org/conda-forge/noarch/pip-24.0-pyhd8ed1ab_0.conda#f586ac1e56c8638b64f9c8122a7b8a67 https://conda.anaconda.org/conda-forge/linux-64/proj-9.3.1-h1d62c97_0.conda#44ec51d0857d9be26158bb85caa74fdb +https://conda.anaconda.org/conda-forge/noarch/pytest-8.1.1-pyhd8ed1ab_0.conda#94ff09cdedcb7b17e9cd5097ee2cfcff https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda#2cf4264fffb9e6eff6031c5b6884d61c https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.1-pyhd8ed1ab_0.conda#08807a87fa7af10754d46f63b368e016 https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.7.10-h7f98852_0.tar.bz2#e77615e5141cad5a2acaa043d1cf0ca5 @@ -164,4 +168,3 @@ https://conda.anaconda.org/conda-forge/noarch/sphinx_rtd_theme-2.0.0-pyha770c72_ https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-1.0.7-pyhd8ed1ab_0.conda#26acae54b06f178681bfb551760f5dd1 https://conda.anaconda.org/conda-forge/noarch/sphinx-7.2.6-pyhd8ed1ab_0.conda#bbfd1120d1824d2d073bc65935f0e4c0 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_0.conda#e507335cb4ca9cff4c3d0fa9cdab255e - diff --git a/requirements/locks/py39-linux-64.lock b/requirements/locks/py39-linux-64.lock index 1f6c32db..552b59d3 100644 --- a/requirements/locks/py39-linux-64.lock +++ b/requirements/locks/py39-linux-64.lock @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: 027bdf1451c4201a0f40983d191bfd44af0252e03e29d7b25fbef86473eeee1d +# input_hash: 689aca04830a5c80c1e31d43d99cb943e635ac0c6eff75c02a9c51fa2ba2591f @EXPLICIT https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81 https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.2.2-hbcca054_0.conda#2f4327a1cbe7f022401b236e915a5fef @@ -82,11 +82,14 @@ https://conda.anaconda.org/conda-forge/noarch/certifi-2024.2.2-pyhd8ed1ab_0.cond https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda#7f4a9e3fcff3f6356ae99244a014da6a https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda#f3ad426304898027fc619827ff428eca https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.0.0-pyhd8ed1ab_0.conda#753d29fe41bb881e4b9c004f0abf973f +https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2#3faab06a954c2a04039983f2c4a50d99 https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda#5cd86562580f274031ede6aa6aa24441 +https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda#8d652ea2ee8eaee02ed8dc820bc794aa https://conda.anaconda.org/conda-forge/noarch/filelock-3.13.4-pyhd8ed1ab_0.conda#6baa2e7fc09bd2c7c82cb6662d5f1d36 https://conda.anaconda.org/conda-forge/noarch/findlibs-0.0.5-pyhd8ed1ab_0.conda#8f325f63020af6f7acbe2c4cb4c920db https://conda.anaconda.org/conda-forge/noarch/fsspec-2024.3.1-pyhca7485f_0.conda#b7f0662ef2c9d4404f0af9eef5ed2fde https://conda.anaconda.org/conda-forge/noarch/idna-3.6-pyhd8ed1ab_0.conda#1a76f09108576397c41c0b0c5bd84134 +https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda#f800d2da156d08e289b14e87e43c1ae5 https://conda.anaconda.org/conda-forge/noarch/iris-sample-data-2.4.0-pyhd8ed1ab_0.tar.bz2#18ee9c07cf945a33f92caf1ee3d23ad9 https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py39h7633fee_1.conda#c9f74d717e5a2847a9f8b779c54130f2 https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda#51bb7010fc86f70eee639b4bb7a894f5 @@ -96,9 +99,9 @@ https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2# https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.5-py39hd1e30aa_0.conda#9a9a22eb1f83c44953319ee3b027769f https://conda.anaconda.org/conda-forge/noarch/mock-5.1.0-pyhd8ed1ab_0.conda#926c67c0310094cf421ad13f7d3f38e5 https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 -https://conda.anaconda.org/conda-forge/noarch/nose-1.3.7-py_1006.tar.bz2#382019d5f8e9362ef6f60a8d4e7bce8f https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda#7f2e286780f072ed750df46dc2631138 https://conda.anaconda.org/conda-forge/noarch/packaging-24.0-pyhd8ed1ab_0.conda#248f521b64ce055e7feae3105e7abeb8 +https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda#139e9feb65187e916162917bb2484976 https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda#844d9eb3b43095b031874477f7d70088 https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.2-pyhd8ed1ab_0.conda#b9a4dacf97241704529131a0dfc0494f https://conda.anaconda.org/conda-forge/noarch/pyshp-2.3.1-pyhd8ed1ab_0.tar.bz2#92a889dc236a5197612bc85bee6d7174 @@ -107,6 +110,7 @@ https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.4.1-py39hd1e30aa https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py39hd1e30aa_1.conda#37218233bcdc310e4fde6453bc1b40d8 https://conda.anaconda.org/conda-forge/noarch/setuptools-69.5.1-pyhd8ed1ab_0.conda#7462280d81f639363e6e63c81276bd9e https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2 +https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5844808ffab9ebdb694585b50ba02a96 https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.1-pyhd8ed1ab_0.conda#2fcb582444635e2c402e8569bb94e039 https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.1.0-py39hd1e30aa_0.conda#1da984bbb6e765743e13388ba7b7b2c8 https://conda.anaconda.org/conda-forge/noarch/wheel-0.43.0-pyhd8ed1ab_1.conda#0b5293a157c2b5cd513dd1b03d8d3aae @@ -126,6 +130,7 @@ https://conda.anaconda.org/conda-forge/noarch/partd-1.4.1-pyhd8ed1ab_0.conda#acf https://conda.anaconda.org/conda-forge/linux-64/pillow-10.3.0-py39h90c7501_0.conda#1e3b6af9592be71ce19f0a6aae05d97b https://conda.anaconda.org/conda-forge/noarch/pip-24.0-pyhd8ed1ab_0.conda#f586ac1e56c8638b64f9c8122a7b8a67 https://conda.anaconda.org/conda-forge/linux-64/proj-9.3.1-h1d62c97_0.conda#44ec51d0857d9be26158bb85caa74fdb +https://conda.anaconda.org/conda-forge/noarch/pytest-8.1.1-pyhd8ed1ab_0.conda#94ff09cdedcb7b17e9cd5097ee2cfcff https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda#2cf4264fffb9e6eff6031c5b6884d61c https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.1-pyhd8ed1ab_0.conda#08807a87fa7af10754d46f63b368e016 https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.7.10-h7f98852_0.tar.bz2#e77615e5141cad5a2acaa043d1cf0ca5 @@ -150,4 +155,3 @@ https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.5-nompi_py39h4282601 https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.23.0-py39hddac248_0.conda#aa02350ccb542c83272f9cb7e4dfe15e https://conda.anaconda.org/conda-forge/linux-64/python-eccodes-1.7.0-py39h44dd56e_1.conda#629e8d066a330f729d0085d86681fd01 https://conda.anaconda.org/conda-forge/noarch/iris-3.8.1-pyha770c72_0.conda#b08a116ef1607e7e960a4caa902e3a90 - diff --git a/requirements/py310.yml b/requirements/py310.yml index ac092a9c..bcefe256 100644 --- a/requirements/py310.yml +++ b/requirements/py310.yml @@ -22,5 +22,6 @@ dependencies: - mock - filelock - requests - - nose - iris-sample-data + - pytest + diff --git a/requirements/py311.yml b/requirements/py311.yml index c879b257..f4a65fba 100644 --- a/requirements/py311.yml +++ b/requirements/py311.yml @@ -22,8 +22,8 @@ dependencies: - mock - filelock - requests - - nose - iris-sample-data + - pytest # Documentation dependencies. - sphinx diff --git a/requirements/py39.yml b/requirements/py39.yml index d6c6a55b..078ae302 100644 --- a/requirements/py39.yml +++ b/requirements/py39.yml @@ -22,5 +22,6 @@ dependencies: - mock - filelock - requests - - nose - iris-sample-data + - pytest + diff --git a/requirements/test.txt b/requirements/test.txt index 1d735f6a..3a1d4d2e 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -4,4 +4,4 @@ mock filelock requests iris-sample-data - +pytest