Skip to content

Commit

Permalink
improve is_valid_prefixed_group_iri()
Browse files Browse the repository at this point in the history
  • Loading branch information
jnussbaum committed Oct 23, 2024
1 parent 3a0afc8 commit 19f0a8a
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 18 deletions.
7 changes: 3 additions & 4 deletions dsp_permissions_scripts/models/group.py
Original file line number Diff line number Diff line change
Expand Up @@ -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 -]+$"
Expand Down Expand Up @@ -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")
Expand Down Expand Up @@ -74,15 +73,15 @@ 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)):
return False
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")
Expand Down
4 changes: 2 additions & 2 deletions dsp_permissions_scripts/models/group_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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":
Expand Down
4 changes: 2 additions & 2 deletions dsp_permissions_scripts/models/scope.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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()})
Expand Down
31 changes: 21 additions & 10 deletions tests/test_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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

Expand All @@ -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}")
Expand Down Expand Up @@ -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(
Expand All @@ -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)

0 comments on commit 19f0a8a

Please sign in to comment.