Skip to content

Commit 4a89d3d

Browse files
(erikvw changes) convert screening_model to list, add
_filter_cdefs_by_screening_model_or_raise()
1 parent 2ba2233 commit 4a89d3d

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

edc_consent/consent_definition.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class ConsentDefinition:
4141
version: str = field(default="1", compare=False)
4242
updates: ConsentDefinition = field(default=None, compare=False)
4343
end_extends_on_update: bool = field(default=False, compare=False)
44-
screening_model: str = field(default=None, compare=False)
44+
screening_model: list[str] = field(default_factory=list, compare=False)
4545
age_min: int = field(default=18, compare=False)
4646
age_max: int = field(default=110, compare=False)
4747
age_is_adult: int = field(default=18, compare=False)
@@ -63,7 +63,7 @@ def __post_init__(self):
6363
self.sort_index = self.name
6464
self.gender = [MALE, FEMALE] if not self.gender else self.gender
6565
if not self.screening_model:
66-
self.screening_model = get_subject_screening_model()
66+
self.screening_model = [get_subject_screening_model()]
6767
if MALE not in self.gender and FEMALE not in self.gender:
6868
raise ConsentDefinitionError(f"Invalid gender. Got {self.gender}.")
6969
if not self.start.tzinfo:

edc_consent/site_consents.py

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,8 +217,8 @@ def get_consent_definitions(
217217
)
218218
cdefs = self.filter_cdefs_by_site_or_raise(site, cdefs, error_messages)
219219

220-
cdefs, error_msg = self._filter_cdefs_by_model_or_raise(
221-
screening_model, cdefs, error_messages, attrname="screening_model"
220+
cdefs, error_msg = self._filter_cdefs_by_screening_model_or_raise(
221+
screening_model, cdefs, error_messages
222222
)
223223

224224
# apply additional criteria
@@ -246,6 +246,33 @@ def _filter_cdefs_by_model_or_raise(
246246
errror_messages.append(f"model={model}")
247247
return cdefs, errror_messages
248248

249+
@staticmethod
250+
def _filter_cdefs_by_screening_model_or_raise(
251+
model: str | None,
252+
consent_definitions: list[ConsentDefinition],
253+
errror_messages: list[str] = None,
254+
) -> tuple[list[ConsentDefinition], list[str]]:
255+
cdefs = consent_definitions
256+
if model:
257+
cdefs = []
258+
for cdef in consent_definitions:
259+
if isinstance(cdef.screening_model, list):
260+
for screening_model in cdef.screening_model:
261+
if model == screening_model:
262+
if cdef not in cdefs:
263+
cdefs.append(cdef)
264+
else:
265+
if model == cdef.screening_model:
266+
cdefs.append(cdef)
267+
if not cdefs:
268+
raise ConsentDefinitionDoesNotExist(
269+
"There are no consent definitions using this screening model."
270+
f"Got {model}."
271+
)
272+
else:
273+
errror_messages.append(f"model={model}")
274+
return cdefs, errror_messages
275+
249276
def _filter_cdefs_by_report_datetime_or_raise(
250277
self,
251278
report_datetime: datetime | None,

0 commit comments

Comments
 (0)