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.

Files changed (100) hide show
  1. {clinicedc-2.0.27.dist-info → clinicedc-2.0.29.dist-info}/METADATA +2 -2
  2. {clinicedc-2.0.27.dist-info → clinicedc-2.0.29.dist-info}/RECORD +100 -100
  3. edc_auth/admin/fieldsets.py +11 -15
  4. edc_auth/admin/group_admin.py +2 -5
  5. edc_auth/admin/list_filters.py +8 -7
  6. edc_auth/admin/role_admin.py +7 -10
  7. edc_auth/admin/user_admin.py +2 -2
  8. edc_auth/admin/user_profile_admin.py +3 -7
  9. edc_auth/apps.py +2 -2
  10. edc_auth/auth_updater/group_updater.py +4 -4
  11. edc_auth/auth_updater/role_updater.py +1 -3
  12. edc_auth/backends.py +1 -1
  13. edc_auth/export_users.py +6 -5
  14. edc_auth/fix_export_permissions.py +8 -8
  15. edc_auth/forms.py +21 -24
  16. edc_auth/get_app_codenames.py +2 -2
  17. edc_auth/import_users.py +25 -24
  18. edc_auth/management/commands/export_users.py +1 -1
  19. edc_auth/management/commands/fix_export_permissions.py +1 -1
  20. edc_auth/management/commands/import_users.py +1 -1
  21. edc_auth/management/commands/reset_password.py +2 -2
  22. edc_auth/models/signals.py +1 -1
  23. edc_auth/models/user_profile.py +4 -5
  24. edc_auth/password_setter.py +4 -4
  25. edc_auth/post_migrate_signals.py +2 -2
  26. edc_auth/send_new_credentials_to_user.py +1 -1
  27. edc_auth/system_checks.py +7 -6
  28. edc_auth/utils.py +9 -11
  29. edc_consent/consent_definition.py +4 -1
  30. edc_consent/models/__init__.py +2 -2
  31. edc_consent/models/signals.py +32 -26
  32. edc_model_admin/mixins/model_admin_form_instructions_mixin.py +9 -3
  33. edc_model_admin/mixins/model_admin_protect_pii_mixin.py +7 -7
  34. edc_pharmacy/admin_mixin.py +1 -1
  35. edc_pharmacy/approve_prescription.py +10 -8
  36. edc_pharmacy/auth_objects.py +1 -1
  37. edc_pharmacy/exceptions.py +7 -7
  38. edc_pharmacy/settings.py +1 -1
  39. edc_pharmacy/views/add_to_storage_bin_view.py +22 -24
  40. edc_pharmacy/views/allocate_to_subject_view.py +10 -18
  41. edc_pharmacy/views/celery_task_status_view.py +1 -2
  42. edc_pharmacy/views/confirm_stock_from_instance_view.py +1 -1
  43. edc_pharmacy/views/confirm_stock_from_queryset_view.py +5 -8
  44. edc_pharmacy/views/dispense_view.py +1 -1
  45. edc_pharmacy/views/move_to_storage_bin_view.py +7 -3
  46. edc_pharmacy/views/prepare_and_review_stock_request_view.py +62 -70
  47. edc_pharmacy/views/print_labels_view.py +1 -1
  48. edc_pharmacy/views/transfer_stock_view.py +1 -1
  49. edc_prn/modelform_mixins.py +8 -9
  50. edc_prn/models.py +3 -1
  51. edc_prn/site_prn_forms.py +2 -2
  52. edc_prn/templatetags/edc_prn_extras.py +1 -1
  53. edc_protocol/middleware.py +1 -1
  54. edc_protocol/research_protocol_config.py +7 -5
  55. edc_protocol_incident/admin/protocol_deviation_violation_admin.py +1 -1
  56. edc_protocol_incident/form_validators/mixins.py +9 -6
  57. edc_protocol_incident/modeladmin_mixins.py +1 -1
  58. edc_pylabels/admin/label_configuration_admin.py +1 -1
  59. edc_pylabels/admin/label_specification_admin.py +1 -1
  60. edc_pylabels/auth_objects.py +1 -1
  61. edc_pylabels/site_label_configs.py +2 -2
  62. edc_qareports/admin/qa_report_log_admin.py +5 -5
  63. edc_qareports/admin/qa_report_log_summary_admin.py +1 -1
  64. edc_qareports/forms/note_form.py +2 -3
  65. edc_qareports/modeladmin_mixins/list_filters.py +23 -19
  66. edc_qareports/modeladmin_mixins/note_modeladmin_mixin.py +7 -7
  67. edc_qareports/modeladmin_mixins/on_study_missing_values_modeladmin_mixin.py +8 -8
  68. edc_qareports/modeladmin_mixins/qa_report_modeladmin_mixin.py +3 -7
  69. edc_qareports/sql_generator/crf_case.py +1 -1
  70. edc_qareports/sql_generator/crf_subquery.py +1 -1
  71. edc_qareports/sql_generator/requisition_subquery.py +1 -1
  72. edc_qareports/sql_generator/sql_view_generator.py +1 -1
  73. edc_qareports/sql_generator/subquery_from_dict.py +39 -39
  74. edc_qareports/utils.py +12 -13
  75. edc_randomization/model_mixins.py +1 -1
  76. edc_randomization/randomization_list_importer.py +10 -4
  77. edc_randomization/randomization_list_verifier.py +5 -3
  78. edc_randomization/system_checks.py +1 -1
  79. edc_refusal/admin.py +4 -2
  80. edc_registration/modeladmin_mixins.py +18 -20
  81. edc_registration/modelform_mixins.py +2 -2
  82. edc_registration/models/signals.py +1 -1
  83. edc_registration/utils.py +1 -1
  84. edc_reportable/age_evaluator.py +4 -4
  85. edc_reportable/data/grading_data/daids_july_2017.py +3 -3
  86. edc_reportable/evaluator.py +15 -15
  87. edc_reportable/exceptions.py +4 -4
  88. edc_reportable/forms/reportables_form_validator_mixin.py +6 -2
  89. edc_reportable/management/commands/export_reportables.py +1 -1
  90. edc_reportable/models/grading_exception.py +1 -6
  91. edc_reportable/models/normal_data.py +3 -3
  92. edc_reportable/models/reference_range_collection.py +1 -6
  93. edc_reportable/utils/get_grade_for_value.py +15 -15
  94. edc_reportable/utils/get_normal_data_or_raise.py +14 -14
  95. edc_reportable/utils/in_normal_bounds_or_raise.py +6 -6
  96. edc_reportable/utils/load_data.py +1 -1
  97. edc_reportable/utils/update_grading_exceptions.py +5 -5
  98. edc_visit_schedule/site_visit_schedules.py +8 -12
  99. {clinicedc-2.0.27.dist-info → clinicedc-2.0.29.dist-info}/WHEEL +0 -0
  100. {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'{"" 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}'
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:
@@ -18,7 +18,7 @@ if TYPE_CHECKING:
18
18
  from ..models import ReferenceRangeCollection
19
19
 
20
20
 
21
- class AlreadyLoaded(Exception):
21
+ class AlreadyLoaded(Exception): # noqa: N818
22
22
  pass
23
23
 
24
24
 
@@ -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=True if 1 in grades else False,
29
- grade2=True if 2 in grades else False,
30
- grade3=True if 3 in grades else False,
31
- grade4=True if 4 in grades else False,
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 instance or raises."""
100
- ret = []
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
- ret.append([visit_schedule, schedule]) # noqa: PERF401
113
- if not ret:
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
- if len(ret) > 1:
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)