clinicedc 2.0.27__py3-none-any.whl → 2.0.29__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of clinicedc might be problematic. Click here for more details.
- {clinicedc-2.0.27.dist-info → clinicedc-2.0.29.dist-info}/METADATA +2 -2
- {clinicedc-2.0.27.dist-info → clinicedc-2.0.29.dist-info}/RECORD +100 -100
- edc_auth/admin/fieldsets.py +11 -15
- edc_auth/admin/group_admin.py +2 -5
- edc_auth/admin/list_filters.py +8 -7
- edc_auth/admin/role_admin.py +7 -10
- edc_auth/admin/user_admin.py +2 -2
- edc_auth/admin/user_profile_admin.py +3 -7
- edc_auth/apps.py +2 -2
- edc_auth/auth_updater/group_updater.py +4 -4
- edc_auth/auth_updater/role_updater.py +1 -3
- edc_auth/backends.py +1 -1
- edc_auth/export_users.py +6 -5
- edc_auth/fix_export_permissions.py +8 -8
- edc_auth/forms.py +21 -24
- edc_auth/get_app_codenames.py +2 -2
- edc_auth/import_users.py +25 -24
- edc_auth/management/commands/export_users.py +1 -1
- edc_auth/management/commands/fix_export_permissions.py +1 -1
- edc_auth/management/commands/import_users.py +1 -1
- edc_auth/management/commands/reset_password.py +2 -2
- edc_auth/models/signals.py +1 -1
- edc_auth/models/user_profile.py +4 -5
- edc_auth/password_setter.py +4 -4
- edc_auth/post_migrate_signals.py +2 -2
- edc_auth/send_new_credentials_to_user.py +1 -1
- edc_auth/system_checks.py +7 -6
- edc_auth/utils.py +9 -11
- edc_consent/consent_definition.py +4 -1
- edc_consent/models/__init__.py +2 -2
- edc_consent/models/signals.py +32 -26
- edc_model_admin/mixins/model_admin_form_instructions_mixin.py +9 -3
- edc_model_admin/mixins/model_admin_protect_pii_mixin.py +7 -7
- edc_pharmacy/admin_mixin.py +1 -1
- edc_pharmacy/approve_prescription.py +10 -8
- edc_pharmacy/auth_objects.py +1 -1
- edc_pharmacy/exceptions.py +7 -7
- edc_pharmacy/settings.py +1 -1
- edc_pharmacy/views/add_to_storage_bin_view.py +22 -24
- edc_pharmacy/views/allocate_to_subject_view.py +10 -18
- edc_pharmacy/views/celery_task_status_view.py +1 -2
- edc_pharmacy/views/confirm_stock_from_instance_view.py +1 -1
- edc_pharmacy/views/confirm_stock_from_queryset_view.py +5 -8
- edc_pharmacy/views/dispense_view.py +1 -1
- edc_pharmacy/views/move_to_storage_bin_view.py +7 -3
- edc_pharmacy/views/prepare_and_review_stock_request_view.py +62 -70
- edc_pharmacy/views/print_labels_view.py +1 -1
- edc_pharmacy/views/transfer_stock_view.py +1 -1
- edc_prn/modelform_mixins.py +8 -9
- edc_prn/models.py +3 -1
- edc_prn/site_prn_forms.py +2 -2
- edc_prn/templatetags/edc_prn_extras.py +1 -1
- edc_protocol/middleware.py +1 -1
- edc_protocol/research_protocol_config.py +7 -5
- edc_protocol_incident/admin/protocol_deviation_violation_admin.py +1 -1
- edc_protocol_incident/form_validators/mixins.py +9 -6
- edc_protocol_incident/modeladmin_mixins.py +1 -1
- edc_pylabels/admin/label_configuration_admin.py +1 -1
- edc_pylabels/admin/label_specification_admin.py +1 -1
- edc_pylabels/auth_objects.py +1 -1
- edc_pylabels/site_label_configs.py +2 -2
- edc_qareports/admin/qa_report_log_admin.py +5 -5
- edc_qareports/admin/qa_report_log_summary_admin.py +1 -1
- edc_qareports/forms/note_form.py +2 -3
- edc_qareports/modeladmin_mixins/list_filters.py +23 -19
- edc_qareports/modeladmin_mixins/note_modeladmin_mixin.py +7 -7
- edc_qareports/modeladmin_mixins/on_study_missing_values_modeladmin_mixin.py +8 -8
- edc_qareports/modeladmin_mixins/qa_report_modeladmin_mixin.py +3 -7
- edc_qareports/sql_generator/crf_case.py +1 -1
- edc_qareports/sql_generator/crf_subquery.py +1 -1
- edc_qareports/sql_generator/requisition_subquery.py +1 -1
- edc_qareports/sql_generator/sql_view_generator.py +1 -1
- edc_qareports/sql_generator/subquery_from_dict.py +39 -39
- edc_qareports/utils.py +12 -13
- edc_randomization/model_mixins.py +1 -1
- edc_randomization/randomization_list_importer.py +10 -4
- edc_randomization/randomization_list_verifier.py +5 -3
- edc_randomization/system_checks.py +1 -1
- edc_refusal/admin.py +4 -2
- edc_registration/modeladmin_mixins.py +18 -20
- edc_registration/modelform_mixins.py +2 -2
- edc_registration/models/signals.py +1 -1
- edc_registration/utils.py +1 -1
- edc_reportable/age_evaluator.py +4 -4
- edc_reportable/data/grading_data/daids_july_2017.py +3 -3
- edc_reportable/evaluator.py +15 -15
- edc_reportable/exceptions.py +4 -4
- edc_reportable/forms/reportables_form_validator_mixin.py +6 -2
- edc_reportable/management/commands/export_reportables.py +1 -1
- edc_reportable/models/grading_exception.py +1 -6
- edc_reportable/models/normal_data.py +3 -3
- edc_reportable/models/reference_range_collection.py +1 -6
- edc_reportable/utils/get_grade_for_value.py +15 -15
- edc_reportable/utils/get_normal_data_or_raise.py +14 -14
- edc_reportable/utils/in_normal_bounds_or_raise.py +6 -6
- edc_reportable/utils/load_data.py +1 -1
- edc_reportable/utils/update_grading_exceptions.py +5 -5
- edc_visit_schedule/site_visit_schedules.py +8 -12
- {clinicedc-2.0.27.dist-info → clinicedc-2.0.29.dist-info}/WHEEL +0 -0
- {clinicedc-2.0.27.dist-info → clinicedc-2.0.29.dist-info}/licenses/LICENSE +0 -0
|
@@ -19,12 +19,12 @@ __all__ = ["get_grade_for_value"]
|
|
|
19
19
|
|
|
20
20
|
def get_grade_for_value(
|
|
21
21
|
reference_range_collection: ReferenceRangeCollection,
|
|
22
|
-
value: float | int = None,
|
|
23
|
-
label: str = None,
|
|
24
|
-
units: str = None,
|
|
25
|
-
gender: str = None,
|
|
26
|
-
dob: date = None,
|
|
27
|
-
report_datetime: datetime = None,
|
|
22
|
+
value: float | int | None = None,
|
|
23
|
+
label: str | None = None,
|
|
24
|
+
units: str | None = None,
|
|
25
|
+
gender: str | None = None,
|
|
26
|
+
dob: date | None = None,
|
|
27
|
+
report_datetime: datetime | None = None,
|
|
28
28
|
age_units: str | None = None,
|
|
29
29
|
site: Site | None = None,
|
|
30
30
|
create_missing_normal: bool | None = None,
|
|
@@ -56,11 +56,11 @@ def get_grade_for_value(
|
|
|
56
56
|
upper_limit = get_upper_limit(normal_data, grading_data)
|
|
57
57
|
value = float(value)
|
|
58
58
|
condition_str = (
|
|
59
|
-
f'
|
|
60
|
-
f
|
|
61
|
-
f
|
|
59
|
+
f"{'' if lower_limit is None else lower_limit}"
|
|
60
|
+
f"{grading_data.lower_operator or ''}{value}"
|
|
61
|
+
f"{grading_data.upper_operator or ''}{'' if upper_limit is None else upper_limit}"
|
|
62
62
|
)
|
|
63
|
-
if eval(condition_str): # nosec B307
|
|
63
|
+
if eval(condition_str): # nosec B307 # noqa: S307
|
|
64
64
|
if not found_grading_data:
|
|
65
65
|
found_grading_data = grading_data
|
|
66
66
|
found_condition_str = (
|
|
@@ -104,11 +104,11 @@ def get_upper_limit(
|
|
|
104
104
|
|
|
105
105
|
def get_grading_data_instances(
|
|
106
106
|
reference_range_collection: ReferenceRangeCollection,
|
|
107
|
-
label: str = None,
|
|
108
|
-
units: str = None,
|
|
109
|
-
gender: str = None,
|
|
110
|
-
dob: date = None,
|
|
111
|
-
report_datetime: datetime = None,
|
|
107
|
+
label: str | None = None,
|
|
108
|
+
units: str | None = None,
|
|
109
|
+
gender: str | None = None,
|
|
110
|
+
dob: date | None = None,
|
|
111
|
+
report_datetime: datetime | None = None,
|
|
112
112
|
age_units: str | None = None,
|
|
113
113
|
site: Site | None = None,
|
|
114
114
|
) -> list[GradingData]:
|
|
@@ -25,11 +25,11 @@ __all__ = ["get_normal_data_or_raise"]
|
|
|
25
25
|
|
|
26
26
|
def get_normal_data_or_raise(
|
|
27
27
|
reference_range_collection: ReferenceRangeCollection = None,
|
|
28
|
-
label: str = None,
|
|
29
|
-
units: str = None,
|
|
30
|
-
gender: str = None,
|
|
31
|
-
dob: date = None,
|
|
32
|
-
report_datetime: datetime = None,
|
|
28
|
+
label: str | None = None,
|
|
29
|
+
units: str | None = None,
|
|
30
|
+
gender: str | None = None,
|
|
31
|
+
dob: date | None = None,
|
|
32
|
+
report_datetime: datetime | None = None,
|
|
33
33
|
age_units: str | None = None,
|
|
34
34
|
site: Site | None = None,
|
|
35
35
|
create_missing_normal: bool | None = None,
|
|
@@ -48,7 +48,7 @@ def get_normal_data_or_raise(
|
|
|
48
48
|
units=units,
|
|
49
49
|
age_units=age_units,
|
|
50
50
|
)
|
|
51
|
-
except ObjectDoesNotExist:
|
|
51
|
+
except ObjectDoesNotExist as e:
|
|
52
52
|
if create_missing_normal:
|
|
53
53
|
opts = dict(
|
|
54
54
|
reference_range_collection=reference_range_collection,
|
|
@@ -68,23 +68,23 @@ def get_normal_data_or_raise(
|
|
|
68
68
|
f"age={getattr(age_rdelta, age_units)}{age_units}. "
|
|
69
69
|
"Perhaps add this to the default normal reference range data or "
|
|
70
70
|
"pass 'create_missing=True' to convert an existing normal reference."
|
|
71
|
-
)
|
|
72
|
-
except MultipleObjectsReturned:
|
|
71
|
+
) from e
|
|
72
|
+
except MultipleObjectsReturned as e:
|
|
73
73
|
raise NotEvaluated(
|
|
74
74
|
f"Value not evaluated. "
|
|
75
75
|
f"Multiple normal references found for `{label}`. "
|
|
76
76
|
f"Using units={units}, gender={gender}, age={getattr(age_rdelta, age_units)}. "
|
|
77
|
-
)
|
|
77
|
+
) from e
|
|
78
78
|
return obj
|
|
79
79
|
|
|
80
80
|
|
|
81
81
|
def create_obj_for_new_units_or_raise(
|
|
82
82
|
reference_range_collection: ReferenceRangeCollection = None,
|
|
83
|
-
label: str = None,
|
|
84
|
-
units: str = None,
|
|
85
|
-
gender: str = None,
|
|
86
|
-
dob: date = None,
|
|
87
|
-
report_datetime: datetime = None,
|
|
83
|
+
label: str | None = None,
|
|
84
|
+
units: str | None = None,
|
|
85
|
+
gender: str | None = None,
|
|
86
|
+
dob: date | None = None,
|
|
87
|
+
report_datetime: datetime | None = None,
|
|
88
88
|
age_units: str | None = None,
|
|
89
89
|
) -> NormalData | None:
|
|
90
90
|
opts = {}
|
|
@@ -14,12 +14,12 @@ __all__ = ["in_normal_bounds_or_raise"]
|
|
|
14
14
|
|
|
15
15
|
def in_normal_bounds_or_raise(
|
|
16
16
|
reference_range_collection: ReferenceRangeCollection = None,
|
|
17
|
-
label: str = None,
|
|
18
|
-
value: int | float = None,
|
|
19
|
-
units: str = None,
|
|
20
|
-
gender: str = None,
|
|
21
|
-
dob: date = None,
|
|
22
|
-
report_datetime: datetime = None,
|
|
17
|
+
label: str | None = None,
|
|
18
|
+
value: int | float | None = None,
|
|
19
|
+
units: str | None = None,
|
|
20
|
+
gender: str | None = None,
|
|
21
|
+
dob: date | None = None,
|
|
22
|
+
report_datetime: datetime | None = None,
|
|
23
23
|
age_units: str | None = None,
|
|
24
24
|
create_missing_normal: bool | None = None,
|
|
25
25
|
) -> bool:
|
|
@@ -21,12 +21,12 @@ def update_grading_exceptions(
|
|
|
21
21
|
reference_range_collection=reference_range_collection
|
|
22
22
|
).delete()
|
|
23
23
|
for label, grades in reportable_grades_exceptions.items():
|
|
24
|
-
grades = [int(g) for g in grades]
|
|
24
|
+
grades = [int(g) for g in grades] # noqa: PLW2901
|
|
25
25
|
grading_exception_model_cls().objects.get_or_create(
|
|
26
26
|
reference_range_collection=reference_range_collection,
|
|
27
27
|
label=label,
|
|
28
|
-
grade1=
|
|
29
|
-
grade2=
|
|
30
|
-
grade3=
|
|
31
|
-
grade4=
|
|
28
|
+
grade1=1 in grades,
|
|
29
|
+
grade2=2 in grades, # noqa: PLR2004
|
|
30
|
+
grade3=3 in grades, # noqa: PLR2004
|
|
31
|
+
grade4=4 in grades, # noqa: PLR2004
|
|
32
32
|
)
|
|
@@ -95,9 +95,11 @@ class SiteVisitSchedules:
|
|
|
95
95
|
def get_by_consent_definition(
|
|
96
96
|
self,
|
|
97
97
|
cdef: ConsentDefinition,
|
|
98
|
-
) -> tuple[VisitSchedule, Schedule]:
|
|
99
|
-
"""Returns a visit schedule
|
|
100
|
-
|
|
98
|
+
) -> tuple[tuple[VisitSchedule, Schedule], ...]:
|
|
99
|
+
"""Returns a tuple of (visit schedule, schedule instances) that
|
|
100
|
+
match this cdef or raises.
|
|
101
|
+
"""
|
|
102
|
+
visit_schedules = []
|
|
101
103
|
attr = "consent_definitions"
|
|
102
104
|
for visit_schedule in self.visit_schedules.values():
|
|
103
105
|
for schedule in visit_schedule.schedules.values():
|
|
@@ -109,18 +111,12 @@ class SiteVisitSchedules:
|
|
|
109
111
|
) from e
|
|
110
112
|
for _cdef in consent_definitions:
|
|
111
113
|
if _cdef == cdef:
|
|
112
|
-
|
|
113
|
-
if not
|
|
114
|
+
visit_schedules.append((visit_schedule, schedule)) # noqa: PERF401
|
|
115
|
+
if not visit_schedules:
|
|
114
116
|
raise SiteVisitScheduleError(
|
|
115
117
|
f"Schedule not found. No schedule exists for {attr}={cdef}."
|
|
116
118
|
)
|
|
117
|
-
|
|
118
|
-
raise SiteVisitScheduleError(
|
|
119
|
-
f"Schedule is ambiguous. More than one schedule exists for "
|
|
120
|
-
f"{attr}={cdef}. Got {ret}"
|
|
121
|
-
)
|
|
122
|
-
visit_schedule, schedule = ret[0]
|
|
123
|
-
return visit_schedule, schedule
|
|
119
|
+
return tuple(visit_schedules)
|
|
124
120
|
|
|
125
121
|
def get_by_onschedule_model(self, onschedule_model: str) -> tuple[VisitSchedule, Schedule]:
|
|
126
122
|
"""Returns a tuple of (visit_schedule, schedule)
|
|
File without changes
|
|
File without changes
|