Skip to content

Commit

Permalink
135 upgrade python and pangeo (#136)
Browse files Browse the repository at this point in the history
* update to Pangeo 2024.03.13 and Python 3.11

* switch to StrEnum and add backwards fix

* make deps less strict

* update release stuff

* update teehrhub version

* Merge branch 'main' into 135-upgrade-python-and-pangeo

* update version to 0.3.13
  • Loading branch information
mgdenno authored Mar 22, 2024
1 parent 8340b5c commit 33137f0
Show file tree
Hide file tree
Showing 15 changed files with 802 additions and 692 deletions.
6 changes: 2 additions & 4 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Build TEEHR
FROM python:3.10 AS builder
FROM python:3.11 AS builder

WORKDIR /teehr

Expand All @@ -12,9 +12,7 @@ RUN TEEHR_VERSION=$(cat /teehr/version.txt) && \
mv dist/teehr-${TEEHR_VERSION}.tar.gz dist/teehr-build.tar.gz

# Install TEEHR in the Pangeo Image
# https://hub.docker.com/r/pangeo/pangeo-notebook/tags
# Subsequent images use python=3.11
FROM pangeo/pangeo-notebook:2023.09.11
FROM pangeo/pangeo-notebook:2024.03.13

USER root
ENV DEBIAN_FRONTEND=noninteractive
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ $ poetry add git+https://github.com/RTIInternational/teehr.git#[BRANCH TAG]

Use Docker
```bash
$ docker build -t teehr:v0.3.12 .
$ docker run -it --rm --volume $HOME:$HOME -p 8888:8888 teehr:v0.3.12 jupyter lab --ip 0.0.0.0 $HOME
$ docker build -t teehr:v0.3.13 .
$ docker run -it --rm --volume $HOME:$HOME -p 8888:8888 teehr:v0.3.13 jupyter lab --ip 0.0.0.0 $HOME
```

## Examples
Expand Down
17 changes: 16 additions & 1 deletion docs/sphinx/changelog/index.rst
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Release Notes
=============

0.3.12 - 2024-03-21
0.3.13 - 2024-03-22
--------------------

Added
Expand All @@ -10,7 +10,22 @@ Added

Changed
^^^^^^^
* Updated from Enum to StrEnum and added a fix for backwards incompatibility described
here: https://tomwojcik.com/posts/2023-01-02/python-311-str-enum-breaking-change. This
is required to support both python 3.10 and python 3.11.
* Updated TEEHR-HUB to Python 3.11 and `pangeo/pangeo-notebook:2024.03.13`
* Made all packages that use YYYY.MM.DD versioning `>=` instead of `^` in `pyproject.toml`


0.3.12 - 2024-03-22
--------------------

Added
^^^^^
* None

Changed
^^^^^^^
* Changed the chunking method for USGS and NWM retrospective data loading to iterate over pandas ``period_range``
rather than using ``groupby`` or ``date_range`` to fix a bug when fetching data over multiple years.

Expand Down
1,255 changes: 630 additions & 625 deletions poetry.lock

Large diffs are not rendered by default.

10 changes: 5 additions & 5 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "teehr"
version = "0.3.12"
version = "0.3.13"
description = "Tools for Exploratory Evaluation in Hydrologic Research"
authors = [
"RTI International",
Expand All @@ -18,12 +18,12 @@ duckdb = "^0.9.2"
pydantic = "^2.4.2"
hydrotools-metrics = "^1.3.3"
hydrotools-nwis-client = "^3.3.1"
dask = "^2023.8.1"
fsspec = "^2023.10.0"
dask = ">=2023.8.1"
fsspec = ">=2023.10.0"
ujson = "^5.8.0"
kerchunk = "^0.2.2"
gcsfs = "^2023.10.0"
s3fs = "^2023.10.0"
gcsfs = ">=2023.10.0"
s3fs = ">=2023.10.0"
zarr = "^2.16.1"
rioxarray = "^0.15.0"
rasterio = "^1.3.9"
Expand Down
30 changes: 19 additions & 11 deletions src/teehr/models/loading/nwm22_grid.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,20 @@
"""Module describing NWM v2.2 grid configuration variables."""
from enum import Enum
try:
# breaking change introduced in python 3.11
from enum import StrEnum
except ImportError: # pragma: no cover
from enum import Enum # pragma: no cover

class StrEnum(str, Enum): # pragma: no cover
pass # pragma: no cover

from typing import Optional

from pydantic import BaseModel


# GRID DATA VARIABLES ENUMS
class LandAssimVariablesEnum(str, Enum):
class LandAssimVariablesEnum(StrEnum):
"""LandAssimVariablesEnum."""
ACCET = "ACCET"
ACSNOM = "ACSNOM"
Expand All @@ -25,7 +33,7 @@ class LandAssimVariablesEnum(str, Enum):
SOIL_T = "SOIL_T"


class LandShortVariablesEnum(str, Enum):
class LandShortVariablesEnum(StrEnum):
"""LandShortVariablesEnum."""
ACCET = "ACCET"
SNOWT_AVG = "SNOWT_AVG"
Expand All @@ -35,7 +43,7 @@ class LandShortVariablesEnum(str, Enum):
SNEQV = "SNEQV"


class LandMediumVariablesEnum(str, Enum):
class LandMediumVariablesEnum(StrEnum):
"""LandMediumVariablesEnum."""
FSA = "FSA"
FIRA = "FIRA"
Expand All @@ -62,7 +70,7 @@ class LandMediumVariablesEnum(str, Enum):
SNOWT_AVG = "SNOWT_AVG"


class LandLongVariablesEnum(str, Enum):
class LandLongVariablesEnum(StrEnum):
"""LandLongVariablesEnum."""
UGDRNOFF = "UGDRNOFF"
SFCRNOFF = "SFCRNOFF"
Expand All @@ -74,7 +82,7 @@ class LandLongVariablesEnum(str, Enum):
SOILSAT = "SOILSAT"


class ForcingVariablesEnum(str, Enum):
class ForcingVariablesEnum(StrEnum):
"""ForcingVariablesEnum."""
U2D = "U2D"
V2D = "V2D"
Expand All @@ -87,12 +95,12 @@ class ForcingVariablesEnum(str, Enum):


# OUTPUT TYPE ENUMS
class ShortAndAnalysisOutputEnum(str, Enum):
class ShortAndAnalysisOutputEnum(StrEnum):
"""ShortAndAnalysisOutputEnum."""
land = "land"


class MediumOutputEnum(str, Enum):
class MediumOutputEnum(StrEnum):
"""MediumOutputEnum."""
land_1 = "land_1"
land_2 = "land_2"
Expand All @@ -103,15 +111,15 @@ class MediumOutputEnum(str, Enum):
land_7 = "land_7"


class LongOutputEnum(str, Enum):
class LongOutputEnum(StrEnum):
"""LongOutputEnum."""
land_1 = "land_1"
land_2 = "land_2"
land_3 = "land_3"
land_4 = "land_4"


class ForcingOutputEnum(str, Enum):
class ForcingOutputEnum(StrEnum):
"""ForcingOutputEnum."""
forcing = "forcing"

Expand Down Expand Up @@ -157,7 +165,7 @@ class Forcing(BaseModel):


# CONFIGURATIONS ENUM
class ConfigurationsEnum(str, Enum):
class ConfigurationsEnum(StrEnum):
"""ConfigurationsEnum."""
analysis_assim = "analysis_assim"
analysis_assim_no_da = "analysis_assim_no_da"
Expand Down
48 changes: 28 additions & 20 deletions src/teehr/models/loading/nwm22_point.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,20 @@
"""Module describing NWM v2.2 point data configuration variables."""
from enum import Enum
try:
# breaking change introduced in python 3.11
from enum import StrEnum
except ImportError: # pragma: no cover
from enum import Enum # pragma: no cover

class StrEnum(str, Enum): # pragma: no cover
pass # pragma: no cover

from typing import Optional

from pydantic import BaseModel


# VARIABLE ENUMS: Potential variable names for each output_type
class ChannelRtVariableEnum(str, Enum):
class ChannelRtVariableEnum(StrEnum):
"""ChannelRtVariableEnum."""
nudge = "nudge"
qBtmVertRunoff = "qBtmVertRunoff"
Expand All @@ -16,7 +24,7 @@ class ChannelRtVariableEnum(str, Enum):
velocity = "velocity"


class ChannelRtNoDAVariableEnum(str, Enum):
class ChannelRtNoDAVariableEnum(StrEnum):
"""ChannelRtNoDAVariableEnum."""
nudge = "nudge"
qBucket = "qBucket"
Expand All @@ -25,20 +33,20 @@ class ChannelRtNoDAVariableEnum(str, Enum):
velocity = "velocity"


class ChannelRtLongVariableEnum(str, Enum):
class ChannelRtLongVariableEnum(StrEnum):
"""ChannelRtLongVariableEnum."""
nudge = "nudge"
streamflow = "streamflow"
velocity = "velocity"


class TerrainRtVariableEnum(str, Enum):
class TerrainRtVariableEnum(StrEnum):
"""TerrainRtVariableEnum."""
sfcheadsubrt = "sfcheadsubrt"
zwattablrt = "zwattablrt"


class ReservoirVariableEnum(str, Enum):
class ReservoirVariableEnum(StrEnum):
"""ReservoirVariableEnum."""
inflow = "inflow"
outflow = "outflow"
Expand All @@ -47,86 +55,86 @@ class ReservoirVariableEnum(str, Enum):


# OUTPUT ENUMS: Potential output names for each configuration
class ShortAndAnalysisOutputEnum(str, Enum):
class ShortAndAnalysisOutputEnum(StrEnum):
"""ShortAndAnalysisOutputEnum."""
channel_rt = "channel_rt"
terrain_rt = "terrain_rt"
reservoir = "reservoir"


class Medium1OutputEnum(str, Enum):
class Medium1OutputEnum(StrEnum):
"""Medium1OutputEnum."""
channel_rt_1 = "channel_rt_1"
terrain_rt_1 = "terrain_rt_1"
reservoir_1 = "reservoir_1"


class Medium2OutputEnum(str, Enum):
class Medium2OutputEnum(StrEnum):
"""Medium2OutputEnum."""
channel_rt_2 = "channel_rt_2"
terrain_rt_2 = "terrain_rt_2"
reservoir_2 = "reservoir_2"


class Medium3OutputEnum(str, Enum):
class Medium3OutputEnum(StrEnum):
"""Medium3OutputEnum."""
channel_rt_3 = "channel_rt_3"
terrain_rt_3 = "terrain_rt_3"
reservoir_3 = "reservoir_3"


class Medium4OutputEnum(str, Enum):
class Medium4OutputEnum(StrEnum):
"""Medium4OutputEnum."""
channel_rt_4 = "channel_rt_4"
terrain_rt_4 = "terrain_rt_4"
reservoir_4 = "reservoir_4"


class Medium5OutputEnum(str, Enum):
class Medium5OutputEnum(StrEnum):
"""Medium5OutputEnum."""
channel_rt_5 = "channel_rt_5"
terrain_rt_5 = "terrain_rt_5"
reservoir_5 = "reservoir_5"


class Medium6OutputEnum(str, Enum):
class Medium6OutputEnum(StrEnum):
"""Medium6OutputEnum."""
channel_rt_6 = "channel_rt_6"
terrain_rt_6 = "terrain_rt_6"
reservoir_6 = "reservoir_6"


class Medium7OutputEnum(str, Enum):
class Medium7OutputEnum(StrEnum):
"""Medium7OutputEnum."""
channel_rt_7 = "channel_rt_7"
terrain_rt_7 = "terrain_rt_7"
reservoir_7 = "reservoir_7"


class MediumNoDAEnum(str, Enum):
class MediumNoDAEnum(StrEnum):
"""MediumNoDAEnum."""
channel_rt = "channel_rt"


class Long1OutputEnum(str, Enum):
class Long1OutputEnum(StrEnum):
"""Long1OutputEnum."""
channel_rt_1 = "channel_rt_1"
reservoir_1 = "reservoir_1"


class Long2OutputEnum(str, Enum):
class Long2OutputEnum(StrEnum):
"""Long2OutputEnum."""
channel_rt_2 = "channel_rt_2"
reservoir_2 = "reservoir_2"


class Long3OutputEnum(str, Enum):
class Long3OutputEnum(StrEnum):
"""Long3OutputEnum."""
channel_rt_3 = "channel_rt_3"
reservoir_3 = "reservoir_3"


class Long4OutputEnum(str, Enum):
class Long4OutputEnum(StrEnum):
"""Long4OutputEnum."""
channel_rt_4 = "channel_rt_4"
reservoir_4 = "reservoir_4"
Expand Down Expand Up @@ -240,7 +248,7 @@ class LongRangeMem4(BaseModel):


# POINT CONFIGURATION ENUM: Potential configuration names
class ConfigurationsEnum(str, Enum):
class ConfigurationsEnum(StrEnum):
"""ConfigurationsEnum."""
analysis_assim = "analysis_assim"
analysis_assim_no_da = "analysis_assim_no_da"
Expand Down
12 changes: 10 additions & 2 deletions src/teehr/models/loading/nwm30_grid.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
"""Module describing NWM v3.0 grid configuration variables."""
from enum import Enum
try:
# breaking change introduced in python 3.11
from enum import StrEnum
except ImportError: # pragma: no cover
from enum import Enum # pragma: no cover

class StrEnum(str, Enum): # pragma: no cover
pass # pragma: no cover

from typing import Optional

from pydantic import BaseModel
Expand All @@ -14,7 +22,7 @@


# CONFIGURATIONS ENUM: All possible configuration
class ConfigurationsEnum(str, Enum):
class ConfigurationsEnum(StrEnum):
"""ConfigurationsEnum."""
analysis_assim = "analysis_assim"
analysis_assim_no_da = "analysis_assim_no_da"
Expand Down
12 changes: 10 additions & 2 deletions src/teehr/models/loading/nwm30_point.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
"""Module describing NWM v3.0 point configuration variables."""
from enum import Enum
try:
# breaking change introduced in python 3.11
from enum import StrEnum
except ImportError: # pragma: no cover
from enum import Enum # pragma: no cover

class StrEnum(str, Enum): # pragma: no cover
pass # pragma: no cover

from typing import Optional

from pydantic import BaseModel
Expand All @@ -23,7 +31,7 @@


# POINT CONFIGURATION ENUM: Potential configuration names
class ConfigurationsEnum(str, Enum):
class ConfigurationsEnum(StrEnum):
"""ConfigurationsEnum."""
analysis_assim = "analysis_assim"
analysis_assim_no_da = "analysis_assim_no_da"
Expand Down
Loading

0 comments on commit 33137f0

Please sign in to comment.