Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
ba09729
unpin iris and test with Python 3.14
valeriupredoi Jan 5, 2026
ca34003
run test GHA
valeriupredoi Jan 5, 2026
a3e9b03
unpin iris
valeriupredoi Jan 5, 2026
1843772
comment out pys2index
valeriupredoi Jan 5, 2026
39ddeb8
Merge branch 'main' into python3.14
valeriupredoi Jan 6, 2026
30f1fe7
Merge branch 'main' into python3.14
valeriupredoi Jan 19, 2026
56184fd
restore pys2index in env files
valeriupredoi Jan 22, 2026
1affdab
Merge branch 'main' into python3.14
valeriupredoi Jan 22, 2026
cca7ba8
Merge branch 'main' into python3.14
valeriupredoi Feb 3, 2026
89f10f6
Merge branch 'main' into python3.14
valeriupredoi Feb 11, 2026
36eb9cd
Merge branch 'main' into python3.14
valeriupredoi Feb 23, 2026
97ddb09
Merge branch 'main' into python3.14
valeriupredoi Feb 25, 2026
9b41126
pin numpy
valeriupredoi Mar 2, 2026
b4e37d8
Revert "pin numpy"
valeriupredoi Mar 2, 2026
1a578a2
Merge branch 'main' of https://github.com/ESMValGroup/ESMValTool
valeriupredoi Mar 4, 2026
fb28bae
Merge branch 'main' into python3.14
valeriupredoi Mar 5, 2026
f594f61
Merge branch 'main' of https://github.com/ESMValGroup/ESMValTool
valeriupredoi Mar 11, 2026
30af678
Merge branch 'main' into python3.14
valeriupredoi Mar 12, 2026
e0fae3f
try see if pys2index is the issue
valeriupredoi Mar 12, 2026
db3f495
reinstate pys2index
valeriupredoi Mar 12, 2026
da96f60
Merge branch 'main' of https://github.com/ESMValGroup/ESMValTool
valeriupredoi Mar 19, 2026
ebb27c0
Merge branch 'main' into python3.14
valeriupredoi Mar 20, 2026
59af905
Merge branch 'main' into python3.14
valeriupredoi Mar 26, 2026
301ac70
Merge branch 'main' into python3.14
valeriupredoi Apr 10, 2026
b68e570
Merge branch 'main' into python3.14
valeriupredoi Apr 14, 2026
70bfcac
Merge branch 'main' of https://github.com/ESMValGroup/ESMValTool
valeriupredoi Apr 14, 2026
0efe699
Merge branch 'main' of https://github.com/ESMValGroup/ESMValTool
valeriupredoi Apr 16, 2026
82e4ac2
Merge branch 'main' into python3.14
valeriupredoi Apr 23, 2026
41cd01f
Merge branch 'main' of https://github.com/ESMValGroup/ESMValTool
valeriupredoi May 1, 2026
67bcdbf
Merge branch 'main' of https://github.com/ESMValGroup/ESMValTool
valeriupredoi May 22, 2026
0e04bbc
Merge branch 'main' into python3.14
valeriupredoi May 22, 2026
1b03658
restore GHA to main branch standards
valeriupredoi May 22, 2026
3f8c260
enable Python 3.14
valeriupredoi May 22, 2026
6e991fc
run GHA test with 3.14
valeriupredoi May 22, 2026
00074d7
actually run test GHA
valeriupredoi May 22, 2026
a620619
ah typo
valeriupredoi May 22, 2026
473762c
update pixi lock
valeriupredoi May 22, 2026
b6bcc63
Merge branch 'main' of https://github.com/ESMValGroup/ESMValTool
valeriupredoi May 28, 2026
d4af838
Merge branch 'main' into python3.14
valeriupredoi May 28, 2026
12e9342
skip running test on cmorizers that need pys2index
valeriupredoi May 28, 2026
59089ea
ruff it
valeriupredoi May 28, 2026
3e29329
add note for not working cmorizers
valeriupredoi May 28, 2026
5792e65
unrun gha
valeriupredoi May 29, 2026
416f169
add 314 run gha
valeriupredoi May 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/run-tests-monitor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ jobs:
environment:
- test-py312
- test-py313
- test-py314
name: ${{ matrix.os }} ${{ matrix.environment }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ jobs:
environment:
- test-py312
- test-py313
- test-py314
name: ${{ matrix.os }} ${{ matrix.environment }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
Expand Down
4 changes: 4 additions & 0 deletions esmvaltool/cmorizers/data/formatters/datasets/aeronet.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@
Download and processing instructions
Download the following file:
https://aeronet.gsfc.nasa.gov/data_push/V3/AOD/AOD_Level20_Monthly_V3.tar.gz

NOTE this formatter is currently not working for Python 3.14 since pys2index is
not supported under Python 3.14! You will have to use Python<3.14, and install pys2index
from conda-forge.
"""

import logging
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@
https://gml.noaa.gov/aftp/data/trace_gases/ch4/flask/surface/ch4_surface-flask_ccgg_text.tar.gz
https://gml.noaa.gov/aftp/data/trace_gases/co2/flask/surface/co2_surface-flask_ccgg_text.tar.gz
https://gml.noaa.gov/aftp/data/trace_gases/n2o/flask/surface/n2o_surface-flask_ccgg_text.tar.gz

NOTE this formatter is currently not working for Python 3.14 since pys2index is
not supported under Python 3.14! You will have to use Python<3.14, and install pys2index
from conda-forge.
"""

import logging
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@
Download and processing instructions
Download the following file:
https://gml.noaa.gov/aftp/data/trace_gases/ch4/flask/surface/ch4_surface-flask_ccgg_text.tar.gz

NOTE this formatter is currently not working for Python 3.14 since pys2index is
not supported under Python 3.14! You will have to use Python<3.14, and install pys2index
from conda-forge.
"""

from esmvaltool.cmorizers.data.formatters.datasets import (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@
Download and processing instructions
Download the following file:
https://gml.noaa.gov/aftp/data/trace_gases/co2/flask/surface/co2_surface-flask_ccgg_text.tar.gz

NOTE this formatter is currently not working for Python 3.14 since pys2index is
not supported under Python 3.14! You will have to use Python<3.14, and install pys2index
from conda-forge.
"""

from esmvaltool.cmorizers.data.formatters.datasets import (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@
Download and processing instructions
Download the following file:
https://gml.noaa.gov/aftp/data/trace_gases/n2o/flask/surface/n2o_surface-flask_ccgg_text.tar.gz

NOTE this formatter is currently not working for Python 3.14 since pys2index is
not supported under Python 3.14! You will have to use Python<3.14, and install pys2index
from conda-forge.
"""

from esmvaltool.cmorizers.data.formatters.datasets import (
Expand Down
5,352 changes: 4,734 additions & 618 deletions pixi.lock

Large diffs are not rendered by default.

14 changes: 10 additions & 4 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ classifiers = [
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"Topic :: Scientific/Engineering",
"Topic :: Scientific/Engineering :: Atmospheric Science",
"Topic :: Scientific/Engineering :: GIS",
Expand Down Expand Up @@ -59,7 +60,7 @@ dependencies = [
"pandas",
"progressbar2",
"pyproj>=2.1",
"pys2index",
# "pys2index",
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could we put this dependency in a feature and add that feature to the Python 3.12 and 3.13 envs only? Like that it will still work if you use a development installation with one of those.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mhm that's a good idea!

"python-dateutil",
"pyyaml",
"rasterio>=1.3.10",
Expand All @@ -81,7 +82,7 @@ description = "A community tool for pre-processing data from Earth system models
license = "Apache-2.0"
license-files = ["LICENSE", "NOTICE"]
name = "ESMValTool"
requires-python = ">=3.12,<3.14"
requires-python = ">=3.12,<3.15"

[project.entry-points."console_scripts"]
nclcodestyle = "esmvaltool.utils.nclcodestyle.nclcodestyle:_main"
Expand Down Expand Up @@ -244,7 +245,7 @@ convention = "numpy"
"progressbar2" = "*"
"prov" = "*"
"pyproj" = ">=2.1"
"pys2index" = "*"
# "pys2index" = "*"
"python" = ">=3.12"
"python-cdo" = "*"
"python-dateutil" = "*"
Expand Down Expand Up @@ -296,7 +297,8 @@ esmvaltool = { features = ["esmvalcore", "ncl", "r"], solve-group = "esmvaltool"
esmvalcore-dev = { features = ["esmvalcore-dev", "dev", "doc", "test"], solve-group = "esmvalcore-dev" }
# Environments for running tests with specific Python versions.
test-py312 = { features = ["py312", "esmvalcore", "test"], solve-group = "py312" }
test-py313 = { features = ["py313", "esmvalcore", "test"], solve-group = "default" }
test-py313 = { features = ["py313", "esmvalcore", "test"], solve-group = "py313" }
test-py314 = { features = ["py314", "esmvalcore", "test"], solve-group = "default" }

# Default ESMValCore version.
[tool.pixi.feature.esmvalcore.dependencies]
Expand Down Expand Up @@ -342,6 +344,10 @@ test-py313 = { features = ["py313", "esmvalcore", "test"], solve-group = "defaul
[tool.pixi.feature.py313.dependencies]
"python" = "3.13.*"

# Feature for running tests with Python 3.14.
[tool.pixi.feature.py314.dependencies]
"python" = "3.14.*"

# Feature for running diagnostics that also require NCL.
[tool.pixi.feature.ncl]
platforms = ["linux-64"]
Expand Down
18 changes: 16 additions & 2 deletions tests/unit/cmorizers/test_cmorization_interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,22 @@ def test_formatters_have_required_interface():

error = False

for formatter in os.listdir(formatters_folder):
if not formatter.endswith(".py") or formatter == "__init__.py":
# aeronet.py and noaa_gml_surface_flask*.py need pys2index
do_not_run_formatters = [
"__init__.py",
"aeronet.py",
"noaa_gml_surface_flask.py",
"noaa_gml_surface_flask_ch4.py",
"noaa_gml_surface_flask_co2.py",
"noaa_gml_surface_flask_n2o.py",
]
all_formatters = os.listdir(formatters_folder)
to_run_formatters = [
f for f in all_formatters if f not in do_not_run_formatters
]

for formatter in to_run_formatters:
if not formatter.endswith(".py"):
continue
module = formatter[:-3]
member = importlib.import_module(
Expand Down