clinicedc 2.0.24__py3-none-any.whl → 2.0.25__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 (47) hide show
  1. {clinicedc-2.0.24.dist-info → clinicedc-2.0.25.dist-info}/METADATA +1 -1
  2. {clinicedc-2.0.24.dist-info → clinicedc-2.0.25.dist-info}/RECORD +47 -47
  3. edc_action_item/site_action_items.py +2 -2
  4. edc_appointment/view_utils/appointment_button.py +1 -1
  5. edc_consent/modeladmin_mixins/consent_model_admin_mixin.py +14 -12
  6. edc_consent/models/__init__.py +2 -2
  7. edc_consent/models/signals.py +26 -28
  8. edc_dashboard/view_mixins/message_view_mixin.py +3 -4
  9. edc_identifier/admin.py +3 -2
  10. edc_identifier/identifier.py +5 -5
  11. edc_identifier/model_mixins.py +1 -1
  12. edc_identifier/models.py +7 -6
  13. edc_identifier/research_identifier.py +1 -1
  14. edc_identifier/short_identifier.py +1 -1
  15. edc_identifier/simple_identifier.py +15 -5
  16. edc_identifier/subject_identifier.py +2 -2
  17. edc_identifier/utils.py +13 -14
  18. edc_listboard/view_mixins/search_listboard_view_mixin.py +6 -7
  19. edc_metadata/view_mixins/metadata_view_mixin.py +7 -4
  20. edc_randomization/randomization_list_importer.py +21 -17
  21. edc_randomization/randomization_list_verifier.py +2 -2
  22. edc_randomization/randomizer.py +1 -1
  23. edc_review_dashboard/middleware.py +4 -4
  24. edc_review_dashboard/views/subject_review_listboard_view.py +3 -3
  25. edc_screening/age_evaluator.py +1 -1
  26. edc_screening/eligibility.py +5 -5
  27. edc_screening/exceptions.py +3 -3
  28. edc_screening/gender_evaluator.py +1 -1
  29. edc_screening/modelform_mixins.py +1 -1
  30. edc_screening/screening_eligibility.py +30 -35
  31. edc_screening/utils.py +10 -12
  32. edc_sites/admin/list_filters.py +2 -2
  33. edc_sites/admin/site_model_admin_mixin.py +8 -8
  34. edc_sites/exceptions.py +1 -1
  35. edc_sites/forms.py +3 -1
  36. edc_sites/management/commands/sync_sites.py +11 -17
  37. edc_sites/models/site_profile.py +6 -4
  38. edc_sites/post_migrate_signals.py +2 -2
  39. edc_sites/site.py +8 -8
  40. edc_sites/utils/add_or_update_django_sites.py +3 -3
  41. edc_sites/utils/valid_site_for_subject_or_raise.py +7 -4
  42. edc_sites/view_mixins.py +2 -2
  43. edc_subject_dashboard/view_utils/subject_screening_button.py +5 -3
  44. edc_view_utils/dashboard_model_button.py +3 -3
  45. edc_visit_schedule/site_visit_schedules.py +2 -1
  46. {clinicedc-2.0.24.dist-info → clinicedc-2.0.25.dist-info}/WHEEL +0 -0
  47. {clinicedc-2.0.24.dist-info → clinicedc-2.0.25.dist-info}/licenses/LICENSE +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clinicedc
3
- Version: 2.0.24
3
+ Version: 2.0.25
4
4
  Summary: A clinical trials data management framework built on Django
5
5
  Keywords: django,clinicedc,edc,clinical trials,research,data management,esource
6
6
  Author: Erik van Widenfelt, Jonathan Willitts
@@ -83,7 +83,7 @@ edc_action_item/models/signals.py,sha256=UtJEGw1oP479zhZ77q5L2wGBA92TUk4FpC2UDeS
83
83
  edc_action_item/offline_models.py,sha256=qPls5N0KfA9A-xX9ycbw5H9NuLpnRA4TFR6QES_exCw,961
84
84
  edc_action_item/post_migrate_signals.py,sha256=V82WIPGPOS15jvveUnjPYA8JJRyJNGLvgwnkAkgDTVk,387
85
85
  edc_action_item/send_email.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
86
- edc_action_item/site_action_items.py,sha256=TCWHw_ckPA82wRtvyVxJYc6AI18sFZLrUIl_k7Z3KCY,6495
86
+ edc_action_item/site_action_items.py,sha256=AhxUcsZoqxPVNJUCUAO_-4Mbz80KoP06a5A9Oixzvok,6555
87
87
  edc_action_item/stubs.py,sha256=sXdo0mWuPqldxLVHoPA8fRF4tgZzrarjUVfL2ZcKj4k,1859
88
88
  edc_action_item/system_checks.py,sha256=zV8LPgwCpU9i_nQfB7HLsqiEPxy7mNFPPNRfDM-K9Eg,814
89
89
  edc_action_item/templates/edc_action_item/action_item_admin_additional_instructions.html,sha256=uw4LCaxio14fRdPywBqU0p-wQDgsfgBkpSNj6wCWu00,181
@@ -443,7 +443,7 @@ edc_appointment/utils.py,sha256=6K0GkLdUJtVxvmHcRNOnLNeFNgAcCtn6pjeVtFmNBzw,3132
443
443
  edc_appointment/view_mixins/__init__.py,sha256=2EubqlkD0BWqdKyOGRroFqirvBDk7oolMAa7fmmz_S8,57
444
444
  edc_appointment/view_mixins/appointment_view_mixin.py,sha256=0ajpPcVcOHZkXsTUvYS_kI3W0zJItGca5Gab7ORjceg,4469
445
445
  edc_appointment/view_utils/__init__.py,sha256=r44ui0AWLVhW2CzDg_2d-9Hu92xHa7miMWvyt8IG23s,50
446
- edc_appointment/view_utils/appointment_button.py,sha256=QggQF33U011ipBXo4dpzpFZEw6ztTvODL03BTX-QeKA,2152
446
+ edc_appointment/view_utils/appointment_button.py,sha256=T5NrYwnNxG9II9MAaLH1UPfrKsfLoGTzy7anjl__8Dw,2159
447
447
  edc_appointment/views/__init__.py,sha256=qIHZEVVzTMCaW7LgFZ5LJeTK5iJtfHTIcPfYWclnxQM,101
448
448
  edc_appointment/views/home_view.py,sha256=rkstpwqRwQ89pjTSJOsy9vwAJ4xQHHeRWZOOpGs8w50,197
449
449
  edc_appointment/views/unscheduled_appointment_view.py,sha256=BSRR40ocxk7YmoaqicpPv2NMwfFZDGpN6BvG7kWC7XQ,2981
@@ -584,7 +584,7 @@ edc_consent/model_mixins/consent_model_mixin.py,sha256=b_RjN1LY9n-eGfr4cCeZFOXw_
584
584
  edc_consent/model_mixins/consent_version_model_mixin.py,sha256=8kXPjMU8RcgWjAYltuqPVCwRDvgAp1b6Ic1SGWsU8BU,3139
585
585
  edc_consent/model_mixins/requires_consent_fields_model_mixin.py,sha256=NAQtakqj3WpVMbWRBQqCpF7pzrQeUOfFtaGkSDoRVZg,347
586
586
  edc_consent/modeladmin_mixins/__init__.py,sha256=2tPZOwJXTDUoU5UFUcJbptFm9hK_SE7-h_L1CttD5zw,278
587
- edc_consent/modeladmin_mixins/consent_model_admin_mixin.py,sha256=zDUcXZI5-hM91zNi-VIHw_kQzDmErgcviGnI3CaGpg0,7533
587
+ edc_consent/modeladmin_mixins/consent_model_admin_mixin.py,sha256=nf5RP84lq6G9oZpfEwDGKsKQ7B-oqYxaafWyC-S2ww8,7590
588
588
  edc_consent/modeladmin_mixins/requires_consent_model_admin_mixin.py,sha256=qpxsud704sXx6MzeZ-TBNIFzrAWS07DOwdtx8G0c0yk,764
589
589
  edc_consent/modelform_mixins/__init__.py,sha256=Z5bXi8FIka147nV0VLjb2PHCzJDaI4lYloQixkyGJcE,278
590
590
  edc_consent/modelform_mixins/consent_modelform_mixin/__init__.py,sha256=qg__oajqZP9ktA4BvoevB-hoYfAXTKCmhQyO4g-Dk04,196
@@ -593,9 +593,9 @@ edc_consent/modelform_mixins/consent_modelform_mixin/consent_modelform_mixin.py,
593
593
  edc_consent/modelform_mixins/consent_modelform_mixin/consent_modelform_validation_mixin.py,sha256=Wwo3l-pdFlLkK8q50GkaCyPUXtuPJXODqYfb3HF1jDw,9613
594
594
  edc_consent/modelform_mixins/consent_modelform_mixin/review_fields_modelform_mixin.py,sha256=HOiWpf8SnPaGMtRbKM6uAglbV1HmQWdzxSoyQW1ab2U,1922
595
595
  edc_consent/modelform_mixins/requires_consent_modelform_mixin.py,sha256=-rQAmOvl1fx8-lEUB6M4V7tqaTqDRxtid002EWYPIxM,2340
596
- edc_consent/models/__init__.py,sha256=kTUrf6WlsKInX7jVuD3DyIqRW1OUaeSemflLLzWLV_I,278
596
+ edc_consent/models/__init__.py,sha256=hBdNWnac5MtlZATkOKZHUelMRn2M6jPCgGktCio5Wgk,282
597
597
  edc_consent/models/edc_permissions.py,sha256=f9PWQ1ZFz4rKT7wFpfr8anQ7mV6sCdNaWNMimPLGae8,338
598
- edc_consent/models/signals.py,sha256=3e_VTdCMlE0D1TteK-hk1YxNDbBgAr894SK2SD8a-cA,3148
598
+ edc_consent/models/signals.py,sha256=vhLiZPwSinm_CXh-r9Ty_Xaja5okvqrSFCkDp6DHylc,3020
599
599
  edc_consent/navbars.py,sha256=Bqb2UfOCLL6yuT_fSvKYQymbBj7V6q9CwvmI-VdUmls,334
600
600
  edc_consent/site_consents.py,sha256=jQYufDBievxoyOlC0Q1Llxv9xYqCEyk58Q1Fg_cu3mY,16882
601
601
  edc_consent/stubs.py,sha256=ZXjNqT6nBHRFHCB5tCOzBC3ZdiiBR3IitygO3FldTZA,513
@@ -732,7 +732,7 @@ edc_dashboard/utils.py,sha256=iGVPtEUXzG5_MU5SvgjbA5qQ4aZOF226ENpApAB5Xg4,1447
732
732
  edc_dashboard/view_mixins/__init__.py,sha256=B7ZVw0KOZ0cPkJRv40r0jG3Nwyb2uUjDbjz-e4JKT7o,287
733
733
  edc_dashboard/view_mixins/administration_view_mixin.py,sha256=6kubyQ3UuPYCf2A3bt9XH33EUGu8zRoLRZYiHMFOXVA,3671
734
734
  edc_dashboard/view_mixins/edc_view_mixin.py,sha256=8bFVBJAgbydluu8kvpcNGFTOE_xeJs1wROrzmvCuzvU,2957
735
- edc_dashboard/view_mixins/message_view_mixin.py,sha256=Vc-yoyxvM9kT8jlRLhB5aIokEXc7fp-kNuNHXRKMMnw,1474
735
+ edc_dashboard/view_mixins/message_view_mixin.py,sha256=09qg6KcpUvd8jb0z9I7665O82-TvsYsTrG8k0GbQOdM,1420
736
736
  edc_dashboard/view_mixins/template_request_context_mixin.py,sha256=NMvboUNf0L23QRYgaXXH9Na6ZGgsymuEp_LB3rt59AU,1013
737
737
  edc_dashboard/view_mixins/url_request_context_mixin.py,sha256=KynhaGsRzsquvtxXN1oqK3cNWto6oF3nZMM5HJCDGus,2116
738
738
  edc_dashboard/views/__init__.py,sha256=QLp3TlaQutQYjqAjR38EqCAr10evzZcW1ikzZC27enc,201
@@ -1184,12 +1184,12 @@ edc_glucose/model_mixins/ogtt_model_mixin.py,sha256=O4EwgHyVTGnA0POdD95CDWJ6Mi6y
1184
1184
  edc_glucose/models.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1185
1185
  edc_glucose/utils.py,sha256=-v_0y24hSNKhcZ4wOK-2Qei4sgqVzPuJPXIs1Zo50sk,1420
1186
1186
  edc_identifier/__init__.py,sha256=kkhaH8PAtHEohoVF2VENZfZmXeKyAnHWJHS1NEWuLyM,97
1187
- edc_identifier/admin.py,sha256=LaKWYyBGNcRJ7yMNajKvVtj3JbcqqLSrizL3sWDf82g,1765
1187
+ edc_identifier/admin.py,sha256=OTkIrDEQW4nfcDyKkWKm-s6qKWUBiuquELUErbf48gs,1786
1188
1188
  edc_identifier/admin_site.py,sha256=Aev8xku-hX60RlijUe5IJrpxEdiceLbnc4kdLN7uX3g,173
1189
1189
  edc_identifier/apps.py,sha256=kuK5x7h3i3k6aFrSnHIPmgkHrcPaIvXif5dVnbbiq-8,584
1190
1190
  edc_identifier/checkdigit_mixins.py,sha256=GxnOjfkwEzfoV1bQyJGDW5y-O8wmzvSVziQCqMMC4Eg,850
1191
1191
  edc_identifier/exceptions.py,sha256=ByPaQlE9XHGaIhK37yNn2vMRbfbOcI4hqu4AG9cY-Ko,451
1192
- edc_identifier/identifier.py,sha256=3sDqxfGi3xVDMP7rM-NxjJQ3cIwbQC_635A68R6DyYs,4585
1192
+ edc_identifier/identifier.py,sha256=NGL19KsOHSyLpPmiR1ky2lJWn5Bul6Wxt2z-Byp36ek,4579
1193
1193
  edc_identifier/managers.py,sha256=JbjunoJnb8PRTGycJXSrfhqzajitb7m1k0a-EOirADs,362
1194
1194
  edc_identifier/migrations/0001_initial.py,sha256=d1NniUjz-ZyZeXlFrAEBYB5VUBhMCJsn6nblOWWGJ-A,10487
1195
1195
  edc_identifier/migrations/0001_squashed_0018_auto_20180128_1054.py,sha256=RCIPCLsIj4R0y7ozBiz5hHWbM85WBNatIVDseDEMFmA,8216
@@ -1222,16 +1222,16 @@ edc_identifier/migrations/0016_auto_20180116_1411.py,sha256=c16cIRyB_1kI28ZMiera
1222
1222
  edc_identifier/migrations/0017_identifiermodel_subject_identifier.py,sha256=vOmgbP9nCNjVVNQ4WS50pEuCbYMSqQHQI8bqhiPA_Fk,406
1223
1223
  edc_identifier/migrations/0018_auto_20180128_1054.py,sha256=PqOVF8PuAiUIlVIulVt4q2TlAreKiVeyZE2ynsoI8Zs,421
1224
1224
  edc_identifier/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1225
- edc_identifier/model_mixins.py,sha256=_5yFQ8OPwqRhb3XiL2vhMDWtRjP8jBF3rPVfapoqF_I,5163
1226
- edc_identifier/models.py,sha256=bADlUiqTz1cCPrLHPvCu7901PE5XuUyKBP72KusouLY,1700
1225
+ edc_identifier/model_mixins.py,sha256=9N75xdk1TZ-qipyMhKDB6dnIKsF0RnG3ihHbWM9p4jI,5170
1226
+ edc_identifier/models.py,sha256=O8RxeiKYXneQ5Kd22jWlaU7JWCLBc6ou4mInPvbaDDg,1802
1227
1227
  edc_identifier/offline_models.py,sha256=Wp4XmewC6gi1MCBq0q0W0Z6gdgJyXBhOQR_DZkfP9tw,131
1228
- edc_identifier/research_identifier.py,sha256=vweDU7TX6WhJ4IGPyWhar4y10T7I3hagnxAbOHbV4uI,5497
1229
- edc_identifier/short_identifier.py,sha256=4QC256lyC2Wh0IVB4I8kIp5C4hoSdA2HqAHzZBgvWSU,4373
1230
- edc_identifier/simple_identifier.py,sha256=hQ__M07jGSjUiFLAu0IM3eKl4i4EZdNKvwcNbhtGnJY,7816
1231
- edc_identifier/subject_identifier.py,sha256=zipoV8tuFuqI1g0_jneIdb9PWy1pG24TiWdZBiutAOw,946
1228
+ edc_identifier/research_identifier.py,sha256=Qd-bBzOxiXZfyK967XZRhD5PPMnZsvUzZ9j4uBQU1e4,5504
1229
+ edc_identifier/short_identifier.py,sha256=0v1ICpRLzWjPVLrIdu2csaeGr-BrTjz6RFmCG03LvG4,4387
1230
+ edc_identifier/simple_identifier.py,sha256=blnHsN8BPFUKt3A0NlOUMGJCLu5kA7uKsCLcFS6BxX4,8070
1231
+ edc_identifier/subject_identifier.py,sha256=90gR-G_TeOPhUopgsOIZLHjKHjEzTzvZCwpxw_WZUEc,959
1232
1232
  edc_identifier/templates/edc_identifier/home.html,sha256=2yWn5pkbOjJoWlEe4FnydQ8m1ZpV1c1wRYHWqpMaBWI,50
1233
1233
  edc_identifier/urls.py,sha256=2v7PVFXITlK1hgmbVOg081MIcBUNrdHdAQmnStWoU0w,309
1234
- edc_identifier/utils.py,sha256=gF3kmt3eIcjXQ3WdQb3Xy0P0kKiMquVjGJherIhrEt0,1630
1234
+ edc_identifier/utils.py,sha256=kKcafKQsrJWuQJpq1mXpqf9CNDGisItZYW4Rmzmive4,1661
1235
1235
  edc_identifier/views.py,sha256=eLbe2d25DMB4xdHSQDGoI4kJtE8R1PSYyDvw2tduHL8,436
1236
1236
  edc_lab/__init__.py,sha256=q0295ZgI17zE6gG-dGlQq72k1edortYGFM-JEZpU8Q0,548
1237
1237
  edc_lab/admin/__init__.py,sha256=Gyps9t4SaJWHjqjvjxZt-MWe63JleYCWTp6IEltfTIo,764
@@ -1620,7 +1620,7 @@ edc_listboard/view_mixins/__init__.py,sha256=aDbmIyoHkifzkK5DAfMJ-365NCnNGs-Ocwk
1620
1620
  edc_listboard/view_mixins/listboard_filter_view_mixin.py,sha256=pApr0k8a6FKzJXTjpejO1QluV-7_p6CT_QWqEdLnPbE,2811
1621
1621
  edc_listboard/view_mixins/querystring_view_mixin.py,sha256=T4O3i6-A2-jZdK863fjf0NFWv2mCXICb6YMQ2qJTfSk,938
1622
1622
  edc_listboard/view_mixins/search_form_view_mixin.py,sha256=6uitlsgTtUhVCH33a4gxrqBckiCLOt3N8sPY8yGB_jo,1154
1623
- edc_listboard/view_mixins/search_listboard_view_mixin.py,sha256=VNbP-p3L2Bkgzyp5exzvE-p4tBl96YF3b_RVpGC4ejg,2952
1623
+ edc_listboard/view_mixins/search_listboard_view_mixin.py,sha256=JpaokTmoChgr3HE2-UhI8vMd6Vfxl0estr_CMQb-WWI,2953
1624
1624
  edc_listboard/views/__init__.py,sha256=IqobRNiACZF8HApUabAHhCUqoGJhzmHxApaTqFxVkPY,127
1625
1625
  edc_listboard/views/listboard_view.py,sha256=-3g3umgXCTw0u07TWSptQJpIaUfGfqLxB3WLrzErSus,8360
1626
1626
  edc_listboard/views/screen/__init__.py,sha256=oEl02vybLD26Ph-4wJgYhTyuh5C6zowqVLz8680olo4,105
@@ -1832,7 +1832,7 @@ edc_metadata/update_metadata_on_schedule_change.py,sha256=YOvZlF2FZS4AxVulzR_hsi
1832
1832
  edc_metadata/urls.py,sha256=K98KOcuIuLJn6j3-qalILJsZMvpQmc_nWgw0HqLEOQU,296
1833
1833
  edc_metadata/utils.py,sha256=tzx2l65DjRh--IvAFLizTmhCReX_ZA40YFan-GJpU9Y,4340
1834
1834
  edc_metadata/view_mixins/__init__.py,sha256=CCQC81_bpGBpDYl7FInMwbjOcyyu5ng9MFFTzMiwEMQ,51
1835
- edc_metadata/view_mixins/metadata_view_mixin.py,sha256=vPNCj4CI9GmMrga1ymz_p-eVAkX2gZJlOnNMnTL9OyU,1691
1835
+ edc_metadata/view_mixins/metadata_view_mixin.py,sha256=wiYn23cjSKLtrPRJZw-aT1bYsTDTSERI_iO0V3KyvVQ,1736
1836
1836
  edc_metadata/views/__init__.py,sha256=c7YFXwUJ3jN7usyMBG61eS6DI9MziY0lo9mu3eR1908,102
1837
1837
  edc_metadata/views/home_view.py,sha256=JFrMLb3x_O3LA0o1XR1SpE1gyLLm6qCGPSMm6U4kkpQ,434
1838
1838
  edc_metadata/views/refresh_metadata_actions_view.py,sha256=R5bWBTrri3yJetiP90k-d8UYYxRLs40bHcSbmGtRYRY,2672
@@ -2793,9 +2793,9 @@ edc_randomization/model_mixins.py,sha256=pKLkZJeYgobKPyHVJTby8Q7zBKQoflbLgraTN4p
2793
2793
  edc_randomization/models/__init__.py,sha256=iaJ6FM7VVqLpp8M-OjVWjohp4ELdxtPXqbEiT3iN5Tw,94
2794
2794
  edc_randomization/models/edc_permissions.py,sha256=f6P4zXxLQdTAbn2KnFlwfE86Lmzj7Ecp4JJ2F8mrwTc,286
2795
2795
  edc_randomization/models/randomization_list.py,sha256=Hd5yUSZ5HBKhNzYdlbJufab8U2x3Dzw8n4WXnYzJxyc,253
2796
- edc_randomization/randomization_list_importer.py,sha256=9jIJTG7rGjze4WmaFsJaw4qhFvy5mugZ4mx1CKKV6_o,12416
2797
- edc_randomization/randomization_list_verifier.py,sha256=b9-ZbaWSSv6fCrrDgHjijUACTMsUuU_htbkHqAcE8l4,6669
2798
- edc_randomization/randomizer.py,sha256=N57PvCGjsjlw4r4V-zE5K7uWnLUw4QwZREu-mQ-O_4U,12939
2796
+ edc_randomization/randomization_list_importer.py,sha256=-rFYIyTY2NZHzTJ9KH5bvA3PecNoZE2MSz4IUxszoHU,12739
2797
+ edc_randomization/randomization_list_verifier.py,sha256=xeybFaxW62Zq0wW36CThU_E40BPxkrYpItCRwuMcLAI,6682
2798
+ edc_randomization/randomizer.py,sha256=DU4iH8mMUXiE7UpAiKHOrJXvhdWkjTTG9ex8Ho0xIHo,12940
2799
2799
  edc_randomization/randomizers.py,sha256=JvMDAnsgvRZkl50Bawm2iLsyw3bfWfGwBafn54K5g44,297
2800
2800
  edc_randomization/site_randomizers.py,sha256=et5Yf92ld8qgn-AThrBTRALB3WInI03UK4yGw2PlsKo,4499
2801
2801
  edc_randomization/system_checks.py,sha256=S_2Vkq3J3DQVEXOV3JNNlCzuZcl1l34-tTnaBaSZaBk,3025
@@ -2953,7 +2953,7 @@ edc_review_dashboard/apps.py,sha256=oE7NrIwzeRqMzLbWe_6Mt-CqzDAw5zASwZDbdaqJP1o,
2953
2953
  edc_review_dashboard/auths.py,sha256=3Xe7yNnuOx4Kc8fwVGte0xmDYsaCZUevJQUSbRL55mU,1148
2954
2954
  edc_review_dashboard/dashboard_templates.py,sha256=hzHXLHoOjZTR0gScZkna8qAHY7yotK4QVByfPtWY_p8,174
2955
2955
  edc_review_dashboard/locale/sw/LC_MESSAGES/django.po,sha256=NQNFg4l5mpOCUwe9dkKYZ6VMS822ZiaSEAD5g4gPgEk,930
2956
- edc_review_dashboard/middleware.py,sha256=mqtK3VPtto8I8zSbmMDL9MWhiVx9VtMRV3vCMfRwPCA,743
2956
+ edc_review_dashboard/middleware.py,sha256=OYzEnaLViv7Ir1tVwscq5-jMc8Rr5MP-1ju84R1tU1A,767
2957
2957
  edc_review_dashboard/migrations/0001_initial.py,sha256=2vQfWw_dXF2tm55w3iUTgyvp_Xl54rmYuimyhr1wJAM,3884
2958
2958
  edc_review_dashboard/migrations/0002_auto_20220825_0451.py,sha256=i9aOYzLQs5ql2L1muL19OEF9-ZRC2kjaWWXuodTzd5Y,579
2959
2959
  edc_review_dashboard/migrations/0003_alter_edcpermissions_device_created_and_more.py,sha256=fwRe2loBVqpl5oAzggeV1sD4hRVr-3eqOOII691lvEg,1554
@@ -2970,19 +2970,19 @@ edc_review_dashboard/templates/edc_review_dashboard/subject_review_button.html,s
2970
2970
  edc_review_dashboard/templates/edc_review_dashboard/subject_review_listboard.html,sha256=UKar7ZSkUYo9kosBpB0YQ5gz1UIawWX-oyhvXjOsaYA,4539
2971
2971
  edc_review_dashboard/urls.py,sha256=W_a0EsvqNTut0Ji7Oi32RPDgxqAtg3CuG8snI9Qy5UY,558
2972
2972
  edc_review_dashboard/views/__init__.py,sha256=SPOYk6ibkFyId4iVtMR62pQpJ0Lpa77AUVg4naRqYRk,70
2973
- edc_review_dashboard/views/subject_review_listboard_view.py,sha256=UCe1JZS-6oeXMmXiqOVg7Nu_JDiOLy8M-ff_44uZ9eQ,2684
2973
+ edc_review_dashboard/views/subject_review_listboard_view.py,sha256=TUL9__RAwckpBMxjd1L3LWqVjzBfRPaKBJKUrpaR2d4,2684
2974
2974
  edc_screening/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2975
- edc_screening/age_evaluator.py,sha256=gWNT5vDx9EHMdRvwFJfhggO-WprPGLcTx4Wsa-CqFUk,1242
2975
+ edc_screening/age_evaluator.py,sha256=PwhHilXyvl222fYgfn-dCfMAI4EeVuQxdCdDNWh_NSo,1265
2976
2976
  edc_screening/apps.py,sha256=O2ZdsusCjy7LOrv2BWm3vX_l32FsL4HHlaz6iUiMQyw,151
2977
2977
  edc_screening/auth_objects.py,sha256=tNks5_2gexmVmUtKh5FQY8jPwNXgfdTD3H_yzmOhCys,128
2978
2978
  edc_screening/auths.py,sha256=NwJREYHgMBkuvCo43PZXtzEcwnFK13EB_peHqdPAh4U,1592
2979
2979
  edc_screening/choices.py,sha256=e8qx6dPCqTcgCTSRmzhciueOWxHPP1dbvvV0kpd2-P4,325
2980
2980
  edc_screening/constants.py,sha256=0oIMMeCJdhsVqlVTUQx4doLZVChyLYWNnCxqC3Cnm8E,52
2981
- edc_screening/eligibility.py,sha256=pdDyFHCM5wMWYGKcHu87YsOblK8ou9e1rqdceE4aFWc,2897
2982
- edc_screening/exceptions.py,sha256=3WXjNQv_No2z1LKGcJ7m3BPEmGvb3_1au1BzeUowV_U,627
2981
+ edc_screening/eligibility.py,sha256=nY3mNUOCr4NEaofAw8PLlSnU9TpaATou5jiEIkNBd1s,2941
2982
+ edc_screening/exceptions.py,sha256=QWkbDF7kh1XVVDWRcIJW0V7hVZTkeXsvQxmsWI98HJA,669
2983
2983
  edc_screening/fc.py,sha256=KSAKKORJhUept2a9Mq9mAdUeQQbpfvHPSiMTOdSgzuc,894
2984
2984
  edc_screening/form_validator_mixins.py,sha256=DBU3ewkzxTtO4lKtRGvhiWbDdtVcUS6vr5SEmMS1D20,1903
2985
- edc_screening/gender_evaluator.py,sha256=JIrgXdSpAA6us0iYPJ2NNtvG03yAivHgfsZy4rt_Tp4,399
2985
+ edc_screening/gender_evaluator.py,sha256=RqHwcXDTZibdM16NwEnNeMmRok3djyOknb8-7rEV3bU,399
2986
2986
  edc_screening/migrations/0001_initial.py,sha256=HNLX2wzHJRZOUeJONktV6LcqMX3ANacbY7QBTSuqcXU,3657
2987
2987
  edc_screening/migrations/0002_alter_edcpermissions_device_created_and_more.py,sha256=0iV-Bl2i4eKCmqgb3VgG8eYUmljDvUmNDFbKgPqyfRo,1536
2988
2988
  edc_screening/migrations/0003_alter_edcpermissions_options_and_more.py,sha256=DahSnLRqkQ7FN4wHFGhgl2ILXjpb8y9FdudAl2GXtJE,1949
@@ -2996,12 +2996,12 @@ edc_screening/model_mixins/screening_fields_model_mixin.py,sha256=KsVwIYuFFNx_2y
2996
2996
  edc_screening/model_mixins/screening_identifier_model_mixin.py,sha256=2lkd0KmBWSFf_68U609voFP_97AKwp6HKQuud5zzBT0,1728
2997
2997
  edc_screening/model_mixins/screening_methods_model_mixin.py,sha256=N6VDi6Sq0TVshvERY61Su3qL2hi7uBScvSYDj9mbBpE,840
2998
2998
  edc_screening/model_mixins/screening_model_mixin.py,sha256=P8ZDj0NIb93ItKJNumU5Xxz_oUhVLVN6jhvjqAyCVfU,1459
2999
- edc_screening/modelform_mixins.py,sha256=yMGpfOdiJQYvJwNP97kqiokvSuainMxEmlOLhBUI8SY,1492
2999
+ edc_screening/modelform_mixins.py,sha256=EAhiEs9N4Wn1w5r_vgEUVtl8A_vBl6py58_MzncyFYg,1508
3000
3000
  edc_screening/models.py,sha256=K4enndi4ov-N--3LQWeez3yuCMzmbaVGd7J72q_f73Q,306
3001
- edc_screening/screening_eligibility.py,sha256=goqceaBEHmXV3RpyezgG5HtM_UrV9kxcSxznaWCdVn4,9553
3001
+ edc_screening/screening_eligibility.py,sha256=o_AVtJL16TiC7UBKBzm7v4_CbzUYmpIEwZvB1d-VkmI,9361
3002
3002
  edc_screening/screening_identifier.py,sha256=EeQGCCj8eSFKR50GKYPG2ZB_utDcKjpUhcafYvcLMDk,318
3003
3003
  edc_screening/stubs.py,sha256=eFNCW8LQrN8LIYtTIvivvt8tGCSd7GZ92MJuXLo363Q,608
3004
- edc_screening/utils.py,sha256=x_FdfrK8H1amhvHOgmjdHCkvgqScQeKjZh3i5VkrYJY,4675
3004
+ edc_screening/utils.py,sha256=E5sMZHHq5HwsP6EMWKlz4_Ic6S17_XC8dzJfA9T422I,4722
3005
3005
  edc_search/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3006
3006
  edc_search/apps.py,sha256=FVRplFa-i0FIYsFB0g4fRruRVlykiwnRRtEkoJmU_yI,113
3007
3007
  edc_search/generate_slug.py,sha256=FXatw6FWfSuwqYtpTffJ_ESeUiI47MV11dnnOc-HWG8,817
@@ -3009,19 +3009,19 @@ edc_search/model_mixins.py,sha256=LHPFV-rlVTtnqqSN8ZF3V1Umbv31oUBSPYf-KqgMnwc,95
3009
3009
  edc_search/urls.py,sha256=_sVCnQeiAFRYKhxga3_DjoKj_4bgs1s2gjcynDiapvA,111
3010
3010
  edc_sites/__init__.py,sha256=IwBGYTNMywiVvkVOJLfxAvUeIpBiAR0DBjSgvy15Gf8,64
3011
3011
  edc_sites/admin/__init__.py,sha256=WSOdF91qWcdhb4EUqmbKw7yaFMtljf5YWu-K8fdvBAs,214
3012
- edc_sites/admin/list_filters.py,sha256=9A0GHNryr68gzAhSknNyCv9QNZfD1VLLtSmHRnN9WU4,890
3012
+ edc_sites/admin/list_filters.py,sha256=P5HE6WYLXOQkgBwGMmsln6eCGu4pBDKCJ9jdcikmKKk,923
3013
3013
  edc_sites/admin/site_admin.py,sha256=haNSrz3WiP_cMLv2SHRrKphVo316Z-RKJUORCPtBC5k,351
3014
3014
  edc_sites/admin/site_fieldset_tuple.py,sha256=s_TbpCBrM2DBATFmKf6OwnDiDWvcTWc2gfl8EEUNpG8,224
3015
- edc_sites/admin/site_model_admin_mixin.py,sha256=BDA6x_r2h1zIX2jHqsIonfUz4e7ut4Spn4XJ0OqtAsg,8917
3015
+ edc_sites/admin/site_model_admin_mixin.py,sha256=WhcJsQMOcosYfXP05xDm18vBZ9eD0iILj_O-4AWJhB0,8927
3016
3016
  edc_sites/admin_site.py,sha256=AINI5Kxx8_KimVIhpPWz_9PAvMcXGzkLWnEHKAFL-6E,163
3017
3017
  edc_sites/apps.py,sha256=MbE5MfmP676ZfwUI9Jsuf6M-KiZSmYvMqJ3zhI8BN-o,2115
3018
3018
  edc_sites/auths.py,sha256=oda_eUVL9cyfsVqUK7vpz3X5N4aGqAupVtV_nBY44-E,299
3019
- edc_sites/exceptions.py,sha256=wi-0z6Dv7fSQmuOQxDLhqhOinp1JSLxHKA5Wt6yVcLU,148
3019
+ edc_sites/exceptions.py,sha256=tONByk2eadKijHSzVLTYjgieTmUGypv8KgUP3UI3SsE,162
3020
3020
  edc_sites/form_validator_mixin.py,sha256=eN8LMpGkNaDwLYnoeJMeZGYovqnuA2hFeEwbym_CW8w,539
3021
- edc_sites/forms.py,sha256=SLxwiab7srNihuAjoNz8QA1LOy-9WZBSFfvG_bMZHTQ,57
3021
+ edc_sites/forms.py,sha256=kc4S7DI-WJsHkkoyVOc0h_pFVAtVFVQK4bMIljeLCgU,83
3022
3022
  edc_sites/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3023
3023
  edc_sites/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3024
- edc_sites/management/commands/sync_sites.py,sha256=yxqNZDzFqZuyF_DEBu-4a1r6kqA769xZ_kG4X7-WhjU,3042
3024
+ edc_sites/management/commands/sync_sites.py,sha256=5-VBpwu5Sz_hWV9Mz3-VNNH4Y8RSfDIaj5nlANYZn44,2856
3025
3025
  edc_sites/managers.py,sha256=Cx_8UsoGb0P0YoXXQS0g0omckL3foPLN1HPJO8Lodbc,286
3026
3026
  edc_sites/migrations/0001_initial.py,sha256=Wlu9KZ-EUqNYTF2dHrvUxemSpOYQRyHl8WkHa-gQ8ws,1335
3027
3027
  edc_sites/migrations/0002_auto_20190922_0452.py,sha256=a0JphBNC9dA0o0EMpil2rottvbek-kSEz0IxrqYQfTU,376
@@ -3040,19 +3040,19 @@ edc_sites/model_mixins/site_model_mixin.py,sha256=unTrWnybow0_-br604jv1kuH85xQDq
3040
3040
  edc_sites/modelform_mixins.py,sha256=hSNRoJ5Uy-oOjlqaHzvMZx0M7cE6o5iu2ueqMkWGsdQ,1727
3041
3041
  edc_sites/models/__init__.py,sha256=FOmMgO0Re1RVjvqEsEHXOF5BvDe2BqVCpQvySAvuh54,124
3042
3042
  edc_sites/models/edc_permissions.py,sha256=K4enndi4ov-N--3LQWeez3yuCMzmbaVGd7J72q_f73Q,306
3043
- edc_sites/models/site_profile.py,sha256=iLVFlWWZ051EclOsQP1hHiZ3bU2nellcicMTVYWe7vw,641
3044
- edc_sites/post_migrate_signals.py,sha256=MQwoYyPtlUUlfMAKGySAWb2AtEmkgz9sPxluvivFA4Q,531
3043
+ edc_sites/models/site_profile.py,sha256=TXYBSA4F0-lRk0W_sfO7ljJg0pVoeqcvLR0n2nYvL5w,726
3044
+ edc_sites/post_migrate_signals.py,sha256=E4Nz7Q2qEGLZA6c0t2Oh4gQMI81mnCz1boHTRrAjqb0,565
3045
3045
  edc_sites/single_site/__init__.py,sha256=4ZQgZWC4L2LyX46b7UMZgFzcS8GBWpszXvUWl8OWraw,197
3046
3046
  edc_sites/single_site/get_languages.py,sha256=wvFxnz0TRMwvPBGpHupQaZLleX7nyGLCN4zE53FwBxU,848
3047
3047
  edc_sites/single_site/get_languages_from_settings.py,sha256=97Q8iYoGqRsvbdcUk8kA0nKT1zLzWPOsxhzL1LXCPUY,395
3048
3048
  edc_sites/single_site/single_site.py,sha256=Mdm3Rga_jlgih1bN5b_M_oouEpjplkbPn4VDcCdD4xU,894
3049
- edc_sites/site.py,sha256=RR2lCTqTy06_RWCO7UHZcJ86htgekC6Q45wKW3nTXXA,12065
3049
+ edc_sites/site.py,sha256=kLVk4xKbg1ZSl7V5x-A21xodsdtx3aNABWiPLVxJ5HQ,12166
3050
3050
  edc_sites/system_checks.py,sha256=LjQ2SiKuu73HLHktR663u36MQB5jwN-5Gj6-_qgnw6Q,3639
3051
3051
  edc_sites/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3052
3052
  edc_sites/templatetags/edc_sites_extras.py,sha256=psMeeqrKOkdmeJlqVHGNY_lPlUFpvflPDhXqb6UeLOY,188
3053
3053
  edc_sites/urls.py,sha256=XUYhimFMY3YTt8A44-wYAaUd0aBPUDl0MNmIxXxBmU4,281
3054
3054
  edc_sites/utils/__init__.py,sha256=R1iguQwSmEhpwYcs0xNUCul2tqTkA6wS2x1MjqLd7uc,482
3055
- edc_sites/utils/add_or_update_django_sites.py,sha256=zLRpyxBKls48qC6JsSuLMcZM_KiCTa8BygS_RNEKp5A,2080
3055
+ edc_sites/utils/add_or_update_django_sites.py,sha256=Sg0CbKecK85EYETSmz11dzExkdSSXca9g2_SoMKRJCU,2082
3056
3056
  edc_sites/utils/get_message_text.py,sha256=0oWQvOD8Y3eVa80WVbvgHyj529MS1yzJwz7JLUgv8Ms,675
3057
3057
  edc_sites/utils/get_or_create_site_obj.py,sha256=PbLj-im-5E2vtGhRYEKLAUAYOR2JWg4WMeHNaMKGpXg,989
3058
3058
  edc_sites/utils/get_or_create_site_profile_obj.py,sha256=zY2YJXEIZPvSK_UeYyF0IuvjZPSp4ti3BlKvGY1isFw,920
@@ -3060,8 +3060,8 @@ edc_sites/utils/get_site_model_cls.py,sha256=xRLvecBArO_-CMNGyOEEQIILqbU83fPUYUv
3060
3060
  edc_sites/utils/has_profile_or_raise.py,sha256=GJ64qe92mxxZqNGyRO1a_ke174S4BdNXtH01bgn6a9M,828
3061
3061
  edc_sites/utils/insert_into_domain.py,sha256=Qqmwu7ZL2ibjJihyXCm-h5lb81XLzDruuUVMtYHAjy4,207
3062
3062
  edc_sites/utils/is_current_site_or_raise.py,sha256=eBV9n5uzQhYWWeu_dj2-QQW3pSxoVJ6x4tpWeQphErM,463
3063
- edc_sites/utils/valid_site_for_subject_or_raise.py,sha256=2TPfGDGEPYZMYZvIsR7u_JIUUkTyS_gq5Cuu7mkLlsU,1945
3064
- edc_sites/view_mixins.py,sha256=-wb3_nD05zxmWddxtC1wgbXwVOMzCNxJcYLBokwhl0E,940
3063
+ edc_sites/utils/valid_site_for_subject_or_raise.py,sha256=DbHEDuE3I2XD9h1kk2uv5FSe5zm1O9j81R1vDhDTyhw,2013
3064
+ edc_sites/view_mixins.py,sha256=cP7Retlz3dkd-AJ0Hky2nOcoBv5gjyCFIpxNfA6-kHE,952
3065
3065
  edc_subject_dashboard/__init__.py,sha256=ecLybhWo_8tq7c9HlBHnalvJTfxFkW7lg8o79xjoh5I,260
3066
3066
  edc_subject_dashboard/apps.py,sha256=wbvA8hlNAD77U8k9vWYLpBRBNWCGLDzcb7rKpVFeRJU,275
3067
3067
  edc_subject_dashboard/auths.py,sha256=wYxSu_3BLCW94weUN4FoYYQ6dJv9ojZeLECDBLs5PNc,1253
@@ -3122,7 +3122,7 @@ edc_subject_dashboard/view_utils/go_to_forms_button.py,sha256=8tY4LC2CuBxqsmZBC1
3122
3122
  edc_subject_dashboard/view_utils/requisition_button.py,sha256=fS-_AglX3TnU00_MxBBRRzvMVVEpEarVHS8AOtjxuYw,1019
3123
3123
  edc_subject_dashboard/view_utils/subject_consent_dashboard_button.py,sha256=HfXb0Y9wPfZZ7MyjTVqwrXfLfhbr2hBprMx4ofjox00,1187
3124
3124
  edc_subject_dashboard/view_utils/subject_consent_listboard_button.py,sha256=Qq922qZOhJ-7PvIM3m6jOSvXIU-oO9xzhr0EiWaoKO0,3015
3125
- edc_subject_dashboard/view_utils/subject_screening_button.py,sha256=Wn9zJem1u0wCyFOcltz5mcr95i0S1QZdoNM4mnqu_nQ,1568
3125
+ edc_subject_dashboard/view_utils/subject_screening_button.py,sha256=c5NUhsqXGtK7J7Sh-zqXCdCKZDSOvxjJINiDMNiC3-U,1606
3126
3126
  edc_subject_dashboard/view_utils/timepoint_status_button.py,sha256=tXdE8pV38OMnpBNpLHoEhMufMh-41SaE2GCraK5HvzI,3163
3127
3127
  edc_subject_dashboard/views/__init__.py,sha256=-PjvFdwPDVNFjlBtwC2rUpONdlQxjhx_N0na9LKMCG4,266
3128
3128
  edc_subject_dashboard/views/base_requisition_view.py,sha256=OWmoZuRLLwOW8ABvyHYtOHhfQ3l8U9Is7OiS_YEkzpA,1136
@@ -3212,7 +3212,7 @@ edc_utils/sqlite.py,sha256=nFT4x0gxG9K6Eru_8mkwOGZLQV9jKt2tnxbQUHQU7mE,235
3212
3212
  edc_utils/text.py,sha256=18lidD2CE2hSXgtydZFs5H723fW1EZ56JyzG1VEfD3U,3526
3213
3213
  edc_view_utils/__init__.py,sha256=wH6dVBlPnKBYW8AlN0YTsTk4dyGCI3POMMCY-hCmxO4,610
3214
3214
  edc_view_utils/apps.py,sha256=Fw_b7JzNByXHdk0CHPmIqM9jAIhaI9biTYy_npnNy80,231
3215
- edc_view_utils/dashboard_model_button.py,sha256=9K0ooGEB5P-pnm-2vr1KwnU6NXdQ0hhgXQFEd2K0C0U,1889
3215
+ edc_view_utils/dashboard_model_button.py,sha256=7WAR3HOYuzm9NsG5Nu0z7EOxu90DdbAl8SBQLUeAq5g,1897
3216
3216
  edc_view_utils/history_button.py,sha256=nd_P_Df0dSflC14r4XnjhK0eq8v8xJZutFIAt5K28MU,1243
3217
3217
  edc_view_utils/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3218
3218
  edc_view_utils/model_button.py,sha256=C0XUMJZGX6G-8m-jxCs99WW11f9-PZq0Fg_KzCZF8Bw,4487
@@ -3291,7 +3291,7 @@ edc_visit_schedule/schedule/schedule.py,sha256=ROUNin-k1oJVtx_wEXwlj5xrhTw3I_6Ve
3291
3291
  edc_visit_schedule/schedule/visit_collection.py,sha256=9OJKrLtx-H0eL9oo0dsRqYGPICiAMqEF4xIhhlinx0A,2033
3292
3292
  edc_visit_schedule/schedule/window.py,sha256=gsXW7z3P84h6kWX7e7CABmalyLGgbbIwe0Q6atIbyEI,5229
3293
3293
  edc_visit_schedule/simple_model_validator.py,sha256=5lMyVrrlAy4HxLmAqM3he7D2ssCJoyjAWDWnFmJwRT0,789
3294
- edc_visit_schedule/site_visit_schedules.py,sha256=U6h3ZKiEME41oyzjvpqTun6cieVLf9gfS7IXm7LY2pU,13078
3294
+ edc_visit_schedule/site_visit_schedules.py,sha256=MeeJjyYludPlmjrYHmnx5D6t85DZrWvPyFMgidYbewE,13087
3295
3295
  edc_visit_schedule/subject_schedule.py,sha256=gai8sQ9nek3KEu27GL656twm0zKP3I3g510effNdIT8,16552
3296
3296
  edc_visit_schedule/system_checks.py,sha256=Gp5DXTThRCFXyZ3dlN2S8FJPz16weonpjedcy6XIIms,9300
3297
3297
  edc_visit_schedule/templates/edc_visit_schedule/home.html,sha256=RqtGsq6-zXi43jU0iSv24-xsIXXHkuiHjJvF-yqDyjA,1112
@@ -3406,7 +3406,7 @@ edc_vitals/models/fields/waist_circumference.py,sha256=fZcHFDdEwWLjIVLktKrFCD9UU
3406
3406
  edc_vitals/models/fields/weight.py,sha256=zo9_9e3Cpu0UqoRbWS-iDkcDo6fK80b1dDQy4x4MyxE,921
3407
3407
  edc_vitals/utils.py,sha256=vXid44KUXxeaSyund_y5MNXc5DFJs052_PwUAjszE2k,1384
3408
3408
  edc_vitals/validators.py,sha256=vNiElWMs0rRnHRNuVoPLRf0rW_C_0xcfUyep1Y_Si5s,156
3409
- clinicedc-2.0.24.dist-info/licenses/LICENSE,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
3410
- clinicedc-2.0.24.dist-info/WHEEL,sha256=-neZj6nU9KAMg2CnCY6T3w8J53nx1kFGw_9HfoSzM60,79
3411
- clinicedc-2.0.24.dist-info/METADATA,sha256=SanRpzDjK5JhHNRsmoNLCYZtF9Q9k3bXXX2CdYsZ7ME,15787
3412
- clinicedc-2.0.24.dist-info/RECORD,,
3409
+ clinicedc-2.0.25.dist-info/licenses/LICENSE,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
3410
+ clinicedc-2.0.25.dist-info/WHEEL,sha256=-neZj6nU9KAMg2CnCY6T3w8J53nx1kFGw_9HfoSzM60,79
3411
+ clinicedc-2.0.25.dist-info/METADATA,sha256=40tXyAKH80VvRdH6fqf00N2gLL4ZUo2-hj11Uwem5x8,15787
3412
+ clinicedc-2.0.25.dist-info/RECORD,,
@@ -118,12 +118,12 @@ class SiteActionItemCollection:
118
118
  )
119
119
  return self.registry.get(name)
120
120
 
121
- def get_by_model(self, model=None) -> type[Action] | type[ActionWithNotification] | None:
121
+ def get_by_model(self, model=None) -> type[Action] | type[ActionWithNotification]:
122
122
  """Returns the action_cls linked to this reference model."""
123
123
  for action_cls in self.registry.values():
124
124
  if action_cls.get_reference_model() == model:
125
125
  return self.get(action_cls.name)
126
- return None
126
+ raise SiteActionError(f"Action does not exist for this model. Got '{model}'.")
127
127
 
128
128
  def get_add_actions_to_show(self) -> dict[str, type[Action]]:
129
129
  return {
@@ -25,7 +25,7 @@ class AppointmentButton(DashboardModelButton):
25
25
  model_obj: Appointment = None
26
26
  colors: tuple[str, str, str] = field(default=(3 * ("default",)))
27
27
  model_cls: type[Appointment] = field(default=None, init=False)
28
- appointment: Appointment = field(default=None, init=False)
28
+ appointment: Appointment | None = field(default=None, init=False)
29
29
 
30
30
  def __post_init__(self):
31
31
  self.model_cls = django_apps.get_model("edc_appointment.appointment")
@@ -14,7 +14,7 @@ from ..actions import flag_as_verified_against_paper, unflag_as_verified_against
14
14
 
15
15
 
16
16
  class ConsentModelAdminMixin:
17
- name_fields: list[str] = ["first_name", "last_name"]
17
+ name_fields: tuple[str] = ("first_name", "last_name")
18
18
  name_display_field: str = "first_name"
19
19
  actions = (flag_as_verified_against_paper, unflag_as_verified_against_paper)
20
20
 
@@ -63,22 +63,26 @@ class ConsentModelAdminMixin:
63
63
  "study_questions",
64
64
  "assessment_score",
65
65
  "consent_copy",
66
- ) + original_fields
66
+ *original_fields,
67
+ )
67
68
 
68
69
  def get_readonly_fields(self, request, obj=None) -> tuple[str, ...]:
69
70
  readonly_fields = super().get_readonly_fields(request, obj)
70
71
  fields = ("subject_identifier", "subject_identifier_as_pk")
71
72
  if obj:
72
73
  return (
73
- fields + ("consent_datetime", "identity", "confirm_identity") + readonly_fields
74
+ *fields,
75
+ "consent_datetime",
76
+ "identity",
77
+ "confirm_identity",
78
+ *readonly_fields,
74
79
  )
75
80
  return fields + readonly_fields
76
81
 
77
82
  def get_search_fields(self, request) -> tuple[str, ...]:
78
83
  search_fields: tuple[str] = super().get_search_fields(request)
79
- name_fields: tuple[str] = tuple(self.name_fields)
80
84
  return tuple(
81
- set(search_fields + ("id", "subject_identifier", *name_fields, "identity"))
85
+ {*search_fields, "id", "subject_identifier", *self.name_fields, "identity"}
82
86
  )
83
87
 
84
88
  def get_list_display(self, request) -> tuple[str, ...]:
@@ -102,10 +106,8 @@ class ConsentModelAdminMixin:
102
106
  if request.user.has_perm("edc_data_manager.add_dataquery"):
103
107
  custom_fields = list(custom_fields)
104
108
  custom_fields.insert(3, self.queries)
105
- fields = tuple(custom_fields) + tuple(
106
- f for f in list_display if f not in custom_fields
107
- )
108
- return fields
109
+ custom_fields = tuple(custom_fields)
110
+ return *custom_fields, *tuple(f for f in list_display if f not in custom_fields)
109
111
 
110
112
  def get_list_filter(self, request) -> tuple[str, ...]:
111
113
  list_filter = super().get_list_filter(request)
@@ -181,14 +183,14 @@ class ConsentModelAdminMixin:
181
183
  if links:
182
184
  formatted_html = format_html(
183
185
  '<BR>{links}<BR><A title="New query" href="{new_url}">Add query</A>',
184
- links=mark_safe("<BR>".join(links)), # nosec B703 B308
185
- new_url=mark_safe(new_url), # nosec B703 B308
186
+ links=mark_safe("<BR>".join(links)), # nosec B703 B308 # noqa: S308
187
+ new_url=mark_safe(new_url), # nosec B703 B308 # noqa: S308
186
188
  )
187
189
  else:
188
190
  formatted_html = format_html(
189
191
  '<A title="New query" href="{new_url}?"'
190
192
  'subject_identifier={subject_identifier}">Add query</A>',
191
- new_url=mark_safe(new_url), # nosec B703 B308
193
+ new_url=mark_safe(new_url), # nosec B703 B308 # noqa: S308
192
194
  subject_identifier=obj.subject_identifier,
193
195
  )
194
196
  return formatted_html
@@ -1,11 +1,11 @@
1
1
  from .edc_permissions import EdcPermissions
2
2
  from .signals import (
3
3
  requires_consent_on_pre_save,
4
- update_appointment_from_consentext_post_save,
4
+ # update_appointment_from_consentext_post_save,
5
5
  )
6
6
 
7
7
  __all__ = [
8
8
  "EdcPermissions",
9
9
  "requires_consent_on_pre_save",
10
- "update_appointment_from_consentext_post_save",
10
+ # "update_appointment_from_consentext_post_save",
11
11
  ]
@@ -1,11 +1,9 @@
1
- from django.db.models.signals import post_save, pre_save
1
+ from django.db.models.signals import pre_save
2
2
  from django.dispatch import receiver
3
3
 
4
4
  from edc_sites import site_sites
5
- from edc_visit_schedule.site_visit_schedules import site_visit_schedules
6
- from edc_visit_schedule.subject_schedule import SubjectSchedule
7
5
 
8
- from ..model_mixins import ConsentExtensionModelMixin, RequiresConsentFieldsModelMixin
6
+ from ..model_mixins import RequiresConsentFieldsModelMixin
9
7
  from ..site_consents import site_consents
10
8
 
11
9
 
@@ -52,27 +50,27 @@ def requires_consent_on_pre_save(instance, raw, using, update_fields, **kwargs):
52
50
  instance.consent_model = consent_definition.model
53
51
 
54
52
 
55
- @receiver(
56
- post_save,
57
- weak=False,
58
- dispatch_uid="update_appointment_from_consentext_post_save",
59
- )
60
- def update_appointment_from_consentext_post_save(
61
- sender, instance, raw, created, using, **kwargs
62
- ):
63
- if (
64
- not raw
65
- and not kwargs.get("update_fields")
66
- and isinstance(instance, (ConsentExtensionModelMixin,))
67
- ):
68
- cdef = site_consents.get_consent_definition(
69
- model=instance.subject_consent._meta.label_lower,
70
- version=instance.subject_consent.version,
71
- )
72
- visit_schedule, schedule = site_visit_schedules.get_by_consent_definition(cdef)
73
- subject_schedule = SubjectSchedule(
74
- instance.subject_consent.subject_identifier,
75
- visit_schedule=visit_schedule,
76
- schedule=schedule,
77
- )
78
- subject_schedule.refresh_appointments()
53
+ # @receiver(
54
+ # post_save,
55
+ # weak=False,
56
+ # dispatch_uid="update_appointment_from_consentext_post_save",
57
+ # )
58
+ # def update_appointment_from_consentext_post_save(
59
+ # sender, instance, raw, created, using, **kwargs
60
+ # ):
61
+ # if (
62
+ # not raw
63
+ # and not kwargs.get("update_fields")
64
+ # and isinstance(instance, (ConsentExtensionModelMixin,))
65
+ # ):
66
+ # cdef = site_consents.get_consent_definition(
67
+ # model=instance.subject_consent._meta.label_lower,
68
+ # version=instance.subject_consent.version,
69
+ # )
70
+ # visit_schedule, schedule = site_visit_schedules.get_by_consent_definition(cdef)
71
+ # subject_schedule = SubjectSchedule(
72
+ # instance.subject_consent.subject_identifier,
73
+ # visit_schedule=visit_schedule,
74
+ # schedule=schedule,
75
+ # )
76
+ # subject_schedule.refresh_appointments()
@@ -1,5 +1,4 @@
1
1
  from django.contrib import messages
2
- from django.utils.html import format_html
3
2
  from django.utils.safestring import mark_safe
4
3
 
5
4
 
@@ -20,18 +19,18 @@ class MessageViewMixin:
20
19
  # attempt to get the level if passed a string
21
20
  try:
22
21
  level = getattr(messages.constants, level.upper())
23
- except AttributeError:
22
+ except AttributeError as e:
24
23
  levels = ", ".join(
25
24
  [level for level in messages.constants.DEFAULT_TAGS.values()]
26
25
  )
27
26
  raise ValueError(
28
27
  f"Bad message level string: `{level}`. Possible values are: {levels}"
29
- )
28
+ ) from e
30
29
 
31
30
  messages.add_message(
32
31
  self.request,
33
32
  level,
34
- format_html("{}", mark_safe(message)), # nosec B703 B308
33
+ mark_safe(message), # noqa: S308
35
34
  extra_tags=extra_tags,
36
35
  fail_silently=fail_silently,
37
36
  )
edc_identifier/admin.py CHANGED
@@ -51,7 +51,7 @@ class IdentifierModelAdmin(admin.ModelAdmin):
51
51
  )
52
52
  search_fields = ("identifier", "subject_identifier", "linked_identifier")
53
53
 
54
- def get_readonly_fields(self, request, obj=None) -> tuple[str, ...]:
54
+ def get_readonly_fields(self, request, obj=None) -> tuple[str, ...]: # noqa: ARG002
55
55
  return (
56
56
  "identifier",
57
57
  "protocol_number",
@@ -64,4 +64,5 @@ class IdentifierModelAdmin(admin.ModelAdmin):
64
64
  "linked_identifier",
65
65
  "device_id",
66
66
  "identifier_prefix",
67
- ) + tuple(DEFAULT_BASE_FIELDS)
67
+ *DEFAULT_BASE_FIELDS,
68
+ )
@@ -61,12 +61,12 @@ class Identifier:
61
61
  pattern = pattern or self.identifier_pattern
62
62
  try:
63
63
  identifier = re.match(pattern, identifier).group()
64
- except AttributeError:
64
+ except AttributeError as e:
65
65
  error_msg = error_msg or (
66
66
  "Invalid identifier format for pattern "
67
67
  f"{pattern}. Got identifier='{identifier}'"
68
68
  )
69
- raise IdentifierError(error_msg)
69
+ raise IdentifierError(error_msg) from e
70
70
  return identifier
71
71
 
72
72
  @property
@@ -102,9 +102,10 @@ class Identifier:
102
102
  .order_by("-sequence_number")
103
103
  .first()
104
104
  )
105
- return instance.identifier
106
105
  except AttributeError:
107
106
  return None
107
+ else:
108
+ return instance.identifier
108
109
 
109
110
  def remove_separator(self, identifier):
110
111
  """Returns the identifier after removing the separator.
@@ -126,5 +127,4 @@ class Identifier:
126
127
  for item in self.identifier_as_list:
127
128
  items.append(identifier[start : start + len(item)])
128
129
  start += len(item)
129
- identifier = (self.separator or "").join(items)
130
- return identifier
130
+ return (self.separator or "").join(items)
@@ -113,7 +113,7 @@ class SubjectIdentifierMethodsModelMixin(models.Model):
113
113
  raise IdentifierError(
114
114
  "Cannot lookup a unique RegisteredSubject instance. "
115
115
  f"Identity {self.identity} is not unique. Got {e}"
116
- )
116
+ ) from e
117
117
  return obj
118
118
 
119
119
  class Meta:
edc_identifier/models.py CHANGED
@@ -1,6 +1,7 @@
1
1
  from django.db import models
2
2
  from django.db.models import UniqueConstraint
3
3
 
4
+ from edc_constants.constants import NULL_STRING
4
5
  from edc_model.models import BaseUuidModel
5
6
  from edc_sites.model_mixins import SiteModelMixin
6
7
 
@@ -25,21 +26,21 @@ class IdentifierModel(SiteModelMixin, BaseUuidModel):
25
26
 
26
27
  name = models.CharField(max_length=100)
27
28
 
28
- subject_identifier = models.CharField(max_length=50, default="")
29
+ subject_identifier = models.CharField(max_length=50, default=NULL_STRING)
29
30
 
30
31
  sequence_number = models.IntegerField(default=1)
31
32
 
32
- linked_identifier = models.CharField(max_length=50, default="")
33
+ linked_identifier = models.CharField(max_length=50, default=NULL_STRING)
33
34
 
34
35
  device_id = models.IntegerField()
35
36
 
36
- protocol_number = models.CharField(max_length=25, default="")
37
+ protocol_number = models.CharField(max_length=25, default=NULL_STRING)
37
38
 
38
- model = models.CharField(max_length=100, default="")
39
+ model = models.CharField(max_length=100, default=NULL_STRING)
39
40
 
40
- identifier_type = models.CharField(max_length=100, default="")
41
+ identifier_type = models.CharField(max_length=100, default=NULL_STRING)
41
42
 
42
- identifier_prefix = models.CharField(max_length=25, default="")
43
+ identifier_prefix = models.CharField(max_length=25, default=NULL_STRING)
43
44
 
44
45
  objects = IdentifierModelManager()
45
46
 
@@ -21,7 +21,7 @@ class IdentifierMissingTemplateValue(Exception): # noqa: N818
21
21
 
22
22
 
23
23
  class ResearchIdentifier:
24
- label: str = None # e.g. subject_identifier, plot_identifier, etc
24
+ label: str | None = None # e.g. subject_identifier, plot_identifier, etc
25
25
  identifier_type: str | None = None # e.g. 'subject', 'infant', 'plot', a.k.a subject_type
26
26
  template: str | None = None
27
27
  padding: int = 5
@@ -100,7 +100,7 @@ class ShortIdentifier:
100
100
  tries += 1
101
101
  random_string = "".join(
102
102
  [
103
- random.choice(allowed_chars) # nosec B311
103
+ random.choice(allowed_chars) # nosec B311 # noqa: S311
104
104
  for _ in range(self.random_string_length)
105
105
  ]
106
106
  )