diff --git a/easyDataverse/datasettype.py b/easyDataverse/datasettype.py index 0e1c4d8..6dfadf9 100644 --- a/easyDataverse/datasettype.py +++ b/easyDataverse/datasettype.py @@ -3,6 +3,7 @@ from pydantic import BaseModel, Field import httpx from pyDataverse.api import NativeApi +from easyDataverse.utils import extract_major_minor class DatasetType(BaseModel): @@ -60,5 +61,4 @@ def _get_version(native_api: NativeApi) -> tuple[int, int]: response = native_api.get_info_version() response.raise_for_status() version = response.json()["data"]["version"] - major, minor = version.split(".", 1) - return int(major), int(minor) + return extract_major_minor(version) diff --git a/easyDataverse/dataverse.py b/easyDataverse/dataverse.py index 6156b56..850951e 100644 --- a/easyDataverse/dataverse.py +++ b/easyDataverse/dataverse.py @@ -9,6 +9,7 @@ import httpx from easyDataverse.datasettype import DatasetType from easyDataverse.license import CustomLicense, License +from easyDataverse.utils import extract_major_minor from rich.panel import Panel from rich.progress import Progress, SpinnerColumn, TextColumn from anytree import Node, findall_by_attr @@ -248,7 +249,7 @@ def _version_is_compliant(self) -> bool: ) version = response.json()["data"]["version"] - major, minor = self._extract_major_minor(version) + major, minor = extract_major_minor(version) if int(major) >= 6: return True @@ -257,17 +258,6 @@ def _version_is_compliant(self) -> bool: return False - @staticmethod - def _extract_major_minor(version: str) -> Tuple[int, int]: - """Extracts the major and minor version numbers from a Dataverse version string.""" - try: - major, minor, *_ = version.split(".") - major = "".join(filter(str.isdigit, major)) - minor = "".join(filter(str.isdigit, minor)) - return int(major), int(minor) - except ValueError: - raise ValueError(f"Version '{version}' is not a valid Dataverse version.") - @staticmethod def _check_version(major: int, minor: int) -> bool: """Checks if the version is compliant.""" diff --git a/easyDataverse/utils.py b/easyDataverse/utils.py index 30cffc6..c170e0e 100644 --- a/easyDataverse/utils.py +++ b/easyDataverse/utils.py @@ -1,6 +1,21 @@ import yaml +from typing import Tuple class YAMLDumper(yaml.Dumper): def increase_indent(self, flow=False, indentless=False): return super(YAMLDumper, self).increase_indent(flow, False) + +def extract_major_minor(version: str) -> Tuple[int, int]: + """Extracts the major and minor version numbers from a Dataverse version string. + + Args: + version: A string representing the Dataverse version, e.g., "6.4.0" or "v6.4.0". + """ + try: + major, minor, *_ = version.split(".") + major = "".join(filter(str.isdigit, major)) + minor = "".join(filter(str.isdigit, minor)) + return int(major), int(minor) + except ValueError: + raise ValueError(f"Version '{version}' is not a valid Dataverse version.") \ No newline at end of file diff --git a/tests/unit/test_dataverse.py b/tests/unit/test_dataverse.py index 127d6e0..a8fcea3 100644 --- a/tests/unit/test_dataverse.py +++ b/tests/unit/test_dataverse.py @@ -1,6 +1,7 @@ import pytest from easyDataverse.dataverse import Dataverse +from easyDataverse.utils import extract_major_minor class TestDataverse: @@ -37,14 +38,14 @@ def test_valid_versions(self): ] for version in cases: - major, minor = Dataverse._extract_major_minor(version) + major, minor = extract_major_minor(version) assert Dataverse._check_version(major, minor) @pytest.mark.unit def test_invalid_version(self): """Test that an invalid version raises a ValueError""" with pytest.raises(ValueError): - Dataverse._extract_major_minor("not a version") + extract_major_minor("not a version") @pytest.mark.unit def test_unsupported_version(self): @@ -56,5 +57,5 @@ def test_unsupported_version(self): "5.11", ] for version in cases: - major, minor = Dataverse._extract_major_minor(version) + major, minor = extract_major_minor(version) assert not Dataverse._check_version(major, minor)