From 9e8f7600624b43269f31f3cb569011ea907c8841 Mon Sep 17 00:00:00 2001 From: j-atkins <106238905+j-atkins@users.noreply.github.com> Date: Tue, 3 Mar 2026 09:07:57 +0100 Subject: [PATCH 1/4] handle null for instruments --- src/virtualship/utils.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/virtualship/utils.py b/src/virtualship/utils.py index cef83501..627bd5ec 100644 --- a/src/virtualship/utils.py +++ b/src/virtualship/utils.py @@ -15,8 +15,8 @@ import numpy as np import pyproj import xarray as xr -from parcels import FieldSet +from parcels import FieldSet from virtualship.errors import CopernicusCatalogueError if TYPE_CHECKING: @@ -619,9 +619,9 @@ def _calc_wp_stationkeeping_time( """For a given waypoint (and the instruments present at this waypoint), calculate how much time is required to carry out all instrument deployments.""" from virtualship.instruments.types import InstrumentType # avoid circular imports - assert isinstance(wp_instrument_types, list), ( - "waypoint instruments must be provided as a list, even if empty." - ) + # to empty list if wp instruments set to 'null' + if not wp_instrument_types: + wp_instrument_types = [] # TODO: this can be removed if/when CTD and CTD_BGC are merged to a single instrument both_ctd_and_bgc = ( From d8141e9dc807a5c836d168d1182aa8bbc787f288 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 08:14:03 +0000 Subject: [PATCH 2/4] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- src/virtualship/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/virtualship/utils.py b/src/virtualship/utils.py index 627bd5ec..204e9e8f 100644 --- a/src/virtualship/utils.py +++ b/src/virtualship/utils.py @@ -15,8 +15,8 @@ import numpy as np import pyproj import xarray as xr - from parcels import FieldSet + from virtualship.errors import CopernicusCatalogueError if TYPE_CHECKING: From 62e1bd39e4ba0ae08ff39549b71594db04c1f33c Mon Sep 17 00:00:00 2001 From: j-atkins <106238905+j-atkins@users.noreply.github.com> Date: Tue, 3 Mar 2026 11:16:46 +0100 Subject: [PATCH 3/4] add test that empty list and null are equivalent and return no time --- tests/test_utils.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/tests/test_utils.py b/tests/test_utils.py index 00165f27..e68ec19a 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -4,9 +4,9 @@ import numpy as np import pytest import xarray as xr -from parcels import FieldSet import virtualship.utils +from parcels import FieldSet from virtualship.instruments.types import InstrumentType from virtualship.models.expedition import Expedition from virtualship.models.location import Location @@ -347,3 +347,16 @@ class DrifterConfig: assert stationkeeping_time_xbt == datetime.timedelta(0), ( "XBT should have zero stationkeeping time" ) + + +def test_calc_wp_stationkeeping_time_no_instruments(expedition): + """Test calc_wp_stationkeeping_time handles no instruments, either marked as 'null' or empty list.""" + stationkeeping_emptylist = _calc_wp_stationkeeping_time( + [], expedition.instruments_config + ) + stationkeeping_null = _calc_wp_stationkeeping_time( + None, expedition.instruments_config + ) # "null" in YAML translates to None in Python + + assert stationkeeping_null == stationkeeping_emptylist # are equivalent + assert stationkeeping_null == datetime.timedelta(0) # at least one is 0 time From db52ac112361e5a401c0c7ee08c57b6b8fa9f731 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 10:18:44 +0000 Subject: [PATCH 4/4] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/test_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_utils.py b/tests/test_utils.py index e68ec19a..8f9ec016 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -4,9 +4,9 @@ import numpy as np import pytest import xarray as xr +from parcels import FieldSet import virtualship.utils -from parcels import FieldSet from virtualship.instruments.types import InstrumentType from virtualship.models.expedition import Expedition from virtualship.models.location import Location