From 19f0a8a43ca745e29864bdb275784647e37ca1a5 Mon Sep 17 00:00:00 2001 From: Johannes Nussbaum Date: Wed, 23 Oct 2024 15:41:42 +0200 Subject: [PATCH] improve is_valid_prefixed_group_iri() --- dsp_permissions_scripts/models/group.py | 7 ++--- dsp_permissions_scripts/models/group_utils.py | 4 +-- dsp_permissions_scripts/models/scope.py | 4 +-- tests/test_group.py | 31 +++++++++++++------ 4 files changed, 28 insertions(+), 18 deletions(-) diff --git a/dsp_permissions_scripts/models/group.py b/dsp_permissions_scripts/models/group.py index 9292bdc..8c76da2 100644 --- a/dsp_permissions_scripts/models/group.py +++ b/dsp_permissions_scripts/models/group.py @@ -14,7 +14,6 @@ from typing_extensions import Annotated from dsp_permissions_scripts.models.errors import InvalidGroupError -from dsp_permissions_scripts.models.errors import InvalidIRIError from dsp_permissions_scripts.utils.helpers import KNORA_ADMIN_ONTO_NAMESPACE PREFIXED_IRI_REGEX = r"^[\w-]+:[\w -]+$" @@ -42,7 +41,7 @@ class CustomGroup(BaseModel): @model_validator(mode="after") def _check_regex(self) -> Self: - if not is_prefixed_group_iri(self.prefixed_iri): + if not is_valid_prefixed_group_iri(self.prefixed_iri): raise InvalidGroupError(f"{self.prefixed_iri} is not a valid group IRI") if self.prefixed_iri.startswith(("knora-admin:", "knora-base:", "knora-api:")): raise InvalidGroupError(f"{self.prefixed_iri} is not a custom group") @@ -74,7 +73,7 @@ def group_discriminator(v: Any) -> str: ] -def is_prefixed_group_iri(iri: str) -> bool: +def is_valid_prefixed_group_iri(iri: str) -> bool: if iri.startswith((KNORA_ADMIN_ONTO_NAMESPACE, "http://rdfh.ch/groups/", "knora-base:", "knora-api:")): return False elif iri.startswith("knora-admin:") and not iri.endswith(tuple(NAMES_OF_BUILTIN_GROUPS)): @@ -82,7 +81,7 @@ def is_prefixed_group_iri(iri: str) -> bool: elif re.search(PREFIXED_IRI_REGEX, iri): return True else: - raise InvalidIRIError(f"{iri} is not a valid group IRI") + return False UNKNOWN_USER = BuiltinGroup(prefixed_iri="knora-admin:UnknownUser") diff --git a/dsp_permissions_scripts/models/group_utils.py b/dsp_permissions_scripts/models/group_utils.py index 23025cc..e1213aa 100644 --- a/dsp_permissions_scripts/models/group_utils.py +++ b/dsp_permissions_scripts/models/group_utils.py @@ -11,7 +11,7 @@ from dsp_permissions_scripts.models.group import UNKNOWN_USER from dsp_permissions_scripts.models.group import BuiltinGroup from dsp_permissions_scripts.models.group import Group -from dsp_permissions_scripts.models.group import is_prefixed_group_iri +from dsp_permissions_scripts.models.group import is_valid_prefixed_group_iri from dsp_permissions_scripts.utils.dsp_client import DspClient from dsp_permissions_scripts.utils.helpers import KNORA_ADMIN_ONTO_NAMESPACE @@ -54,7 +54,7 @@ def get_prefixed_iri_from_full_iri(full_iri: str, dsp_client: DspClient) -> str: def get_full_iri_from_prefixed_iri(prefixed_iri: str, dsp_client: DspClient) -> str: - if not is_prefixed_group_iri(prefixed_iri): + if not is_valid_prefixed_group_iri(prefixed_iri): raise InvalidIRIError(f"{prefixed_iri} is not a valid prefixed group IRI") prefix, groupname = prefixed_iri.split(":") if prefix == "knora-admin": diff --git a/dsp_permissions_scripts/models/scope.py b/dsp_permissions_scripts/models/scope.py index c0639c9..b56e2d4 100644 --- a/dsp_permissions_scripts/models/scope.py +++ b/dsp_permissions_scripts/models/scope.py @@ -15,7 +15,7 @@ from dsp_permissions_scripts.models.group import UNKNOWN_USER from dsp_permissions_scripts.models.group import Group from dsp_permissions_scripts.models.group import group_builder -from dsp_permissions_scripts.models.group import is_prefixed_group_iri +from dsp_permissions_scripts.models.group import is_valid_prefixed_group_iri from dsp_permissions_scripts.models.group_utils import get_prefixed_iri_from_full_iri from dsp_permissions_scripts.utils.dsp_client import DspClient @@ -52,7 +52,7 @@ def create( def from_dict(d: dict[str, list[str]], dsp_client: DspClient) -> PermissionScope: purged_kwargs = PermissionScope._remove_duplicates_from_kwargs(d) purged_kwargs = { - k: [get_prefixed_iri_from_full_iri(v, dsp_client) if not is_prefixed_group_iri(v) else v for v in vs] + k: [get_prefixed_iri_from_full_iri(v, dsp_client) if not is_valid_prefixed_group_iri(v) else v for v in vs] for k, vs in purged_kwargs.items() } return PermissionScope.model_validate({k: [group_builder(v) for v in vs] for k, vs in purged_kwargs.items()}) diff --git a/tests/test_group.py b/tests/test_group.py index 789037e..8b13776 100644 --- a/tests/test_group.py +++ b/tests/test_group.py @@ -3,7 +3,6 @@ import pytest from dsp_permissions_scripts.models.errors import InvalidGroupError -from dsp_permissions_scripts.models.errors import InvalidIRIError from dsp_permissions_scripts.models.group import CREATOR from dsp_permissions_scripts.models.group import KNOWN_USER from dsp_permissions_scripts.models.group import NAMES_OF_BUILTIN_GROUPS @@ -14,7 +13,7 @@ from dsp_permissions_scripts.models.group import BuiltinGroup from dsp_permissions_scripts.models.group import CustomGroup from dsp_permissions_scripts.models.group import group_builder -from dsp_permissions_scripts.models.group import is_prefixed_group_iri +from dsp_permissions_scripts.models.group import is_valid_prefixed_group_iri from dsp_permissions_scripts.utils.dsp_client import DspClient from dsp_permissions_scripts.utils.helpers import KNORA_ADMIN_ONTO_NAMESPACE @@ -41,13 +40,6 @@ def dsp_client_with_2_groups(new_custom_group_iri: str, old_custom_group_iri: st return dsp_client -def test_is_prefixed_iri() -> None: - assert is_prefixed_group_iri("knora-admin:ProjectAdmin") - assert not is_prefixed_group_iri(f"{KNORA_ADMIN_ONTO_NAMESPACE}ProjectAdmin") - with pytest.raises(InvalidIRIError): - is_prefixed_group_iri("ProjectAdmin") - - @pytest.mark.parametrize("group_name", NAMES_OF_BUILTIN_GROUPS) def test_builtin_group_from_prefixed_iri(group_name: str) -> None: builtin_group = BuiltinGroup(prefixed_iri=f"knora-admin:{group_name}") @@ -96,7 +88,7 @@ def test_custom_group_invalid(group_name: str) -> None: def test_group_builder() -> None: assert group_builder("knora-admin:UnknownUser") == UNKNOWN_USER - assert group_builder("limc:groupname") == CustomGroup(prefixed_iri="limc:groupname") + assert group_builder("limc_short-name:groupname") == CustomGroup(prefixed_iri="limc_short-name:groupname") @pytest.mark.parametrize( @@ -105,3 +97,22 @@ def test_group_builder() -> None: def test_group_builder_invalid(inv: str) -> None: with pytest.raises(InvalidGroupError): group_builder(inv) + + +@pytest.mark.parametrize("iri", ["knora-admin:ProjectAdmin", "project_short-name:Group Name", "limc:group-name_1"]) +def test_is_valid_prefixed_group_iri_true(iri: str) -> None: + assert is_valid_prefixed_group_iri(iri) + + +@pytest.mark.parametrize( + "iri", + [ + f"{KNORA_ADMIN_ONTO_NAMESPACE}ProjectAdmin", + "http://rdfh.ch/groups/0001/thing-searcher", + "ProjectAdmin", + "knora-base:Value", + "knora-admin:NotExisting", + ], +) +def test_is_valid_prefixed_group_iri_false(iri: str) -> None: + assert not is_valid_prefixed_group_iri(iri)