From a238577f2d3756c47f3f40c47f3da277e2fa7458 Mon Sep 17 00:00:00 2001 From: erikvw Date: Mon, 18 Dec 2023 11:30:54 -0600 Subject: [PATCH] valid_subject_identifier_or_raise --- edc_registration/utils.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/edc_registration/utils.py b/edc_registration/utils.py index 4221849..f434ad1 100644 --- a/edc_registration/utils.py +++ b/edc_registration/utils.py @@ -1,13 +1,15 @@ from __future__ import annotations +import re from typing import TYPE_CHECKING from django.apps import apps as django_apps from django.conf import settings from django.core.exceptions import ObjectDoesNotExist +from edc_protocol import Protocol if TYPE_CHECKING: - from edc_registration.models import RegisteredSubject + from edc_registration.models import RegisteredSubject, RegisteredSubjectError class RegisteredSubjectDoesNotExist(Exception): @@ -41,3 +43,19 @@ def get_registered_subject( f"Got {opts}." ) return registered_subject + + +def valid_subject_identifier_or_raise( + subject_identifier: str, raise_exception: bool | None = None +) -> bool: + if not re.match(Protocol().subject_identifier_pattern, subject_identifier): + if raise_exception: + raise RegisteredSubjectError( + f"Invalid subject identifier format. " + f"Valid pattern is `{Protocol().subject_identifier_pattern}`. " + f"See `edc_protocol.Protocol().subject_identifier_pattern`. " + f"Got `{subject_identifier}`." + ) + else: + return False + return True