Skip to content

Commit ee9fe26

Browse files
committed
Require Python 3.12
Sphinx and various other packages have started dropping support for Python 3.10, so require Python 3.12 and upgrade the source code to use Python 3.12 features where possible. The most noticeable change for OWS is that the override decorator is part of typing, and the UTC alias declared in datetime.
1 parent f001374 commit ee9fe26

29 files changed

Lines changed: 136 additions & 1203 deletions

.github/workflows/lint.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ jobs:
3434
strategy:
3535
fail-fast: false
3636
matrix:
37-
python-version: ["3.10"]
37+
python-version: ["3.12"]
3838
lintcommand:
3939
- "pylint -j 2 datacube_ows --disable=C,R,W,E1136"
4040
- "ruff check --output-format=github"

datacube_ows/config_utils.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,14 @@
1111
from collections.abc import Callable, Iterable, Sequence
1212
from importlib import import_module
1313
from itertools import chain
14-
from typing import Any, Optional, TypeAlias, cast
14+
from typing import Any, Optional, TypeAlias, cast, override
1515
from urllib.parse import urlparse
1616

1717
import fsspec
1818
from babel.messages import Catalog, Message
1919
from datacube.model import Product
2020
from datacube.utils.masking import make_mask
2121
from flask_babel import gettext as _
22-
from typing_extensions import override
2322
from xarray import DataArray
2423

2524
from datacube_ows.config_toolkit import deepinherit

datacube_ows/index/postgis/api.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import datetime
88
from collections.abc import Iterable
99
from threading import Lock
10-
from typing import Any, Literal
10+
from typing import Any, Literal, override
1111
from uuid import UUID
1212

1313
import click
@@ -16,7 +16,6 @@
1616
from datacube.model import Dataset, Product, Range
1717
from odc.geo import CRS, Geometry
1818
from sqlalchemy import text
19-
from typing_extensions import override
2019

2120
from datacube_ows.index.api import (
2221
AbortRun,
@@ -63,7 +62,7 @@ def _check_perms(self, dc: Datacube, group: Literal["manage", "admin"]) -> None:
6362
if get_driver_name(dc.index) == "psycopg":
6463
from psycopg.errors import ProgrammingError
6564
else:
66-
from psycopg2.errors import ProgrammingError
65+
from psycopg2.errors import ProgrammingError # type:ignore[no-redef]
6766
try:
6867
with get_sqlconn(dc) as conn:
6968
conn.execute(text(f"set role odc_{group}"))
@@ -142,10 +141,7 @@ def normalise_to_dtr(
142141
tmax = st + datetime.timedelta(seconds=1)
143142
elif isinstance(t, datetime.date):
144143
st = datetime.datetime(
145-
unnorm.year,
146-
unnorm.month,
147-
unnorm.day,
148-
tzinfo=datetime.timezone.utc,
144+
unnorm.year, unnorm.month, unnorm.day, tzinfo=datetime.UTC
149145
)
150146
tmax = st + datetime.timedelta(days=1)
151147
else:

datacube_ows/index/postgis/product_ranges.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import logging
88
import math
99
from collections.abc import Callable
10-
from datetime import date, datetime, timezone
10+
from datetime import UTC, date, datetime
1111

1212
import click
1313
import datacube
@@ -80,7 +80,7 @@ def create_range_entry(
8080
if get_driver_name(layer.dc.index) == "psycopg":
8181
from psycopg.types.json import Json
8282
else:
83-
from psycopg2.extras import Json
83+
from psycopg2.extras import Json # type:ignore[no-redef]
8484
# insert empty row if one does not already exist
8585
conn.execute(
8686
text("""
@@ -94,7 +94,7 @@ def create_range_entry(
9494
"p_layer": layer.name,
9595
"empty": Json(""),
9696
"meta": Json(meta.as_json()),
97-
"now": datetime.now(tz=timezone.utc),
97+
"now": datetime.now(tz=UTC),
9898
},
9999
)
100100

@@ -125,7 +125,7 @@ def create_range_entry(
125125
dt1, dt2, ll, lu = result
126126
lon = (ll + lu) / 2
127127
dt = dt1 + (dt2 - dt1) / 2
128-
dt = dt.astimezone(timezone.utc)
128+
dt = dt.astimezone(UTC)
129129

130130
solar_day = datacube.api.query._convert_to_solar_time(
131131
dt, lon

datacube_ows/index/postgres/api.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,14 @@
66

77
from collections.abc import Iterable
88
from threading import Lock
9-
from typing import Literal, cast
9+
from typing import Literal, cast, override
1010
from uuid import UUID
1111

1212
import click
1313
from datacube import Datacube
1414
from datacube.model import Dataset, Product
1515
from odc.geo import CRS, Geometry
1616
from sqlalchemy import text
17-
from typing_extensions import override
1817

1918
from datacube_ows.index.api import (
2019
InsufficientDbPrivileges,
@@ -60,7 +59,7 @@ def _check_perms(self, dc: Datacube, group: Literal["manage", "admin"]) -> None:
6059
if get_driver_name(dc.index) == "psycopg":
6160
from psycopg.errors import ProgrammingError
6261
else:
63-
from psycopg2.errors import ProgrammingError
62+
from psycopg2.errors import ProgrammingError # type:ignore[no-redef]
6463
try:
6564
with get_sqlconn(dc) as conn:
6665
conn.execute(text(f"set role agdc_{group}"))

datacube_ows/index/postgres/mv_index.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,7 @@ def mv_search(
129129
)
130130
)
131131
elif isinstance(t, datetime.date):
132-
st = datetime.datetime(
133-
t.year, t.month, t.day, tzinfo=datetime.timezone.utc
134-
)
132+
st = datetime.datetime(t.year, t.month, t.day, tzinfo=datetime.UTC)
135133
tmax = st + datetime.timedelta(days=1)
136134
or_clauses.append(
137135
and_(

datacube_ows/index/postgres/product_ranges.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import logging
88
import math
99
from collections.abc import Callable
10-
from datetime import date, datetime, timezone
10+
from datetime import UTC, date, datetime
1111
from typing import cast
1212

1313
import datacube
@@ -84,7 +84,7 @@ def create_range_entry(
8484
if get_driver_name(layer.dc.index) == "psycopg":
8585
from psycopg.types.json import Json
8686
else:
87-
from psycopg2.extras import Json
87+
from psycopg2.extras import Json # type:ignore[no-redef]
8888
# insert empty row if one does not already exist
8989
conn.execute(
9090
text("""
@@ -98,7 +98,7 @@ def create_range_entry(
9898
"p_layer": layer.name,
9999
"empty": Json(""),
100100
"meta": Json(meta.as_json()),
101-
"now": datetime.now(tz=timezone.utc),
101+
"now": datetime.now(tz=UTC),
102102
},
103103
)
104104

@@ -144,7 +144,7 @@ def create_range_entry(
144144
for result in results:
145145
dt1, dt2, lon = result
146146
dt = dt1 + (dt2 - dt1) / 2
147-
dt = dt.astimezone(timezone.utc)
147+
dt = dt.astimezone(UTC)
148148

149149
solar_day = datacube.api.query._convert_to_solar_time(
150150
dt, lon

datacube_ows/index/sql.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,10 @@ def run_sql_statement(
109109
if get_driver_name(idx) == "psycopg":
110110
from psycopg.errors import DuplicateObject, InsufficientPrivilege
111111
else:
112-
from psycopg2.errors import DuplicateObject, InsufficientPrivilege
112+
from psycopg2.errors import ( # type:ignore[no-redef]
113+
DuplicateObject,
114+
InsufficientPrivilege,
115+
)
113116

114117
try:
115118
result = conn.execute(sqlalchemy.text(sql))

datacube_ows/loading.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import logging
99
from collections import OrderedDict
1010
from collections.abc import Iterable, Mapping
11-
from typing import cast
11+
from typing import cast, override
1212
from uuid import UUID
1313

1414
import datacube
@@ -20,7 +20,6 @@
2020
from odc.geo.geobox import GeoBox
2121
from odc.geo.geom import Geometry
2222
from odc.geo.warp import Resampling
23-
from typing_extensions import override
2423

2524
from datacube_ows.ogc_exceptions import WMSException
2625
from datacube_ows.ows_configuration import OWSNamedLayer

datacube_ows/ogc_exceptions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
# SPDX-License-Identifier: Apache-2.0
66

77
import traceback as tb
8+
from typing import override
89

910
from flask import render_template
1011
from ows.common.types import OWSException, Version
1112
from ows.common.v20.encoders import xml_encode_exception_report
12-
from typing_extensions import override
1313

1414
from datacube_ows.http_utils import resp_headers
1515

0 commit comments

Comments
 (0)