From a0718eb94f150fcb57491d263a07c16127eda976 Mon Sep 17 00:00:00 2001 From: erikvw Date: Mon, 27 Nov 2023 22:27:38 -0600 Subject: [PATCH] allow skip validate site against current --- edc_sites/valid_site_for_subject_or_raise.py | 30 ++++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/edc_sites/valid_site_for_subject_or_raise.py b/edc_sites/valid_site_for_subject_or_raise.py index 8ede969..50b5aeb 100644 --- a/edc_sites/valid_site_for_subject_or_raise.py +++ b/edc_sites/valid_site_for_subject_or_raise.py @@ -1,6 +1,7 @@ from __future__ import annotations from typing import TYPE_CHECKING +from warnings import warn from django.core.exceptions import ObjectDoesNotExist from edc_registration import get_registered_subject_model_cls @@ -19,30 +20,35 @@ class InvalidSubjectError(Exception): pass -def valid_site_for_subject_or_raise(subject_identifier: str) -> Site: +def valid_site_for_subject_or_raise( + subject_identifier: str, skip_get_current_site: bool | None = None +) -> Site: """Raises an InvalidSiteError exception if the subject_identifier is not from the current site. * Confirms by querying RegisteredSubject. * If subject_identifier is invalid will raise ObjectDoesNotExist """ - current_site = get_site_model_cls().objects.get_current() try: - get_registered_subject_model_cls().objects.get( - site=current_site, subject_identifier=subject_identifier + obj = get_registered_subject_model_cls().objects.get( + subject_identifier=subject_identifier ) except ObjectDoesNotExist: + raise InvalidSubjectError( + "Unknown subject. " + f"Searched `{get_registered_subject_model_cls()._meta.label_lower}`. " + f"Got subject_identifier=`{subject_identifier}`." + ) + if skip_get_current_site: + warn("Skipping validation of current site against registered subject site.") + current_site = obj.site + else: + current_site = get_site_model_cls().objects.get_current() try: - obj = get_registered_subject_model_cls().objects.get( - subject_identifier=subject_identifier + get_registered_subject_model_cls().objects.get( + subject_identifier=subject_identifier, site=current_site ) except ObjectDoesNotExist: - raise InvalidSubjectError( - "Unknown subject. " - f"Searched `{get_registered_subject_model_cls()._meta.label_lower}`. " - f"Got subject_identifier=`{subject_identifier}`." - ) - else: raise InvalidSiteForSubjectError( f"Invalid site for subject. {subject_identifier}. Expected `{obj.site.name}`. " f"Got `{current_site.name}`"