From daa69b9d2b51dbf8a1188b764cdd0dbaf7f2652d Mon Sep 17 00:00:00 2001 From: sudhamurthy Date: Thu, 21 Aug 2025 13:16:12 -0400 Subject: [PATCH 1/5] DAS-2389 - Update python version to 3.12 --- .pre-commit-config.yaml | 2 +- CHANGELOG.md | 8 +++++++- conda_requirements.txt | 2 +- docker/service.Dockerfile | 5 ++--- docker/service_version.txt | 2 +- hoss/__main__.py | 2 +- hoss/adapter.py | 6 +++--- hoss/bbox_utilities.py | 4 ++-- hoss/dimension_utilities.py | 6 +++--- hoss/spatial.py | 2 +- hoss/subset.py | 8 ++++---- hoss/temporal.py | 2 +- hoss/utilities.py | 6 +++--- pip_requirements.txt | 12 ++++++------ tests/pip_test_requirements.txt | 9 +++++---- tests/test_adapter.py | 4 ++-- tests/unit/test_adapter.py | 4 ++-- tests/unit/test_bbox_utilities.py | 4 ++-- tests/unit/test_coordinate_utilities.py | 2 +- tests/unit/test_dimension_utilities.py | 16 ++++++++-------- tests/unit/test_spatial.py | 2 +- tests/unit/test_subset.py | 6 +++--- tests/unit/test_temporal.py | 2 +- tests/unit/test_utilities.py | 4 ++-- tests/utilities.py | 2 +- 25 files changed, 64 insertions(+), 58 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index dda2a74..ef07a71 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -19,4 +19,4 @@ repos: hooks: - id: black-jupyter args: ["--skip-string-normalization"] - language_version: python3.11 + language_version: python3.12 diff --git a/CHANGELOG.md b/CHANGELOG.md index 776f5ec..a477e92 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ +## v1.2.0 +### 2025-08-21 + +This version of HOSS updates the consa environment to support Python 3.12. This also updates the +dependent packages to their latest supportable versions. Also updates harmony library version. + ## v1.1.9 -### 2025-08-013 +### 2025-08-13 This version of HOSS updates fixes invalid output extents in cases where the requested bounding area (bbox, shape) extends beyond valid locations for the native diff --git a/conda_requirements.txt b/conda_requirements.txt index 1a67b24..95c3508 100644 --- a/conda_requirements.txt +++ b/conda_requirements.txt @@ -1,2 +1,2 @@ # This file should contain any requirements installed via Conda -hdf5==1.12.0 +hdf5==1.14.6 diff --git a/docker/service.Dockerfile b/docker/service.Dockerfile index b6af498..079c699 100644 --- a/docker/service.Dockerfile +++ b/docker/service.Dockerfile @@ -24,9 +24,8 @@ WORKDIR "/home" COPY ./conda_requirements.txt conda_requirements.txt # Create Conda environment -RUN conda create -y --name hoss --file conda_requirements.txt python=3.11 -q \ - --channel conda-forge \ - --override-channels +RUN conda config --remove channels defaults +RUN conda create -y --name hoss --file conda_requirements.txt python=3.12 -q --channel conda-forge --override-channels # Copy additional Pip dependencies into the container COPY ./pip_requirements.txt pip_requirements.txt diff --git a/docker/service_version.txt b/docker/service_version.txt index 512a1fa..26aaba0 100644 --- a/docker/service_version.txt +++ b/docker/service_version.txt @@ -1 +1 @@ -1.1.9 +1.2.0 diff --git a/hoss/__main__.py b/hoss/__main__.py index c847f68..12fb924 100644 --- a/hoss/__main__.py +++ b/hoss/__main__.py @@ -3,7 +3,7 @@ from argparse import ArgumentParser from sys import argv -from harmony import is_harmony_cli, run_cli, setup_cli +from harmony_service_lib import is_harmony_cli, run_cli, setup_cli from hoss.adapter import HossAdapter diff --git a/hoss/adapter.py b/hoss/adapter.py index 803962f..830bce3 100644 --- a/hoss/adapter.py +++ b/hoss/adapter.py @@ -28,9 +28,9 @@ import shutil from tempfile import mkdtemp -from harmony import BaseHarmonyAdapter -from harmony.message import Source -from harmony.util import HarmonyException, generate_output_filename, stage +from harmony_service_lib import BaseHarmonyAdapter +from harmony_service_lib.message import Source +from harmony_service_lib.util import HarmonyException, generate_output_filename, stage from pystac import Asset, Item from hoss.dimension_utilities import is_index_subset diff --git a/hoss/bbox_utilities.py b/hoss/bbox_utilities.py index 5857062..953dafd 100644 --- a/hoss/bbox_utilities.py +++ b/hoss/bbox_utilities.py @@ -20,8 +20,8 @@ from typing import Dict, List, Optional, Tuple, Union import numpy as np -from harmony.message import Message -from harmony.util import Config, download +from harmony_service_lib.message import Message +from harmony_service_lib.util import Config, download from hoss.exceptions import InvalidInputGeoJSON, UnsupportedShapeFileFormat diff --git a/hoss/dimension_utilities.py b/hoss/dimension_utilities.py index c667349..ac19f2b 100644 --- a/hoss/dimension_utilities.py +++ b/hoss/dimension_utilities.py @@ -15,9 +15,9 @@ from typing import Dict, Set, Tuple import numpy as np -from harmony.message import Message -from harmony.message_utility import rgetattr -from harmony.util import Config +from harmony_service_lib.message import Message +from harmony_service_lib.message_utility import rgetattr +from harmony_service_lib.util import Config from netCDF4 import Dataset from numpy.ma.core import MaskedArray from varinfo import VariableFromDmr, VarInfoFromDmr diff --git a/hoss/spatial.py b/hoss/spatial.py index c55ad76..ee56ff2 100644 --- a/hoss/spatial.py +++ b/hoss/spatial.py @@ -24,7 +24,7 @@ from typing import List, Set -from harmony.message import Message +from harmony_service_lib.message import Message from netCDF4 import Dataset from numpy.ma.core import MaskedArray from varinfo import VariableFromDmr, VarInfoFromDmr diff --git a/hoss/subset.py b/hoss/subset.py index a9e09b3..6df74e3 100644 --- a/hoss/subset.py +++ b/hoss/subset.py @@ -8,10 +8,10 @@ from logging import Logger from typing import List, Set -from harmony.message import Message, Source -from harmony.message import Variable as HarmonyVariable -from harmony.message_utility import rgetattr -from harmony.util import Config +from harmony_service_lib.message import Message, Source +from harmony_service_lib.message import Variable as HarmonyVariable +from harmony_service_lib.message_utility import rgetattr +from harmony_service_lib.util import Config from netCDF4 import Dataset from numpy.ma import masked from varinfo import VarInfoFromDmr diff --git a/hoss/temporal.py b/hoss/temporal.py index f6c8b4c..10e5f77 100644 --- a/hoss/temporal.py +++ b/hoss/temporal.py @@ -12,7 +12,7 @@ from typing import List, Set from dateutil.parser import parse as parse_datetime -from harmony.message import Message +from harmony_service_lib.message import Message from netCDF4 import Dataset from varinfo import VarInfoFromDmr diff --git a/hoss/utilities.py b/hoss/utilities.py index b6e3890..86f283b 100644 --- a/hoss/utilities.py +++ b/hoss/utilities.py @@ -13,9 +13,9 @@ from urllib.parse import quote from uuid import uuid4 -from harmony.exceptions import ForbiddenException, ServerException -from harmony.util import Config -from harmony.util import download as util_download +from harmony_service_lib.exceptions import ForbiddenException, ServerException +from harmony_service_lib.util import Config +from harmony_service_lib.util import download as util_download from hoss.exceptions import UrlAccessFailed diff --git a/pip_requirements.txt b/pip_requirements.txt index 759d08d..a226fb4 100644 --- a/pip_requirements.txt +++ b/pip_requirements.txt @@ -1,8 +1,8 @@ # This file should contain requirements to be installed via Pip. # Open source packages available from PyPI -earthdata-varinfo ~= 3.0.1 -harmony-service-lib ~= 1.0.25 -netCDF4 ~= 1.6.4 -numpy ~= 1.24.2 -pyproj ~= 3.6.1 -shapely ~= 2.0.1 +earthdata-varinfo ~= 3.1.0 +harmony-service-lib ~= 2.7.0 +netCDF4 ~= 1.7.2 +numpy ~= 2.2.6 +pyproj ~= 3.7.1 +shapely ~= 2.1.1 diff --git a/tests/pip_test_requirements.txt b/tests/pip_test_requirements.txt index 4b2bb55..8cdeb89 100644 --- a/tests/pip_test_requirements.txt +++ b/tests/pip_test_requirements.txt @@ -1,5 +1,6 @@ -coverage~=7.2.2 -pre-commit~=3.7.0 -pycodestyle~=2.10.0 -pylint~=2.17.2 +coverage~=7.9.2 +pre-commit~=4.2.0 +pycodestyle~=2.14.0 +pylint ~= 3.3.7 +astroid ~= 3.3.10 unittest-xml-reporting~=3.2.0 diff --git a/tests/test_adapter.py b/tests/test_adapter.py index fc35782..6cf36b7 100755 --- a/tests/test_adapter.py +++ b/tests/test_adapter.py @@ -12,8 +12,8 @@ from unittest import TestCase from unittest.mock import ANY, Mock, call, patch -from harmony.message import Message -from harmony.util import HarmonyException, config +from harmony_service_lib.message import Message +from harmony_service_lib.util import HarmonyException, config from netCDF4 import Dataset from numpy.testing import assert_array_equal from pystac import Catalog diff --git a/tests/unit/test_adapter.py b/tests/unit/test_adapter.py index 977c01d..1974476 100644 --- a/tests/unit/test_adapter.py +++ b/tests/unit/test_adapter.py @@ -3,8 +3,8 @@ from unittest import TestCase from unittest.mock import ANY, patch -from harmony.message import Message -from harmony.util import config +from harmony_service_lib.message import Message +from harmony_service_lib.util import config from hoss.adapter import HossAdapter from hoss.bbox_utilities import BBox diff --git a/tests/unit/test_bbox_utilities.py b/tests/unit/test_bbox_utilities.py index aaacada..fff6a52 100644 --- a/tests/unit/test_bbox_utilities.py +++ b/tests/unit/test_bbox_utilities.py @@ -13,8 +13,8 @@ from unittest import TestCase from unittest.mock import patch -from harmony.message import Message -from harmony.util import config +from harmony_service_lib.message import Message +from harmony_service_lib.util import config from hoss.bbox_utilities import ( BBox, diff --git a/tests/unit/test_coordinate_utilities.py b/tests/unit/test_coordinate_utilities.py index 3a5099f..f651d74 100644 --- a/tests/unit/test_coordinate_utilities.py +++ b/tests/unit/test_coordinate_utilities.py @@ -4,7 +4,7 @@ from unittest.mock import ANY, patch import numpy as np -from harmony.util import config +from harmony_service_lib.util import config from netCDF4 import Dataset from numpy.testing import assert_array_equal from pyproj import CRS diff --git a/tests/unit/test_dimension_utilities.py b/tests/unit/test_dimension_utilities.py index 962eb9b..13e71b1 100644 --- a/tests/unit/test_dimension_utilities.py +++ b/tests/unit/test_dimension_utilities.py @@ -6,8 +6,8 @@ from unittest.mock import ANY, patch import numpy as np -from harmony.message import Message -from harmony.util import config +from harmony_service_lib.message import Message +from harmony_service_lib.util import config from netCDF4 import Dataset from numpy.ma import masked_array from numpy.testing import assert_array_equal @@ -148,7 +148,7 @@ def test_get_dimension_index_range(self, mock_get_indices_from_values): get_dimension_index_range( self.ascending_dimension, requested_min_value, requested_max_value ) - mock_get_indices_from_values.called_once_with( + mock_get_indices_from_values.assert_called_once_with( self.ascending_dimension, requested_min_value, requested_max_value ) mock_get_indices_from_values.reset_mock() @@ -157,7 +157,7 @@ def test_get_dimension_index_range(self, mock_get_indices_from_values): get_dimension_index_range( self.ascending_dimension, requested_min_value, None ) - mock_get_indices_from_values.called_once_with( + mock_get_indices_from_values.assert_called_once_with( self.ascending_dimension, requested_min_value, self.ascending_dimension[:][-1], @@ -168,7 +168,7 @@ def test_get_dimension_index_range(self, mock_get_indices_from_values): get_dimension_index_range( self.ascending_dimension, None, requested_max_value ) - mock_get_indices_from_values.called_once_with( + mock_get_indices_from_values.assert_called_once_with( self.ascending_dimension, self.ascending_dimension[:][0], requested_max_value, @@ -179,7 +179,7 @@ def test_get_dimension_index_range(self, mock_get_indices_from_values): get_dimension_index_range( self.descending_dimension, requested_min_value, requested_max_value ) - mock_get_indices_from_values.called_once_with( + mock_get_indices_from_values.assert_called_once_with( self.descending_dimension, requested_max_value, requested_min_value ) mock_get_indices_from_values.reset_mock() @@ -188,7 +188,7 @@ def test_get_dimension_index_range(self, mock_get_indices_from_values): get_dimension_index_range( self.descending_dimension, requested_min_value, None ) - mock_get_indices_from_values.called_once_with( + mock_get_indices_from_values.assert_called_once_with( self.descending_dimension, self.descending_dimension[:][0], requested_min_value, @@ -199,7 +199,7 @@ def test_get_dimension_index_range(self, mock_get_indices_from_values): get_dimension_index_range( self.descending_dimension, None, requested_max_value ) - mock_get_indices_from_values.called_once_with( + mock_get_indices_from_values.assert_called_once_with( self.descending_dimension, requested_max_value, self.descending_dimension[:][-1], diff --git a/tests/unit/test_spatial.py b/tests/unit/test_spatial.py index 0199bea..80c0c44 100644 --- a/tests/unit/test_spatial.py +++ b/tests/unit/test_spatial.py @@ -4,7 +4,7 @@ from unittest.mock import ANY, call, patch import numpy as np -from harmony.message import Message +from harmony_service_lib.message import Message from netCDF4 import Dataset from numpy.testing import assert_array_equal from pyproj import CRS diff --git a/tests/unit/test_subset.py b/tests/unit/test_subset.py index 3218c3d..a1dbc9e 100644 --- a/tests/unit/test_subset.py +++ b/tests/unit/test_subset.py @@ -5,9 +5,9 @@ from unittest.mock import call, patch import numpy as np -from harmony.message import Message, Source -from harmony.message import Variable as HarmonyVariable -from harmony.util import config +from harmony_service_lib.message import Message, Source +from harmony_service_lib.message import Variable as HarmonyVariable +from harmony_service_lib.util import config from netCDF4 import Dataset from varinfo import VarInfoFromDmr diff --git a/tests/unit/test_temporal.py b/tests/unit/test_temporal.py index 627a094..def96d0 100644 --- a/tests/unit/test_temporal.py +++ b/tests/unit/test_temporal.py @@ -5,7 +5,7 @@ from unittest.mock import ANY, patch import numpy as np -from harmony.message import Message +from harmony_service_lib.message import Message from netCDF4 import Dataset from numpy.testing import assert_array_equal from varinfo import VarInfoFromDmr diff --git a/tests/unit/test_utilities.py b/tests/unit/test_utilities.py index 4e546a4..16cba13 100644 --- a/tests/unit/test_utilities.py +++ b/tests/unit/test_utilities.py @@ -2,8 +2,8 @@ from unittest import TestCase from unittest.mock import Mock, patch -from harmony.exceptions import ForbiddenException, ServerException -from harmony.util import config +from harmony_service_lib.exceptions import ForbiddenException, ServerException +from harmony_service_lib.util import config from hoss.exceptions import UrlAccessFailed from hoss.utilities import ( diff --git a/tests/utilities.py b/tests/utilities.py index 31dfd95..ffe1acc 100644 --- a/tests/utilities.py +++ b/tests/utilities.py @@ -5,7 +5,7 @@ from typing import List from unittest.mock import MagicMock -from harmony.util import bbox_to_geometry +from harmony_service_lib.util import bbox_to_geometry from pystac import Asset, Catalog, Item Granule = namedtuple('Granule', ['url', 'media_type', 'roles']) From 6a36d5b675c72828d08e4e203bbcdfbb64318f75 Mon Sep 17 00:00:00 2001 From: sudhamurthy Date: Thu, 21 Aug 2025 13:41:35 -0400 Subject: [PATCH 2/5] DAS-2389 - Fix precommit errors --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a477e92..ae84b49 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,8 @@ ## v1.2.0 ### 2025-08-21 -This version of HOSS updates the consa environment to support Python 3.12. This also updates the -dependent packages to their latest supportable versions. Also updates harmony library version. +This version of HOSS updates the consa environment to support Python 3.12. This also updates the +dependent packages to their latest supportable versions. Also updates harmony library version. ## v1.1.9 ### 2025-08-13 From 4a1349e7bc5b461c864ba9de95369527eef63dce Mon Sep 17 00:00:00 2001 From: sudhamurthy Date: Thu, 21 Aug 2025 13:48:25 -0400 Subject: [PATCH 3/5] DAS-2389 - workaround for snyk not yet supporting python 3.12 --- .snyk | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .snyk diff --git a/.snyk b/.snyk new file mode 100644 index 0000000..09a7bb9 --- /dev/null +++ b/.snyk @@ -0,0 +1,4 @@ +# Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities. +version: v1.25.0 +language-settings: + python: "3.12" From 62e8584067ccfac231a80ab886b037a16501e057 Mon Sep 17 00:00:00 2001 From: sudhamurthy Date: Fri, 22 Aug 2025 00:41:06 -0400 Subject: [PATCH 4/5] DAS-2389 - Remove packages not needed --- CHANGELOG.md | 6 +++--- docker/service.Dockerfile | 1 - tests/pip_test_requirements.txt | 1 - 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ae84b49..7eae6f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,8 @@ -## v1.2.0 +## v1.1.10 ### 2025-08-21 -This version of HOSS updates the consa environment to support Python 3.12. This also updates the -dependent packages to their latest supportable versions. Also updates harmony library version. +This version of HOSS updates the conda environment to support Python 3.12. This also updates the +dependent packages to their latest supportable versions and updates Harmony Service Library version. ## v1.1.9 ### 2025-08-13 diff --git a/docker/service.Dockerfile b/docker/service.Dockerfile index 079c699..860e843 100644 --- a/docker/service.Dockerfile +++ b/docker/service.Dockerfile @@ -24,7 +24,6 @@ WORKDIR "/home" COPY ./conda_requirements.txt conda_requirements.txt # Create Conda environment -RUN conda config --remove channels defaults RUN conda create -y --name hoss --file conda_requirements.txt python=3.12 -q --channel conda-forge --override-channels # Copy additional Pip dependencies into the container diff --git a/tests/pip_test_requirements.txt b/tests/pip_test_requirements.txt index 8cdeb89..d5e3c69 100644 --- a/tests/pip_test_requirements.txt +++ b/tests/pip_test_requirements.txt @@ -2,5 +2,4 @@ coverage~=7.9.2 pre-commit~=4.2.0 pycodestyle~=2.14.0 pylint ~= 3.3.7 -astroid ~= 3.3.10 unittest-xml-reporting~=3.2.0 From bd2f8057b5c09703738d89f1138b177e7f1b9472 Mon Sep 17 00:00:00 2001 From: sudhamurthy Date: Fri, 22 Aug 2025 01:05:34 -0400 Subject: [PATCH 5/5] DAS-2389 - Update service version --- docker/service_version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/service_version.txt b/docker/service_version.txt index 26aaba0..5ed5faa 100644 --- a/docker/service_version.txt +++ b/docker/service_version.txt @@ -1 +1 @@ -1.2.0 +1.1.10