Skip to content

Commit 59b8df1

Browse files
committed
make gimli.units an optional requirement
1 parent 76b8146 commit 59b8df1

File tree

7 files changed

+25
-9
lines changed

7 files changed

+25
-9
lines changed

noxfile.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
@nox.session(python=PYTHON_VERSION, venv_backend="conda")
1515
def test(session: nox.Session) -> None:
1616
"""Run the tests."""
17-
session.conda_install("gimli.units", channel=["nodefaults", "conda-forge"])
1817
session.install(".[testing]")
18+
session.conda_install("gimli.units", channel=["nodefaults", "conda-forge"])
1919

2020
args = ["--cov", PROJECT, "-vvv"] + session.posargs
2121

@@ -30,11 +30,10 @@ def test(session: nox.Session) -> None:
3030
@nox.session(name="test-cli", python=PYTHON_VERSION, venv_backend="conda")
3131
def test_cli(session: nox.Session) -> None:
3232
"""Run the tests."""
33-
session.install("model-metadata")
33+
session.install(".")
3434
session.conda_install(
3535
"gimli.units", "pymt_topography", channel=["nodefaults", "conda-forge"]
3636
)
37-
session.install(".")
3837

3938
session.run("bmi-test", "pymt_topography:Topography")
4039

pyproject.toml

+3-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ classifiers = [
3131
"Topic :: Scientific/Engineering :: Physics",
3232
]
3333
dependencies = [
34-
"gimli.units",
3534
"importlib-resources; python_version < '3.12'",
3635
"model-metadata>=0.8",
3736
"numpy",
@@ -48,6 +47,9 @@ dynamic = [
4847
text = "MIT"
4948

5049
[project.optional-dependencies]
50+
units = [
51+
"gimli.units"
52+
]
5153
dev = [
5254
"black",
5355
"flake8",

requirements.txt

-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
gimli.units
21
model_metadata
32
numpy
43
pytest

src/bmi_tester/_tests/stage_1/time_test.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import pytest
77
from pytest import approx
88

9+
from bmi_tester.api import WITH_GIMLI_UNITS
910
from bmi_tester.api import check_unit_is_dimensionless
1011
from bmi_tester.api import check_unit_is_time
1112
from bmi_tester.api import check_unit_is_valid
@@ -35,7 +36,7 @@ def test_time_units_is_str(initialized_bmi):
3536
assert isinstance(units, str)
3637

3738

38-
# @pytest.mark.skipif(cfunits is None, reason="cfunits is broken on this platform")
39+
@pytest.mark.skipif(not WITH_GIMLI_UNITS, reason="gimli.units is not installed")
3940
def test_time_units_is_valid(initialized_bmi):
4041
"""Test the units of time are valid."""
4142
units = initialized_bmi.get_time_units()

src/bmi_tester/_tests/stage_2/var_test.py

+2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import numpy as np
22
import pytest
33

4+
from bmi_tester.api import WITH_GIMLI_UNITS
45
from bmi_tester.api import check_unit_is_valid
56

67

@@ -52,6 +53,7 @@ def test_get_var_type(initialized_bmi, var_name):
5253
raise AssertionError(f"get_var_type: bad data type name ({dtype})")
5354

5455

56+
@pytest.mark.skipif(not WITH_GIMLI_UNITS, reason="gimli.units is not installed")
5557
def test_get_var_units(initialized_bmi, var_name):
5658
"""Test the units of the variables."""
5759
units = initialized_bmi.get_var_units(var_name)

src/bmi_tester/api.py

+9-3
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,22 @@
33
from collections.abc import Iterable
44
from collections.abc import Sequence
55

6-
import gimli
6+
try:
7+
import gimli
8+
except ImportError:
9+
WITH_GIMLI_UNITS = False
10+
SECONDS = None
11+
else:
12+
WITH_GIMLI_UNITS = True
13+
SECONDS = gimli.units.Unit("s")
14+
715
import pytest
816

917
if sys.version_info >= (3, 12): # pragma: no cover (PY12+)
1018
from importlib.resources import files
1119
else: # pragma: no cover (<PY312)
1220
from importlib_resources import files
1321

14-
SECONDS = gimli.units.Unit("s")
15-
1622

1723
def check_bmi(
1824
package: str,

tests/units_test.py

+7
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,37 @@
11
import pytest
22

3+
from bmi_tester.api import WITH_GIMLI_UNITS
34
from bmi_tester.api import check_unit_is_dimensionless
45
from bmi_tester.api import check_unit_is_time
56
from bmi_tester.api import check_unit_is_valid
67

78

9+
@pytest.mark.skipif(not WITH_GIMLI_UNITS, reason="gimli.units is not installed")
810
@pytest.mark.parametrize(
911
"unit", ("m", "m / s", "m s-1", "N m", "N.m", "m^2", "m2", "", "1")
1012
)
1113
def test_check_valid_units(unit):
1214
assert check_unit_is_valid(unit)
1315

1416

17+
@pytest.mark.skipif(not WITH_GIMLI_UNITS, reason="gimli.units is not installed")
1518
@pytest.mark.parametrize("unit", ("foo", "m ** 2", "-"))
1619
def test_check_invalid_units(unit):
1720
assert not check_unit_is_valid(unit)
1821

1922

23+
@pytest.mark.skipif(not WITH_GIMLI_UNITS, reason="gimli.units is not installed")
2024
@pytest.mark.parametrize("unit", ("", "1"))
2125
def test_dimensionless_units(unit):
2226
assert check_unit_is_dimensionless(unit)
2327

2428

29+
@pytest.mark.skipif(not WITH_GIMLI_UNITS, reason="gimli.units is not installed")
2530
def test_not_dimensionless_units():
2631
assert not check_unit_is_dimensionless("m")
2732

2833

34+
@pytest.mark.skipif(not WITH_GIMLI_UNITS, reason="gimli.units is not installed")
2935
@pytest.mark.parametrize(
3036
"unit",
3137
(
@@ -42,5 +48,6 @@ def test_time_units(unit):
4248
assert check_unit_is_time(unit)
4349

4450

51+
@pytest.mark.skipif(not WITH_GIMLI_UNITS, reason="gimli.units is not installed")
4552
def test_not_time_units():
4653
assert not check_unit_is_time("m")

0 commit comments

Comments
 (0)