Skip to content

Commit bd9e215

Browse files
committed
backend: add sits version validation
1 parent 54d3796 commit bd9e215

File tree

3 files changed

+34
-13
lines changed

3 files changed

+34
-13
lines changed

pysits/backend/loaders.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,25 @@
2020
from collections.abc import Callable
2121
from typing import Any
2222

23-
from rpy2.robjects import r
23+
from rpy2.robjects import r as rpy2_r_interface
2424
from rpy2.robjects.packages import importr
2525

2626

27+
def load_package(name: str, min_version: str | None = None) -> Any:
28+
"""Load R package."""
29+
if min_version:
30+
has_min_version = rpy2_r_interface(
31+
f'packageVersion("{name}") >= "{min_version}"'
32+
)
33+
34+
if not has_min_version[0]:
35+
raise RuntimeError(
36+
f"`{name}` must have at least version {min_version} or greater."
37+
)
38+
39+
return importr(name)
40+
41+
2742
def load_data_from_package(name: str, package: str, **kwargs) -> object:
2843
"""Load data from package.
2944
@@ -36,7 +51,7 @@ def load_data_from_package(name: str, package: str, **kwargs) -> object:
3651
3752
**kwargs: Additional arguments to pass to the function.
3853
"""
39-
return r.data(name, package=package, **kwargs)
54+
return rpy2_r_interface.data(name, package=package, **kwargs)
4055

4156

4257
def load_data_from_global(name: str) -> object:
@@ -47,7 +62,7 @@ def load_data_from_global(name: str) -> object:
4762
Args:
4863
name (str): Dataset name.
4964
"""
50-
return r[name]
65+
return rpy2_r_interface[name]
5166

5267

5368
def load_function_from_package(name: str) -> Callable[..., Any]:

pysits/backend/pkgs.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,20 @@
1717

1818
"""backend packages."""
1919

20-
from rpy2.robjects.packages import importr
20+
from pysits.backend.loaders import load_package
21+
from pysits.settings import __sitsver__
2122

2223
# system pakage
23-
r_pkg_base = importr("base")
24-
r_pkg_grdevices = importr("grDevices")
24+
r_pkg_base = load_package("base")
25+
r_pkg_grdevices = load_package("grDevices")
2526

2627
# sits package
27-
r_pkg_sits = importr("sits")
28+
r_pkg_sits = load_package("sits", min_version=__sitsver__)
2829

2930
# sits-dependencies packages
30-
r_pkg_tibble = importr("tibble")
31-
r_pkg_leaflet = importr("leaflet")
32-
r_pkg_kohonen = importr("kohonen")
33-
r_pkg_sf = importr("sf")
34-
r_pkg_htmlwidgets = importr("htmlwidgets")
35-
r_pkg_arrow = importr("arrow")
31+
r_pkg_tibble = load_package("tibble")
32+
r_pkg_leaflet = load_package("leaflet")
33+
r_pkg_kohonen = load_package("kohonen")
34+
r_pkg_sf = load_package("sf")
35+
r_pkg_htmlwidgets = load_package("htmlwidgets")
36+
r_pkg_arrow = load_package("arrow")

pysits/settings.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@
3636
#
3737
os.environ["TORCH_INSTALL"] = "0"
3838

39+
#
40+
# Compatible sits version
41+
#
42+
__sitsver__ = "1.5.3"
43+
3944
#
4045
# Package version
4146
#

0 commit comments

Comments
 (0)