21
21
)
22
22
23
23
if TYPE_CHECKING :
24
- from edc_sites .single_site import SingleSite
25
-
26
24
from .model_mixins import ConsentModelMixin
27
25
28
26
class ConsentLikeModel (NonUniqueSubjectIdentifierModelMixin , ConsentModelMixin ):
@@ -46,7 +44,7 @@ class ConsentDefinition:
46
44
gender : list [str ] | None = field (default_factory = list , compare = False )
47
45
updates_versions : list [str ] | None = field (default_factory = list , compare = False )
48
46
subject_type : str = field (default = "subject" , compare = False )
49
- sites : list [SingleSite ] = field (default_factory = list , compare = False )
47
+ site_ids : list [int ] = field (default_factory = list , compare = False )
50
48
country : str | None = field (default = None , compare = False )
51
49
name : str = field (init = False , compare = True )
52
50
sort_index : str = field (init = False )
@@ -55,7 +53,6 @@ def __post_init__(self):
55
53
self .name = f"{ self .model } -{ self .version } "
56
54
self .sort_index = self .name
57
55
self .gender = [MALE , FEMALE ] if not self .gender else self .gender
58
- self ._init_sites ()
59
56
if MALE not in self .gender and FEMALE not in self .gender :
60
57
raise ConsentDefinitionError (f"Invalid gender. Got { self .gender } ." )
61
58
if not self .start .tzinfo :
@@ -64,26 +61,21 @@ def __post_init__(self):
64
61
raise ConsentDefinitionError (f"Naive datetime not allowed Got { self .end } ." )
65
62
self .check_date_within_study_period ()
66
63
67
- def _init_sites (self ) -> None :
68
- """Updates and/or validates sites.
69
-
70
- In order for this to work, edc_sites should be done
71
- registering sites.
72
- """
73
- if not self .sites :
74
- if not site_sites .loaded :
75
- raise ConsentDefinitionError (
76
- "No registered sites found or edc_sites.sites not loaded yet. "
77
- "Perhaps place `edc_sites` before `edc_consent` "
78
- "in INSTALLED_APPS."
79
- )
80
- if self .country :
81
- self .sites = site_sites .get_by_country (self .country , aslist = True )
82
- else :
83
- self .sites = [s for s in site_sites .all (aslist = True )]
64
+ @property
65
+ def sites (self ):
66
+ if not site_sites .loaded :
67
+ raise ConsentDefinitionError (
68
+ "No registered sites found or edc_sites.sites not loaded yet. "
69
+ "Perhaps place `edc_sites` before `edc_consent` "
70
+ "in INSTALLED_APPS."
71
+ )
72
+ if self .country :
73
+ sites = site_sites .get_by_country (self .country , aslist = True )
74
+ elif self .site_ids :
75
+ sites = [s for s in site_sites .all (aslist = True ) if s .site_id in self .site_ids ]
84
76
else :
85
- for site in self . sites :
86
- site_sites . get ( site . site_id )
77
+ sites = [ s for s in site_sites . all ( aslist = True )]
78
+ return sites
87
79
88
80
def get_consent_for (
89
81
self , subject_identifier : str = None , report_datetime : datetime | None = None
0 commit comments