diff --git a/.flake8 b/.flake8 new file mode 100644 index 00000000000..4f67c422f84 --- /dev/null +++ b/.flake8 @@ -0,0 +1,49 @@ +[flake8] +# References: +# https://flake8.readthedocs.io/en/latest/user/configuration.html +# https://flake8.readthedocs.io/en/latest/user/error-codes.html +# https://pycodestyle.readthedocs.io/en/latest/intro.html#error-codes + +max-line-length = 80 +max-complexity = 50 +select = C,E,F,W,B,B950 +ignore = + # E203: whitespace before ':' + E203, + # E226: missing whitespace around arithmetic operator + E226, + # E231: missing whitespace after ',', ';', or ':' + E231, + # E402: module level imports on one line + E402, + # E501: line too long + E501, + # E731: do not assign a lambda expression, use a def + E731, + # W503: line break before binary operator + W503, + # W504: line break after binary operator + W504, +exclude = + # + # ignore the following directories + # + .eggs, + build, + docs/src/sphinxext/*, + tools/*, + benchmarks/*, + # + # ignore auto-generated files + # + _ff_cross_refrences.py, + std_names.py, + um_cf_map.py, + # + # ignore third-party files + # + gitwash_dumper.py, + # + # convenience imports + # + lib/iris/common/__init__.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a6c6edfd902..fd05b03b687 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -47,7 +47,6 @@ repos: hooks: - id: flake8 types: [file, python] - args: [--config=./setup.cfg] - repo: https://github.com/pycqa/isort rev: 5.12.0 diff --git a/lib/iris/tests/test_coding_standards.py b/lib/iris/tests/test_coding_standards.py index e3786f5cd5e..cebe4ad360f 100644 --- a/lib/iris/tests/test_coding_standards.py +++ b/lib/iris/tests/test_coding_standards.py @@ -79,7 +79,7 @@ def test_python_versions(): benchmarks_dir = root_dir / "benchmarks" # Places that are checked: - setup_cfg_file = root_dir / "setup.cfg" + pyproject_toml_file = root_dir / "pyproject.toml" requirements_dir = root_dir / "requirements" nox_file = root_dir / "noxfile.py" ci_wheels_file = workflows_dir / "ci-wheels.yml" @@ -89,10 +89,10 @@ def test_python_versions(): text_searches: List[Tuple[Path, str]] = [ ( - setup_cfg_file, + pyproject_toml_file, "\n ".join( [ - "Programming Language :: Python :: " + ver + f'"Programming Language :: Python :: {ver}",' for ver in all_supported ] ), diff --git a/pyproject.toml b/pyproject.toml index a97f47d0b7f..d272bb05893 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,6 +8,74 @@ requires = [ # Defined by PEP 517 build-backend = "setuptools.build_meta" +[project] +authors = [ + {name = "Iris Contributors", email = "scitools.pub@gmail.com"} +] +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)", + "Operating System :: MacOS", + "Operating System :: POSIX", + "Operating System :: POSIX :: Linux", + "Operating System :: Unix", + "Programming Language :: Python", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: Implementation :: CPython", + "Topic :: Scientific/Engineering", + "Topic :: Scientific/Engineering :: Atmospheric Science", + "Topic :: Scientific/Engineering :: Visualization", +] +dynamic = [ + "dependencies", + "optional-dependencies", + "readme", + "version", +] +description = "A powerful, format-agnostic, community-driven Python package for analysing and visualising Earth science data" +keywords = [ + "cf-metadata", + "data-analysis", + "earth-science", + "grib", + "netcdf", + "meteorology", + "oceanography", + "space-weather", + "ugrid", + "visualisation", +] +license = {text = "LGPL-3.0-or-later"} +name = "scitools-iris" +requires-python = ">=3.8" + +[project.urls] +Code = "https://github.com/SciTools/iris" +Discussions = "https://github.com/SciTools/iris/discussions" +Documentation = "https://scitools-iris.readthedocs.io/en/stable/" +Issues = "https://github.com/SciTools/iris/issues" + +[tool.setuptools] +license-files = ["COPYING", "COPYING.LESSER"] +zip-safe = false + +[tool.setuptools.dynamic] +dependencies = {file = "requirements/core.txt"} +readme = {file = "README.md", content-type = "text/markdown"} + +[tool.setuptools.dynamic.optional-dependencies] +dev = {file = "requirements/optional-dev.txt"} +docs = {file = "requirements/optional-docs.txt"} +test = {file = "requirements/optional-test.txt"} + +[tool.setuptools.packages.find] +include = ["iris*"] +where = ["lib"] + [tool.setuptools_scm] write_to = "lib/iris/_version.py" local_scheme = "dirty-tag" diff --git a/requirements/core.txt b/requirements/core.txt new file mode 100644 index 00000000000..6dcd48ee548 --- /dev/null +++ b/requirements/core.txt @@ -0,0 +1,10 @@ +cartopy>=0.21 +cf-units>=3.1 +cftime>=1.5.0 +dask[array]>=2022.9.0 +matplotlib>=3.5 +netcdf4 +numpy>=1.19 +scipy +shapely!=1.8.3 +xxhash \ No newline at end of file diff --git a/requirements/optional-dev.txt b/requirements/optional-dev.txt new file mode 100644 index 00000000000..61a7f43a97b --- /dev/null +++ b/requirements/optional-dev.txt @@ -0,0 +1,4 @@ +nc-time-axis>=1.4 +pandas +pre-commit +stratify \ No newline at end of file diff --git a/requirements/optional-docs.txt b/requirements/optional-docs.txt new file mode 100644 index 00000000000..9a3403540eb --- /dev/null +++ b/requirements/optional-docs.txt @@ -0,0 +1,6 @@ +sphinx<=5.3 +sphinx-copybutton +sphinx-gallery>=0.11.0 +sphinxcontrib-napoleon +sphinx-design +pydata-sphinx-theme>=0.13.0 \ No newline at end of file diff --git a/requirements/optional-test.txt b/requirements/optional-test.txt new file mode 100644 index 00000000000..a3ade1f22b6 --- /dev/null +++ b/requirements/optional-test.txt @@ -0,0 +1,5 @@ +filelock +imagehash>=4.0 +requests +pytest +pytest-xdist \ No newline at end of file diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index f1547634ae2..00000000000 --- a/setup.cfg +++ /dev/null @@ -1,141 +0,0 @@ -[metadata] -author = SciTools Developers -author_email = scitools.pub@gmail.com -classifiers = - Development Status :: 5 - Production/Stable - Intended Audience :: Science/Research - License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+) - Operating System :: MacOS - Operating System :: POSIX - Operating System :: POSIX :: Linux - Operating System :: Unix - Programming Language :: Python - Programming Language :: Python :: 3 :: Only - Programming Language :: Python :: 3.8 - Programming Language :: Python :: 3.9 - Programming Language :: Python :: 3.10 - Programming Language :: Python :: Implementation :: CPython - Topic :: Scientific/Engineering - Topic :: Scientific/Engineering :: Atmospheric Science - Topic :: Scientific/Engineering :: Visualization -description = A powerful, format-agnostic, community-driven Python package for analysing and visualising Earth science data -download_url = https://github.com/SciTools/iris -keywords = - cf-metadata - data-analysis - earth-science - grib - netcdf - meteorology - oceanography - space-weather - ugrid - visualisation -license = LGPL-3.0-or-later -license_files = COPYING.LESSER -long_description = file: README.md -long_description_content_type = text/markdown -name = scitools-iris -project_urls = - Code = https://github.com/SciTools/iris - Discussions = https://github.com/SciTools/iris/discussions - Documentation = https://scitools-iris.readthedocs.io/en/stable/ - Issues = https://github.com/SciTools/iris/issues -url = https://github.com/SciTools/iris -version = attr: iris.__version__ - -[options] -include_package_data = True -install_requires = - cartopy>=0.21 - cf-units>=3.1 - cftime>=1.5.0 - dask[array]>=2022.9.0 - matplotlib>=3.5 - netcdf4 - numpy>=1.19 - scipy - shapely!=1.8.3 - xxhash -packages = find_namespace: -package_dir = - =lib -python_requires = - >=3.8 -zip_safe = False - -[options.packages.find] -where = lib - -[options.extras_require] -docs = - sphinx<=5.3 - sphinx-copybutton - sphinx-gallery>=0.11.0 - sphinxcontrib-napoleon - sphinx-design - pydata-sphinx-theme>=0.13.0 -test = - filelock - imagehash>=4.0 - pre-commit - requests - pytest - pytest-xdist -all = - mo_pack - nc-time-axis>=1.4 - pandas - stratify - %(docs)s - %(test)s - -[flake8] -# References: -# https://flake8.readthedocs.io/en/latest/user/configuration.html -# https://flake8.readthedocs.io/en/latest/user/error-codes.html -# https://pycodestyle.readthedocs.io/en/latest/intro.html#error-codes - -max-line-length = 80 -max-complexity = 50 -select = C,E,F,W,B,B950 -ignore = - # E203: whitespace before ':' - E203, - # E226: missing whitespace around arithmetic operator - E226, - # E231: missing whitespace after ',', ';', or ':' - E231, - # E402: module level imports on one line - E402, - # E501: line too long - E501, - # E731: do not assign a lambda expression, use a def - E731, - # W503: line break before binary operator - W503, - # W504: line break after binary operator - W504, -exclude = - # - # ignore the following directories - # - .eggs, - build, - docs/src/sphinxext/*, - tools/*, - benchmarks/*, - # - # ignore auto-generated files - # - _ff_cross_refrences.py, - std_names.py, - um_cf_map.py, - # - # ignore third-party files - # - gitwash_dumper.py, - # - # convenience imports - # - lib/iris/common/__init__.py