clinicedc 2.0.21__py3-none-any.whl → 2.0.22__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 (63) hide show
  1. {clinicedc-2.0.21.dist-info → clinicedc-2.0.22.dist-info}/METADATA +1 -1
  2. {clinicedc-2.0.21.dist-info → clinicedc-2.0.22.dist-info}/RECORD +63 -63
  3. edc_appointment/utils.py +4 -5
  4. edc_pdf_reports/report.py +2 -2
  5. edc_subject_dashboard/middleware.py +2 -3
  6. edc_subject_dashboard/requisition_labels.py +2 -2
  7. edc_subject_dashboard/requisition_report.py +10 -6
  8. edc_subject_dashboard/templatetags/edc_subject_dashboard_extras.py +33 -33
  9. edc_subject_dashboard/view_mixins/subject_visit_view_mixin.py +1 -1
  10. edc_subject_dashboard/view_utils/crf_button.py +5 -4
  11. edc_subject_dashboard/view_utils/go_to_forms_button.py +1 -2
  12. edc_subject_dashboard/view_utils/subject_screening_button.py +2 -6
  13. edc_subject_dashboard/views/base_requisition_view.py +2 -3
  14. edc_subject_dashboard/views/refresh_appointments_view.py +6 -6
  15. edc_subject_dashboard/views/requisition_print_actions_view.py +5 -5
  16. edc_subject_dashboard/views/requisition_verify_actions_view.py +1 -1
  17. edc_timepoint/form_mixin.py +3 -3
  18. edc_timepoint/timepoint.py +1 -1
  19. edc_timepoint/timepoint_collection.py +3 -3
  20. edc_transfer/action_items.py +1 -2
  21. edc_transfer/form_validators.py +2 -2
  22. edc_unblinding/action_items.py +2 -4
  23. edc_unblinding/admin/autocomplete_admin.py +2 -2
  24. edc_unblinding/admin/unblinding_request_admin.py +2 -2
  25. edc_unblinding/admin/unblinding_review_admin.py +2 -2
  26. edc_unblinding/auths.py +11 -5
  27. edc_unblinding/models/unblinding_review.py +2 -2
  28. edc_utils/age.py +7 -3
  29. edc_utils/celery.py +3 -3
  30. edc_utils/context_processors_check.py +1 -1
  31. edc_utils/get_datetime_from_env.py +1 -1
  32. edc_utils/get_static_file.py +24 -14
  33. edc_utils/logging_filters/ignore_specific_ip_disallowed_host.py +1 -1
  34. edc_utils/message_in_queue.py +1 -4
  35. edc_utils/show_urls.py +1 -1
  36. edc_utils/text.py +1 -1
  37. edc_view_utils/model_button.py +2 -3
  38. edc_visit_schedule/exceptions.py +3 -3
  39. edc_visit_schedule/management/commands/find_invalid_onschedules.py +6 -4
  40. edc_visit_schedule/modelform_mixins/crf/visit_schedule_crf_modelform_mixin.py +1 -1
  41. edc_visit_schedule/modelform_mixins/off_schedule_modelform_mixin.py +3 -3
  42. edc_visit_schedule/modelform_mixins/visit_schedule_non_crf_modelform_mixin.py +1 -1
  43. edc_visit_schedule/models/signals.py +3 -8
  44. edc_visit_schedule/ordered_collection.py +4 -8
  45. edc_visit_schedule/post_migrate_signals.py +2 -2
  46. edc_visit_schedule/schedule/schedule.py +3 -7
  47. edc_visit_schedule/schedule/window.py +1 -1
  48. edc_visit_schedule/simple_model_validator.py +4 -4
  49. edc_visit_schedule/site_visit_schedules.py +12 -16
  50. edc_visit_schedule/subject_schedule.py +8 -8
  51. edc_visit_schedule/system_checks.py +3 -3
  52. edc_visit_schedule/templatetags/edc_visit_schedule_extras.py +2 -2
  53. edc_visit_schedule/utils.py +13 -14
  54. edc_visit_schedule/view_mixins.py +1 -1
  55. edc_visit_schedule/visit/crf.py +7 -6
  56. edc_visit_schedule/visit/forms_collection.py +2 -2
  57. edc_visit_schedule/visit/requisition.py +3 -3
  58. edc_visit_schedule/visit/visit.py +30 -30
  59. edc_visit_schedule/visit/window_period.py +3 -2
  60. edc_visit_schedule/visit_schedule/schedules_collection.py +5 -3
  61. edc_visit_schedule/visit_schedule/visit_schedule.py +5 -5
  62. {clinicedc-2.0.21.dist-info → clinicedc-2.0.22.dist-info}/WHEEL +0 -0
  63. {clinicedc-2.0.21.dist-info → clinicedc-2.0.22.dist-info}/licenses/LICENSE +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clinicedc
3
- Version: 2.0.21
3
+ Version: 2.0.22
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
@@ -439,7 +439,7 @@ edc_appointment/stubs.py,sha256=sJF2Hq4ri2PjfTMwisacpULfRBzRXIPc0TNlhHGTfwg,1195
439
439
  edc_appointment/system_checks.py,sha256=f4ue8BS7J6ii6JuUfNjDterSyEShzF3gNbwKX7HAHDQ,429
440
440
  edc_appointment/templates/button.html,sha256=1_KluGcdDJMjMmxaqkf0NWy0yKASqB9YtWKnYJuwwOw,451
441
441
  edc_appointment/urls.py,sha256=PmIaTbc-MQRb3BxVJ560m4gK0BmGvTUyOqniA2il2j0,634
442
- edc_appointment/utils.py,sha256=LyOxqckObbp6FGeqm4kv4jt8ukbjnFWOrY_2trjY9ic,31355
442
+ edc_appointment/utils.py,sha256=6K0GkLdUJtVxvmHcRNOnLNeFNgAcCtn6pjeVtFmNBzw,31326
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
@@ -2111,7 +2111,7 @@ edc_pdf_reports/flowables/textbox.py,sha256=u_AgwkWDCqNsOeZo-yNToVL27SDgMkzf7BJm
2111
2111
  edc_pdf_reports/flowables/textfield.py,sha256=0KWdjPVBdZsmCN5MaHbBzPtAEcE3NPcFOQz3C55pKjs,1144
2112
2112
  edc_pdf_reports/model_mixins.py,sha256=K2oFqrvucKmn9vqW7iL023lZODcj4nkDSwwTPhu-i8g,677
2113
2113
  edc_pdf_reports/numbered_canvas.py,sha256=5eKBdEX4nUv_ZhSbGkF5tx1gAC_-LadgHREqc3Wr9ak,1907
2114
- edc_pdf_reports/report.py,sha256=38ecxZ3guMriJNuWjfxhT9N-iKmhlHD8U0EZm_ymJug,7048
2114
+ edc_pdf_reports/report.py,sha256=-8_lLV9Nvy-Q8fmmbchzmNz1J63gdE-k2G_9BsycVDg,7080
2115
2115
  edc_pdf_reports/static/edc_pdf_reports/clinicedc_logo.jpg,sha256=QDy3Gxxe2pfljXuXMf-CNd8lmLcW28s1quCIZRgwaw4,6725
2116
2116
  edc_pdf_reports/templates/edc_pdf_reports/pdf_button.html,sha256=pDqtwIAqSUYCKc5HC1EhznhRyzFYNWMQWlxeEV6RHjg,167
2117
2117
  edc_pdf_reports/templates/edc_pdf_reports/pdf_intermediate_edc.html,sha256=bDjKXEHhnN5TLp3h0Q6fW0ODZSbu-T6925PwkcDmA-s,1390
@@ -3067,7 +3067,7 @@ edc_subject_dashboard/apps.py,sha256=wbvA8hlNAD77U8k9vWYLpBRBNWCGLDzcb7rKpVFeRJU
3067
3067
  edc_subject_dashboard/auths.py,sha256=wYxSu_3BLCW94weUN4FoYYQ6dJv9ojZeLECDBLs5PNc,1253
3068
3068
  edc_subject_dashboard/dashboard_templates.py,sha256=OUUwFZ0KTAqxBw1DYlaVv5RI2_NxRa5oQxrmwVzq3U4,189
3069
3069
  edc_subject_dashboard/locale/sw/LC_MESSAGES/django.po,sha256=lzcHVCkytUQ2Vko7hendgJSoE-p6DnCZSpnrwbgpAQo,1940
3070
- edc_subject_dashboard/middleware.py,sha256=WgcdyJxMaNdgke6r3HA8RqjkQ5xuUFe-Afr211LCj7k,863
3070
+ edc_subject_dashboard/middleware.py,sha256=LLoRoxfBL95IpBu9ZpKpA3EghE7NFHI8Dhms0kwIa5E,851
3071
3071
  edc_subject_dashboard/migrations/0001_initial.py,sha256=HNLX2wzHJRZOUeJONktV6LcqMX3ANacbY7QBTSuqcXU,3657
3072
3072
  edc_subject_dashboard/migrations/0002_alter_edcpermissions_device_created_and_more.py,sha256=y6ZF9B2doK2fpZnlWnoRfVAq1RpUQVcszAY4M9cztX4,1544
3073
3073
  edc_subject_dashboard/migrations/0003_edcpermissions_locale_created_and_more.py,sha256=bkTf8buNs1bXdY5n_YFhri5t2k0KaIookKPzw6uMlAI,986
@@ -3076,8 +3076,8 @@ edc_subject_dashboard/migrations/0005_alter_edcpermissions_device_created_and_mo
3076
3076
  edc_subject_dashboard/migrations/0006_alter_edcpermissions_revision.py,sha256=NyY0KIvOB696hjVyACMZ9q4CFC0akBB7W17jRq7u8a8,800
3077
3077
  edc_subject_dashboard/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3078
3078
  edc_subject_dashboard/models.py,sha256=f6P4zXxLQdTAbn2KnFlwfE86Lmzj7Ecp4JJ2F8mrwTc,286
3079
- edc_subject_dashboard/requisition_labels.py,sha256=u3uMooivavMLmdjkmQ0L6Y12gTy2yMflWRYuKtiLsFc,2329
3080
- edc_subject_dashboard/requisition_report.py,sha256=eMCG-TR6YrHllUGWqfssev4kgTynnpQ3eMeyYeUa7B0,13731
3079
+ edc_subject_dashboard/requisition_labels.py,sha256=8TfuqULJhAGGmbCT_koCuwoGOtcm1kXq8hvOtgGtQ9E,2330
3080
+ edc_subject_dashboard/requisition_report.py,sha256=HShdFmYIsNSIzHdXsrB54MJz1PNcPZ7fu2428HgEEcc,13836
3081
3081
  edc_subject_dashboard/requisition_verifier.py,sha256=tcpTUIYtvKq9Mh6pUeUSxnjkhDZaQIopjzSZV6b7euc,2795
3082
3082
  edc_subject_dashboard/system_checks.py,sha256=W99olKU5kFqnnFyAkUa_QnRXmrHOrUweA3RtEv7j4uE,414
3083
3083
  edc_subject_dashboard/templates/edc_subject_dashboard/appointment_in_progress.html,sha256=dEyW9Sibf7WyiYNbfdEDtgtIPsipZDOZPL_DVhB6MKU,241
@@ -3111,44 +3111,44 @@ edc_subject_dashboard/templates/edc_subject_dashboard/dashboard_button.html,sha2
3111
3111
  edc_subject_dashboard/templates/edc_subject_dashboard/print_requisition_popover.html,sha256=SyIgpJs0YHvu0xalFdvpz7XZCOVB1WrPRlH3ELOMbbk,1477
3112
3112
  edc_subject_dashboard/templates/edc_subject_dashboard/requisition_panel_actions.html,sha256=1mO3fVOksUJSykNPNPzHgXvWgqoF8aFdP8nNu7gbpsg,2422
3113
3113
  edc_subject_dashboard/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3114
- edc_subject_dashboard/templatetags/edc_subject_dashboard_extras.py,sha256=3Ugs9fWtcmtxjwnRGzfk7n-m6FIGZ1tL1xBZ1UiS98k,17199
3114
+ edc_subject_dashboard/templatetags/edc_subject_dashboard_extras.py,sha256=ZipARZUGleYMF_o3ubex4CVI80J9uyY3ZRzlG8E3HQ4,17366
3115
3115
  edc_subject_dashboard/urls.py,sha256=rNJMiKrQbpTnLL4_EIW3wbK4bJDaFvjG798zvnHabCk,1285
3116
3116
  edc_subject_dashboard/view_mixins/__init__.py,sha256=kfgJVLmW74gh0ohRm6kXRN-KeQWAMQZ1Plf6tyg--tU,158
3117
3117
  edc_subject_dashboard/view_mixins/registered_subject_view_mixin.py,sha256=mWZdATTVGbCKp9pce3wFkhTCQEnzXukPbVvH-WjRI6U,1890
3118
- edc_subject_dashboard/view_mixins/subject_visit_view_mixin.py,sha256=5MGURmmRT_oVb-YuwcdGwyTh6xELsZUd-22QxRepvPo,3244
3118
+ edc_subject_dashboard/view_mixins/subject_visit_view_mixin.py,sha256=b65pGmBznurd6-swai0IBT6ICMogLeokfp8LVK5dgzs,3258
3119
3119
  edc_subject_dashboard/view_utils/__init__.py,sha256=xJbNKTYb7YfTn_EvFGk_yUW0-SdkTpCL9c1V7_Ri9YE,644
3120
- edc_subject_dashboard/view_utils/crf_button.py,sha256=Rmqz13FaOCn-hR4hSq0_k2ROI3YOszlqw6CvzShE-Eg,769
3121
- edc_subject_dashboard/view_utils/go_to_forms_button.py,sha256=5BgKhSo59hfLMd3VlCcDB4FCHxfCcuND4dhg1l5_fV4,2844
3120
+ edc_subject_dashboard/view_utils/crf_button.py,sha256=Vhh5jYmeoquD4JvlusIrGlQrbaSVeCdjZ-J7_gqt4Xo,766
3121
+ edc_subject_dashboard/view_utils/go_to_forms_button.py,sha256=8tY4LC2CuBxqsmZBC1iwPtFQUAYU0AUlj7wYRpmJSA4,2826
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=MBquHKBTRLsjxxD4giSN52Q2nLnpIpX9n2ivSEGDC_A,1634
3125
+ edc_subject_dashboard/view_utils/subject_screening_button.py,sha256=Wn9zJem1u0wCyFOcltz5mcr95i0S1QZdoNM4mnqu_nQ,1568
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
- edc_subject_dashboard/views/base_requisition_view.py,sha256=lNHXC3TM9XU3N9OsKFYRmSA36sNZYG6aRPJz4gMrCPw,1154
3129
- edc_subject_dashboard/views/refresh_appointments_view.py,sha256=_arMtpATf_5SRPaBuGKNH71L49D76uWPpFxmMhS0XXw,1119
3130
- edc_subject_dashboard/views/requisition_print_actions_view.py,sha256=h4od7TOGiDyDOQKoLUZIzTpYLQOgJtGYgxAdLvYIFEY,7333
3131
- edc_subject_dashboard/views/requisition_verify_actions_view.py,sha256=0cZVfxrsWpnr_xsl20hv5jlISssRAT7j7aB6JcIf3dI,1416
3128
+ edc_subject_dashboard/views/base_requisition_view.py,sha256=OWmoZuRLLwOW8ABvyHYtOHhfQ3l8U9Is7OiS_YEkzpA,1136
3129
+ edc_subject_dashboard/views/refresh_appointments_view.py,sha256=Wsfc2pn44ZhZRAaOchSgMkdoVOCFoFHulQxBhzIfeSw,1125
3130
+ edc_subject_dashboard/views/requisition_print_actions_view.py,sha256=0jPMUODv5IHhEsYJ5-ia5wx2odb-TkhiuPajFZPzJ5g,7433
3131
+ edc_subject_dashboard/views/requisition_verify_actions_view.py,sha256=b9wacujAuXjzDt06i27LtQECIo6rFJrqulKJv2gn1i4,1432
3132
3132
  edc_subject_dashboard/views/subject_dashboard_view.py,sha256=vyNHKl1JaACy7ixZCSPtzbn8CLU_CQQh8R1wYk2apvA,1972
3133
3133
  edc_subject_dashboard/wsgi.py,sha256=C3xfh4zRCDI3sXViXAMzhEDwlxuuJleTMJrZdXipr5Y,420
3134
3134
  edc_timepoint/__init__.py,sha256=e4sjI6ped8ZAMuBKDAllrZZTAw5U4n690MWN1sf-LZ8,87
3135
3135
  edc_timepoint/apps.py,sha256=bfAL60xOlaTPmi2cQBvmOEph0RwDUQHEMBYFTpYwDno,1095
3136
3136
  edc_timepoint/choices.py,sha256=NQ-hdJwS_CX8bfxQF6RY9O-z9P41Bk5zaQpEvSvdEfg,182
3137
3137
  edc_timepoint/constants.py,sha256=COoxO6sAQ1Aw6MtqZWgaFtJiDxpISAz4SzO-1X6SnNA,74
3138
- edc_timepoint/form_mixin.py,sha256=vIBlYL_vcfTWnVPjs4K5cKZ3dGDJY6wAPGMpKyioevo,948
3138
+ edc_timepoint/form_mixin.py,sha256=eBKR-7VKSe3pZrca2BUmOrytMl161yWQhrltDk8Gfn8,936
3139
3139
  edc_timepoint/model_mixins.py,sha256=01i_YA395MtY3HwetBfDhtHxwwV80FCUOlqdNziTezc,6073
3140
3140
  edc_timepoint/models/__init__.py,sha256=uOMJiGRAkgG5ehPUNPmfMVHQB5WJlKd-U4aAybNvA0Y,51
3141
3141
  edc_timepoint/models/signals.py,sha256=NFgmQzsydRxAjevdDTitvigssAd2FwK2U6Eq41fKVUU,512
3142
- edc_timepoint/timepoint.py,sha256=UMia0CailnRO7Vjn-db851AaEtiweI4c38qlO7Sl-XU,678
3143
- edc_timepoint/timepoint_collection.py,sha256=h-hnSh8epJojtfWxi4efh-JegHA9FDPh4wyPHYzuxH8,1226
3142
+ edc_timepoint/timepoint.py,sha256=3cy04uuvOGgVj0xmttnJIjJcdntMrBfmYYPL2GBb3cs,692
3143
+ edc_timepoint/timepoint_collection.py,sha256=PE04M5Z6WpvmrIGaHnUQeeTnjJ1NQ_WIWxFOb5VAioo,1252
3144
3144
  edc_timepoint/timepoint_lookup.py,sha256=tQDJw5R2Ig7BA4nJO7mqVCRQAOibuJO92Kgoh2y3iM8,1726
3145
3145
  edc_timepoint/utils.py,sha256=AC6CTqmahCKNTHC1Ma2prldi5JlYFeMj6oOmhZTkeGU,140
3146
3146
  edc_transfer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3147
- edc_transfer/action_items.py,sha256=RNyJ6nT8JKzIuNeC5vRvAFgfGWImrIwHrz4hXo4zCbE,769
3147
+ edc_transfer/action_items.py,sha256=DqYNVX7UNbC28lGfFW2i6DeKXw4GZZqc4p7b0n2-XtM,733
3148
3148
  edc_transfer/apps.py,sha256=0yhvI8CsTZeza4OOjRQ3y8CAxKIxK5dJRN8wPnEXDp0,149
3149
3149
  edc_transfer/choices.py,sha256=Y5dCHTfCIFueJYWWQm0nL_vbWf8sQ01dkCE4n3txGds,181
3150
3150
  edc_transfer/constants.py,sha256=oICUq7brwBylRTqEFmUFDfsUb6Nyp-esRqLeeTOF878,87
3151
- edc_transfer/form_validators.py,sha256=gUOmCT3Tocvdd0SNBGNgQIPcxDoKNO2OHLAkOUSJI_Q,3325
3151
+ edc_transfer/form_validators.py,sha256=4b6SL9u40Ii6YAS5vl_deL4NVC_UiwKpDpHnTi11HEM,3337
3152
3152
  edc_transfer/forms.py,sha256=Nq2vbNJY3-cSJVlRqhK8yFLm4NYzcs6TOmmTvKGUx0A,816
3153
3153
  edc_transfer/list_data.py,sha256=VnLqxlcZmoIOrJyrugs248RhzlkQyjaP1J8boZURiZ4,449
3154
3154
  edc_transfer/model_mixins.py,sha256=QJemH8zoOkSU7NcEyzE3pKUntQUzFpp8NwjCm8bwrQw,2701
@@ -3156,15 +3156,15 @@ edc_transfer/modeladmin_mixins.py,sha256=L30YRc3_Zx0jdmcHyuxurA5rvkvKh1NuhwqpsIT
3156
3156
  edc_transfer/modelform_mixins.py,sha256=MDfkUhxdU_QMc4IzM0j0_4WaBVBhRJDi2PnnobwTiXA,825
3157
3157
  edc_transfer/models.py,sha256=m6R5bis5oeZNAKWVQwZ9ZCV5xOQ_QVntuz5tU3t3Wwo,633
3158
3158
  edc_unblinding/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3159
- edc_unblinding/action_items.py,sha256=ddxL8MAD14BO9YPL62dfYjpEblwClBZ4m8g3mLG0AJk,1937
3159
+ edc_unblinding/action_items.py,sha256=Avp8h5ng5bBrJzNIDgKMjYrlg4bSSmd1cZI-CZ6YJS8,1865
3160
3160
  edc_unblinding/admin/__init__.py,sha256=bL6PZOQ2hqQfrHRbQDdeu2oXlk70Cir4cJfsrfWo-9k,223
3161
- edc_unblinding/admin/autocomplete_admin.py,sha256=3EB8f5Uhjwtf6hr_ZxXsfEDCx4MlIl23TZO47ph3gFE,1414
3162
- edc_unblinding/admin/unblinding_request_admin.py,sha256=XTdR4YYmBqHAHzR-vK86OcDBHzkuk0jhlnSpo3FRcZk,1541
3163
- edc_unblinding/admin/unblinding_review_admin.py,sha256=GGQFJD6jB9UImYC9Jj750mDjFgoPqtDLF7ye3zA8qx0,1097
3161
+ edc_unblinding/admin/autocomplete_admin.py,sha256=1qmUe0HyJFk2Y-iSY2Y0sTqf0juBmWKGBjbyDQ5W9Vs,1414
3162
+ edc_unblinding/admin/unblinding_request_admin.py,sha256=PpHpGtjT35NsEjd_Ubp36iW8cDIFb_KCR3c_N6DTz2U,1558
3163
+ edc_unblinding/admin/unblinding_review_admin.py,sha256=LFqQ-KwPQK-lHIe12yWOQSF916gMG8QvfhCNz0-noZc,1114
3164
3164
  edc_unblinding/admin_site.py,sha256=fI2Qfnb71dD47RfiWKhXFsueEbWTHOXW9tdjJo4tDDM,173
3165
3165
  edc_unblinding/apps.py,sha256=xCm4pdpg5YrOll-Mk0LOLqfHgHBKm1KrYla6u90Op34,229
3166
3166
  edc_unblinding/auth_objects.py,sha256=wWckQGaCh4VmuEAmsaLwr-lRJAlvQg-nxrMkw18PLOQ,839
3167
- edc_unblinding/auths.py,sha256=tqQ1P-JCVucjeVM2g8TWTzGzpjl3--Bcyf8TfqTBr8k,610
3167
+ edc_unblinding/auths.py,sha256=lrawxWwNIBYkx6yQ8_S-A8Fz8wprbGfg9vblKjIZ2Rg,852
3168
3168
  edc_unblinding/constants.py,sha256=ULJb-EMh-pI20APRJOf28DC2iniM6mrWNWY3D9gcT5M,96
3169
3169
  edc_unblinding/forms/__init__.py,sha256=Zyu4-ATRRGbSTYqoBnxq3GAm34zfXq51wk8iEtEFuWk,116
3170
3170
  edc_unblinding/forms/unblinding_request_form.py,sha256=TWMTFJe8rcPqdHajLYKt1zxvZV2KWhd0q1f2v75NWXY,810
@@ -3188,34 +3188,34 @@ edc_unblinding/migrations/0016_alter_historicalunblindingrequest_revision_and_mo
3188
3188
  edc_unblinding/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3189
3189
  edc_unblinding/models/__init__.py,sha256=J9uKxJNPMYKPLOw96xTvvzVvH2rpf60wX-Lk45COals,175
3190
3190
  edc_unblinding/models/unblinding_request.py,sha256=HodDIIxpwSQpY1X6Nl-JoUGUisZ_yO6lHPT_EDAHSwg,2256
3191
- edc_unblinding/models/unblinding_review.py,sha256=2z75yj6i-btNHgPT9NpQunVAnAV2FRvkb1GRUBbtpJ8,1740
3191
+ edc_unblinding/models/unblinding_review.py,sha256=4OwQn6JWrx3346_0fCyyFBotUoLs6_PgV1rUB_IkJ2Q,1762
3192
3192
  edc_unblinding/models/unblinding_user.py,sha256=BOjHLHN1YAJO3oZN5yBz5tA1Cy6FakT5uO_UyisIHj4,713
3193
3193
  edc_unblinding/urls.py,sha256=uQYNuDE8QpAmN31hE95BltHDYkMOa8WGIMYcafAh4Bw,304
3194
3194
  edc_utils/__init__.py,sha256=ogi8SSiV1t9AvBegWJ-by6QDMioelbA6ZnGNvJ3k9-U,1682
3195
- edc_utils/age.py,sha256=6wdea5n5CzeqOFIcbrI1RQAFxq4T1L1NLNLQyPxlHJM,2626
3195
+ edc_utils/age.py,sha256=8sxX5PZveuLF3JKrdV2fTzN1F5Qhom_gR-37CzgKAno,2691
3196
3196
  edc_utils/apps.py,sha256=PhmjQhf2uRbmIQnvzc_2qp7WqDXpRp6WyojveHI0YHI,221
3197
- edc_utils/celery.py,sha256=ZaitoRrUdsPiKGzdoWG6RDRrSxVq3kGQ4mgVWBFFshY,1166
3198
- edc_utils/context_processors_check.py,sha256=QTJWxXPF1mIX130CzQuOD_UWhboa9Ygo0lw6A9uiAqo,679
3197
+ edc_utils/celery.py,sha256=oDh6JmClxeMgyDZMUOHFF2Dwcx7WqtzZJIYW31QKlyo,1172
3198
+ edc_utils/context_processors_check.py,sha256=E6fAoVDyon-o0r5XQiRteL1XoHkWPg0GqhukiDxyWIA,696
3199
3199
  edc_utils/dashboard_middleware_check.py,sha256=scuaB4qwSlErLzv4nwEPLmcLuaZaR6l1OnyurXVsDms,463
3200
3200
  edc_utils/date.py,sha256=nFcazebLFW2cGze_vVXSUdWVIsOf_cSlz4xLJ8yldZQ,1261
3201
3201
  edc_utils/disable_signals.py,sha256=aAr3nnPeNEgzi2Lf06NZukMOc_N0ODEJ9xeQi8e-l_o,1269
3202
- edc_utils/get_datetime_from_env.py,sha256=hLyJ9kIZccKi4wU3XboqicZRr1yAziqIV-og0Xtx-F0,640
3203
- edc_utils/get_static_file.py,sha256=WtKzJpmHP6XisosOudgrvVLKTTuiOa80r7kSe-fw_aw,862
3202
+ edc_utils/get_datetime_from_env.py,sha256=75cPQVub9lv9j4Hwsk_zQI_W7mSXOnl-st7i6fPE3rA,647
3203
+ edc_utils/get_static_file.py,sha256=uSb6TK-tiaCdoYMsHiNMWkcDt6TtMS6wmsPo_UQd928,988
3204
3204
  edc_utils/get_uuid.py,sha256=kcLQX9JpfYBNQtpOxxdKKr-M9C9TDP4_xSRnHgdvpHk,64
3205
3205
  edc_utils/logging_filters/__init__.py,sha256=97cn5sz3DXk94FCpiVrTaYcGKpS-Z-bLL-WojS-TZBo,79
3206
- edc_utils/logging_filters/ignore_specific_ip_disallowed_host.py,sha256=U4Bn2R0HUd1m3-Q2pDuDizxBPbl1rFV9U9ZPuIZ81Mg,577
3207
- edc_utils/message_in_queue.py,sha256=qNlrlhf-JPzpqIDP4i9nMGUE6Fegs5qm6taQwJIbfJ8,245
3206
+ edc_utils/logging_filters/ignore_specific_ip_disallowed_host.py,sha256=e6XJqYmloOnfqnWjYXvciguUxtRZDCba9Lu_goFyQPY,570
3207
+ edc_utils/message_in_queue.py,sha256=9IiN1GYE57i_-WXoXDpza7TckPKucDhpSArzw3BxhaA,203
3208
3208
  edc_utils/paths_for_urlpatterns.py,sha256=dNH41UxqDH-1BcjBgQ2EttlEwL7UttmW7vhlQQ4XcZQ,605
3209
3209
  edc_utils/round_up.py,sha256=pwlailrQG9xZGncu9qEPrrC4ElwqaqSNx8pYVa-qSbM,838
3210
- edc_utils/show_urls.py,sha256=2gMgxJre5c9Oawe_9K3XZHNkmLs8vdx1_vZjy_Kx6H8,3691
3210
+ edc_utils/show_urls.py,sha256=WcttdSp-BepHRI4WQYWxsXzxHqHruOb3EH9vNA8292M,3689
3211
3211
  edc_utils/sqlite.py,sha256=nFT4x0gxG9K6Eru_8mkwOGZLQV9jKt2tnxbQUHQU7mE,235
3212
- edc_utils/text.py,sha256=Dn8idrtKVy2I6sHTVd-sMVnkjx5RkJUkkb2mp5uJHTo,3512
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
3215
  edc_view_utils/dashboard_model_button.py,sha256=9K0ooGEB5P-pnm-2vr1KwnU6NXdQ0hhgXQFEd2K0C0U,1889
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
- edc_view_utils/model_button.py,sha256=FbYI3fPnCXslXrzlCY4EF5C7zfrAVg_qpARbi-d3eCI,4507
3218
+ edc_view_utils/model_button.py,sha256=C0XUMJZGX6G-8m-jxCs99WW11f9-PZq0Fg_KzCZF8Bw,4487
3219
3219
  edc_view_utils/next_querystring.py,sha256=Rl-M5ZL-GaK3GqPWzvnnn20ssqIMEg1ApiM5AE3Gu5g,1617
3220
3220
  edc_view_utils/perms.py,sha256=F8nGUhg0IBggltYptyrYQBLrJIHtgRXlwSlVWp7VEVg,3430
3221
3221
  edc_view_utils/prn_button.py,sha256=GzvkAljbTABa4ueOxne5ZvhzGb8b0xBIZkgQgcoC4EQ,125
@@ -3233,12 +3233,12 @@ edc_visit_schedule/auths.py,sha256=F498GY111anDlK2g4-5_q7qF5MEcJ8bE5OCnimQZhSU,2
3233
3233
  edc_visit_schedule/baseline.py,sha256=ZXwB8xdT1xFtoyFZ9k_anGUq1mJC6fTOOBu4vu5L8iY,3346
3234
3234
  edc_visit_schedule/choices.py,sha256=feq0GogDxFn_MyrnNcynlWeq5QTrXeJOEHA23cRiccQ,304
3235
3235
  edc_visit_schedule/constants.py,sha256=4vqZ7MI-4bu9wQ7n7R5hzX2uVwO0ZJZ34uUA3W8yypY,714
3236
- edc_visit_schedule/exceptions.py,sha256=ELecFg9kl435cLw354tL90ifQBLAXVclWuhKlqSj5k8,947
3236
+ edc_visit_schedule/exceptions.py,sha256=4og2q40ABfZjrRsZFvkz9dBFAkIVpfBN1d3dUlUhf-o,989
3237
3237
  edc_visit_schedule/fieldsets.py,sha256=2fnyh-9qFc8fbXcR6f_QO7lLBWEzoZ6mxEz76PQnDOs,548
3238
3238
  edc_visit_schedule/forms.py,sha256=1sGwsK16oEcSAOFEBDR_d97FaoUy1SWJhPn0x2BWk08,356
3239
3239
  edc_visit_schedule/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3240
3240
  edc_visit_schedule/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3241
- edc_visit_schedule/management/commands/find_invalid_onschedules.py,sha256=ZB3rdQJLWf8FHkT0DCRkG-Oph3kflqkPW6tpu1mKiA0,2003
3241
+ edc_visit_schedule/management/commands/find_invalid_onschedules.py,sha256=MJdPgoTXPMzylnNYwq1y5Ks7opin7uKEa_nyxPgzzyM,2057
3242
3242
  edc_visit_schedule/migrations/0001_initial.py,sha256=X8zAUE8gKtexzaYMiLub_eUHn8h-5tiQfgldxLCEapo,5382
3243
3243
  edc_visit_schedule/migrations/0002_auto_20190305_0123.py,sha256=rCxF93Vy508Cnok6GfXROoBLw3nRUiZpKBlKabW4FK4,1922
3244
3244
  edc_visit_schedule/migrations/0003_historicalvisitschedule_visitschedule.py,sha256=bOs3z_XkDmNqjfwNUgyARU036xlv5JfuxEN5V0jkHuY,8978
@@ -3274,49 +3274,49 @@ edc_visit_schedule/model_mixins/visit_schedule/visit_schedule_methods_model_mixi
3274
3274
  edc_visit_schedule/model_mixins/visit_schedule/visit_schedule_model_mixins.py,sha256=4OwZgegiQxW1acnVhIOAf3k1wERZa2oxWcH5LgILbUk,736
3275
3275
  edc_visit_schedule/modelform_mixins/__init__.py,sha256=B6GNMl01Getf1fu8pKpJhu8bqNaylKsVQv9_NNGdBGw,329
3276
3276
  edc_visit_schedule/modelform_mixins/crf/__init__.py,sha256=SvdBJbRkdxvAyc-2WYOjenKYdGpbz2IWpWT5JIT328s,79
3277
- edc_visit_schedule/modelform_mixins/crf/visit_schedule_crf_modelform_mixin.py,sha256=pGwlSUpL-zHEOdkmbZmCdtr_3fDZz83uPgwAazeMeF8,2415
3278
- edc_visit_schedule/modelform_mixins/off_schedule_modelform_mixin.py,sha256=pZmozeG5oH8YsuVPgf-__FGpO0g71EnnPoG5p1qLvx4,2163
3279
- edc_visit_schedule/modelform_mixins/visit_schedule_non_crf_modelform_mixin.py,sha256=EzaQ6K_QJoXm2X9l5OBQV3pXUkOUo70mk9DEYi0K_RQ,3251
3277
+ edc_visit_schedule/modelform_mixins/crf/visit_schedule_crf_modelform_mixin.py,sha256=PBWjczl15yS9wjbqZhdKLkmiRwK_iqBPcFbEAEaI2PI,2422
3278
+ edc_visit_schedule/modelform_mixins/off_schedule_modelform_mixin.py,sha256=GT6y7mwq2KK0z1625gCpjE6HtKqTqn-w1pdNY8Sdvcg,2202
3279
+ edc_visit_schedule/modelform_mixins/visit_schedule_non_crf_modelform_mixin.py,sha256=dW85SIQXMCS8pAojpNCJAAPEkjqDfSoj31qwfXz-XpM,3258
3280
3280
  edc_visit_schedule/models/__init__.py,sha256=MdSbyV73oGdiNLgyvIXlBKSvn6tmJJjARM9ZCzcxLpc,278
3281
3281
  edc_visit_schedule/models/offschedule.py,sha256=XbJF8PcmB_3eYHaGVTSL_iqmJIOW41jsVvk2565xpxI,389
3282
3282
  edc_visit_schedule/models/onschedule.py,sha256=Q-MIxrjLiBYa51ZYjMoJmfhS5s163LbSo0HF9RIReX0,365
3283
- edc_visit_schedule/models/signals.py,sha256=c_eyRHlQw_WD0eP2fOPrdYWspUvHPXobzH0wyBKxTM4,2901
3283
+ edc_visit_schedule/models/signals.py,sha256=o3CCDX8XHPOk4EhFvpBOSEZazQl_n92h0fnpjmjcTXE,2825
3284
3284
  edc_visit_schedule/models/subject_schedule_history.py,sha256=HukebXHhw7RBjt5o2EAMCGz8k4Cj82nj5qmfdJlgSFI,3729
3285
3285
  edc_visit_schedule/models/visit_schedule.py,sha256=W5_L_hQ90v5th7qLyKNJICaVDXXoZeJAr5eO-ZLHLVY,2094
3286
3286
  edc_visit_schedule/navbars.py,sha256=RWx57OD-KxpPh0ihRyangGGiOOR7vfxRFjPCj8C5uF4,763
3287
- edc_visit_schedule/ordered_collection.py,sha256=7A5YqG0qGx6jAE0z6bd3BijlW9oYxiQrF-5fzB3hvok,1699
3288
- edc_visit_schedule/post_migrate_signals.py,sha256=7vFfx7ifMwmvrf7MCzpk9q4g1pbM4n44uM4TrH1hPGQ,748
3287
+ edc_visit_schedule/ordered_collection.py,sha256=Ira51rBxDhxhjsSmg7xaES9_fRu6c4Z1V47-pJs0EGI,1602
3288
+ edc_visit_schedule/post_migrate_signals.py,sha256=MmhFktkcDG4xCRQEgjjbaDe0AOe2UriZ6OHsxs6EUc0,782
3289
3289
  edc_visit_schedule/schedule/__init__.py,sha256=bzyYW9y3pPCFTjwjvkUVgkW3d1g1D2SCNfgE9bnLjII,101
3290
- edc_visit_schedule/schedule/schedule.py,sha256=RhUc5UPKZacqYmdxI8-tkEkERZFfq0TAN-wDF8dBMEU,14881
3290
+ edc_visit_schedule/schedule/schedule.py,sha256=ROUNin-k1oJVtx_wEXwlj5xrhTw3I_6VeeqsovJSdFo,14762
3291
3291
  edc_visit_schedule/schedule/visit_collection.py,sha256=9OJKrLtx-H0eL9oo0dsRqYGPICiAMqEF4xIhhlinx0A,2033
3292
- edc_visit_schedule/schedule/window.py,sha256=P_hNhAXBmRxED_0UrlpQoYHF5r_nTEpTK7U2JSAnpCs,5222
3293
- edc_visit_schedule/simple_model_validator.py,sha256=pE2QCSI1VhSr9Dd-NGd-72u6e479_vzbS8iL17eg4Yc,771
3294
- edc_visit_schedule/site_visit_schedules.py,sha256=nFeazdSDJNSvv0RWl9uTs9ZBiC7kFrGKiZY2w-HRfMY,13207
3295
- edc_visit_schedule/subject_schedule.py,sha256=WCLzZquQ0bI3O_eMoHAg94adQ07rYt812gNuiemLZwU,16520
3296
- edc_visit_schedule/system_checks.py,sha256=mh38YzVxisDe-aY6liqsu1w9F9yhJkWghKpV04JLH4U,9255
3292
+ edc_visit_schedule/schedule/window.py,sha256=gsXW7z3P84h6kWX7e7CABmalyLGgbbIwe0Q6atIbyEI,5229
3293
+ edc_visit_schedule/simple_model_validator.py,sha256=5lMyVrrlAy4HxLmAqM3he7D2ssCJoyjAWDWnFmJwRT0,789
3294
+ edc_visit_schedule/site_visit_schedules.py,sha256=U6h3ZKiEME41oyzjvpqTun6cieVLf9gfS7IXm7LY2pU,13078
3295
+ edc_visit_schedule/subject_schedule.py,sha256=gai8sQ9nek3KEu27GL656twm0zKP3I3g510effNdIT8,16552
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
3298
3298
  edc_visit_schedule/templates/edc_visit_schedule/subject_schedule_footer_row.html,sha256=TJ23XPi1ji-veMhTuuYErjjtFqDXBHKzly5SxQYPkOM,719
3299
3299
  edc_visit_schedule/templates/edc_visit_schedule/visit_schedule.html,sha256=vX8vsYcR12f5tbiM65yWH7zuRy0Cm7In8GCLb5v8hxI,4926
3300
3300
  edc_visit_schedule/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3301
- edc_visit_schedule/templatetags/edc_visit_schedule_extras.py,sha256=jaK2EbZinGFe3fPgXBQJbtWDSK4y4M-ds1iYI_ULWMc,2829
3301
+ edc_visit_schedule/templatetags/edc_visit_schedule_extras.py,sha256=hly2p9KJkm7qzO-ePgyDzxryWbKTstdH7LgagaKkmyw,2857
3302
3302
  edc_visit_schedule/typing_stubs.py,sha256=NCrQqqL0Z9l296gh_RgdHdnN7mhGBGMIoHQ6u92sy78,247
3303
3303
  edc_visit_schedule/urls.py,sha256=x5Q8_HGtN2GMXY5XVi2E1QiRMcGaiGWRBah5SXy-svI,973
3304
- edc_visit_schedule/utils.py,sha256=D2PmhjImwBkl4OcRhj-7mid7Hwtqn-kqE-WDZ_ACmcA,13899
3305
- edc_visit_schedule/view_mixins.py,sha256=PkM33v8wyMizeX96yTizhMurlmtmIuS-8O2iypZidY8,2292
3304
+ edc_visit_schedule/utils.py,sha256=TFmPeIb6-141UzLok56uy6iVWWFJj-KK2B5JvSx6GkM,13870
3305
+ edc_visit_schedule/view_mixins.py,sha256=xAFqK04hIiQU5_bpv9oC5XMLgzvCi72cUORp55ChueY,2294
3306
3306
  edc_visit_schedule/views/__init__.py,sha256=r_po9VhEv8GN_rqvYsHnV0WKpA5s7cgt-fYU7FjGjZA,83
3307
3307
  edc_visit_schedule/views/home_view.py,sha256=nbwQVkQPK7yWrMpo8NftqnN1zu9DpSVkNHErdr8EZBM,350
3308
3308
  edc_visit_schedule/views/visit_schedule_view.py,sha256=-iyz7Rvu3l1sLl3yedAKFrSnrYSH_frPMPn9VvDaWwE,1038
3309
3309
  edc_visit_schedule/visit/__init__.py,sha256=Nvj3dwkUhwNLi5UNFit4rBJMH5Kk_J4VMuz4wUSLYbQ,323
3310
- edc_visit_schedule/visit/crf.py,sha256=dgSkvgIuJneGsnd33lASpIAPPEhoMmnVhQbLT36WY7U,1960
3310
+ edc_visit_schedule/visit/crf.py,sha256=mhuqzZLOB_C5GC1T1xIfJZrMWy18ZsigaIGtV_3g-JU,1985
3311
3311
  edc_visit_schedule/visit/crf_collection.py,sha256=l3lRANKR3x6BZudCux9COJS_4nnuWXedhbOiTx6VJI0,771
3312
- edc_visit_schedule/visit/forms_collection.py,sha256=_JEOnTKUqEpRy2gXodOpHdatGcSQVlDzbep9_Y7tiCg,3723
3313
- edc_visit_schedule/visit/requisition.py,sha256=OdAtKjrx7eYQ-hdu9jCDwyQd4fxocpnXhIl6Q5CSsuc,2086
3312
+ edc_visit_schedule/visit/forms_collection.py,sha256=f6yY2kXkPK4Xyjr-BEligZhCfxih0LxdbBuAaMRN5hM,3735
3313
+ edc_visit_schedule/visit/requisition.py,sha256=wab3WymZH54yNwppuMqdPUUQkM1sk2a5_43c2NlLH2I,2124
3314
3314
  edc_visit_schedule/visit/requisition_collection.py,sha256=Ne3brfS-tmPB1y6YVNzhfRbDrEPRWkO_qPzTOXh3E0M,823
3315
- edc_visit_schedule/visit/visit.py,sha256=zg6I6wXpPheupPC4Ew7mrn6kEzQefvSqJDpi4CrsuDE,10844
3316
- edc_visit_schedule/visit/window_period.py,sha256=MH_GBE_ehfzLfbRtlR6LmciqZMZMiZOpfyfv6IX4J_4,1668
3315
+ edc_visit_schedule/visit/visit.py,sha256=d0eZWoSwVF8e6WoeIONkhcxQaEalK80tiwkP26Zu37U,10833
3316
+ edc_visit_schedule/visit/window_period.py,sha256=aGPWofttbIQ8AyMHDaVmTdVxvUeYtGyhjcLnN1cIlE8,1665
3317
3317
  edc_visit_schedule/visit_schedule/__init__.py,sha256=MHyJ8v4a9adimeBxMQHyr7AMkduekafHBtTKJavlmVg,282
3318
- edc_visit_schedule/visit_schedule/schedules_collection.py,sha256=yujoCASDUWyFsqaz6bSGj1Qb2paKMOCXUEGQwlO6gFw,1345
3319
- edc_visit_schedule/visit_schedule/visit_schedule.py,sha256=s4pzIUMSDyGgj2wINI53qO3V_UFU_vhEX7lTBtz9UmE,5734
3318
+ edc_visit_schedule/visit_schedule/schedules_collection.py,sha256=bf_N8ax0uPpe8q2Det655ZyRBjZkgQ8IW8KHYGiHPk8,1357
3319
+ edc_visit_schedule/visit_schedule/visit_schedule.py,sha256=YIoVHzB5hTf2nbMkdOuyLV1QypRPDhWa5DC9585cIVw,5780
3320
3320
  edc_visit_schedule/wsgi.py,sha256=ToL_Ox7yQ30uUMBj5Ev2q_im2dl6mWKdqsUyJWeyFWU,397
3321
3321
  edc_visit_tracking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3322
3322
  edc_visit_tracking/action_items.py,sha256=lWf2-lNgz3QxkvbHW3j7YpZFbwqZwUvI_qDaAR4SWWI,1216
@@ -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.21.dist-info/licenses/LICENSE,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
3410
- clinicedc-2.0.21.dist-info/WHEEL,sha256=-neZj6nU9KAMg2CnCY6T3w8J53nx1kFGw_9HfoSzM60,79
3411
- clinicedc-2.0.21.dist-info/METADATA,sha256=jwR2qG_UDxvNjDbWe9I2N1KzW4jE4PIjWhUqfJ6M6-w,15755
3412
- clinicedc-2.0.21.dist-info/RECORD,,
3409
+ clinicedc-2.0.22.dist-info/licenses/LICENSE,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
3410
+ clinicedc-2.0.22.dist-info/WHEEL,sha256=-neZj6nU9KAMg2CnCY6T3w8J53nx1kFGw_9HfoSzM60,79
3411
+ clinicedc-2.0.22.dist-info/METADATA,sha256=dFNOxUA-89V0DfvPPnHib7ZoJL3H0A3OADbHgb1FjEM,15755
3412
+ clinicedc-2.0.22.dist-info/RECORD,,
edc_appointment/utils.py CHANGED
@@ -744,9 +744,9 @@ def update_appt_status_for_timepoint(related_visit: RelatedVisitModel) -> None:
744
744
 
745
745
 
746
746
  def refresh_appointments(
747
- subject_identifier: str | None = None,
748
- visit_schedule_name: str | None = None,
749
- schedule_name: str | None = None,
747
+ subject_identifier: str,
748
+ visit_schedule_name: str,
749
+ schedule_name: str,
750
750
  request: WSGIRequest | None = None,
751
751
  warn_only: bool | None = None,
752
752
  ) -> tuple[str, str]:
@@ -768,7 +768,7 @@ def refresh_appointments(
768
768
  % dict(error_msg=str(e)),
769
769
  )
770
770
  elif warn_only:
771
- warnings.warn(str(e))
771
+ warnings.warn(str(e), stacklevel=2)
772
772
  else:
773
773
  raise
774
774
  else:
@@ -832,7 +832,6 @@ def validate_date_is_on_clinic_day(
832
832
  and calendar.weekday(appt_date.year, appt_date.month, appt_date.day)
833
833
  not in clinic_days
834
834
  ):
835
-
836
835
  days_str = [day_abbr[d] for d in clinic_days]
837
836
  days_str = []
838
837
  for d in clinic_days:
edc_pdf_reports/report.py CHANGED
@@ -33,7 +33,7 @@ class Report(ABC):
33
33
  )
34
34
  default_numbered_canvas = NumberedCanvas
35
35
 
36
- default_page = dict(
36
+ default_page = dict( # noqa: RUF012
37
37
  rightMargin=0.5 * cm,
38
38
  leftMargin=0.5 * cm,
39
39
  topMargin=1.5 * cm,
@@ -117,7 +117,7 @@ class Report(ABC):
117
117
  def draw_header(self, canvas, doc):
118
118
  pass
119
119
 
120
- def draw_footer(self, canvas, doc):
120
+ def draw_footer(self, canvas, doc): # noqa: ARG002
121
121
  styles = getSampleStyleSheet()
122
122
  styles.add(ParagraphStyle(name="header", fontSize=6, alignment=TA_CENTER))
123
123
  width, _ = A4
@@ -8,10 +8,9 @@ class DashboardMiddleware:
8
8
  self.get_response = get_response
9
9
 
10
10
  def __call__(self, request):
11
- response = self.get_response(request)
12
- return response
11
+ return self.get_response(request)
13
12
 
14
- def process_view(self, request, *args):
13
+ def process_view(self, request, *args): # noqa: ARG002
15
14
  """Adds/Updates references to templates."""
16
15
  try:
17
16
  template_data = settings.SUBJECT_DASHBOARD_BASE_TEMPLATES
@@ -16,11 +16,11 @@ class RequisitionLabels:
16
16
  self.requisitions_not_printed = []
17
17
  self.appointment = appointment
18
18
  for metadata in requisition_metadata.filter(panel_name__in=panel_names):
19
- panel = [
19
+ panel = next(
20
20
  r
21
21
  for r in appointment.related_visit.visit.all_requisitions
22
22
  if r.panel.name == metadata.panel_name
23
- ][0].panel
23
+ ).panel
24
24
  requisition = self.get_or_create_requisition(panel=panel, user=user)
25
25
  if requisition.is_drawn != NO:
26
26
  item_count = requisition.item_count or 1
@@ -7,6 +7,7 @@ from reportlab.lib import colors
7
7
  from reportlab.lib.units import cm, mm
8
8
  from reportlab.platypus import Paragraph, Spacer, Table, TableStyle
9
9
 
10
+ from edc_appointment.models import Appointment
10
11
  from edc_constants.constants import YES
11
12
  from edc_identifier.utils import convert_to_human_readable
12
13
  from edc_lab.model_mixins import RequisitionModelMixin
@@ -17,8 +18,9 @@ from edc_pdf_reports import Report
17
18
  class RequisitionReport(Report):
18
19
  def __init__(
19
20
  self,
20
- appointment=None,
21
- selected_panel_names=None,
21
+ *,
22
+ appointment: Appointment,
23
+ selected_panel_names: list[str],
22
24
  consignee=None,
23
25
  request=None,
24
26
  **kwargs,
@@ -34,7 +36,10 @@ class RequisitionReport(Report):
34
36
  self.contact_name = f"{self.user.first_name} {self.user.last_name}"
35
37
  self.image_folder = mkdtemp()
36
38
  self.timestamp = timezone.now().strftime("%Y%m%d%H%M%S")
37
- self.report_filename = f"requisition_{self.timestamp}.pdf"
39
+
40
+ @property
41
+ def report_filename(self) -> str:
42
+ return f"requisition_{self.timestamp}.pdf"
38
43
 
39
44
  @property
40
45
  def shipper(self):
@@ -46,7 +51,7 @@ class RequisitionReport(Report):
46
51
  shipper = Shipper()
47
52
  return shipper
48
53
 
49
- def get_report_story(self, **kwargs):
54
+ def get_report_story(self, **kwargs): # noqa: ARG002
50
55
  story = [
51
56
  Paragraph(
52
57
  "PATIENT SPECIMEN REQUISITION / MANIFEST",
@@ -283,8 +288,7 @@ class RequisitionReport(Report):
283
288
 
284
289
  @property
285
290
  def consignee_data(self):
286
- data = self.consignee.__dict__
287
- return data
291
+ return self.consignee.__dict__
288
292
 
289
293
  @staticmethod
290
294
  def formatted_address(**kwargs):
@@ -77,8 +77,8 @@ class SubjectDashboardExtrasError(Exception):
77
77
 
78
78
  @register.inclusion_tag("edc_subject_dashboard/appointment_in_progress.html")
79
79
  def appointment_in_progress(
80
- subject_identifier: str = None,
81
- visit_schedule: VisitSchedule = None,
80
+ subject_identifier: str | None = None,
81
+ visit_schedule: VisitSchedule | None = None,
82
82
  schedule: Schedule = None,
83
83
  ) -> dict[str, str]:
84
84
  """Returns the context with the visit code of the appointment in
@@ -136,15 +136,15 @@ def requisition_panel_actions(context, requisitions=None):
136
136
  )
137
137
  def print_requisition_popover(context):
138
138
  C = namedtuple("Consignee", "pk name")
139
- consignees = []
140
- for consignee in django_apps.get_model("edc_lab.Consignee").objects.all():
141
- consignees.append(C(str(consignee.pk), consignee.name))
142
- context["consignees"] = consignees
139
+ context["consignees"] = [
140
+ C(str(consignee.pk), consignee.name)
141
+ for consignee in django_apps.get_model("edc_lab.Consignee").objects.all()
142
+ ]
143
143
  return context
144
144
 
145
145
 
146
146
  @register.inclusion_tag("edc_subject_dashboard/appointment_status.html")
147
- def render_appointment_status_icon(appt_status: str = None) -> dict[str, str]:
147
+ def render_appointment_status_icon(appt_status: str | None = None) -> dict[str, str]:
148
148
  return dict(
149
149
  appt_status=appt_status,
150
150
  NEW_APPT=NEW_APPT,
@@ -159,7 +159,7 @@ def render_appointment_status_icon(appt_status: str = None) -> dict[str, str]:
159
159
  @register.inclusion_tag(
160
160
  "edc_subject_dashboard/dashboard/crf_totals.html",
161
161
  )
162
- def render_crf_totals(appointment: Appointment = None) -> dict[str, bool | int]:
162
+ def render_crf_totals(appointment: Appointment | None = None) -> dict[str, bool | int]:
163
163
  helper = MetadataHelper(appointment)
164
164
  skipped: bool = False
165
165
  show_totals: bool = False
@@ -184,7 +184,7 @@ def render_crf_totals(appointment: Appointment = None) -> dict[str, bool | int]:
184
184
  num_keyed = crf_keyed + requisition_keyed
185
185
  num_total = crf_total + requisition_total
186
186
  if appointment.related_visit:
187
- show_totals = False if num_keyed != 0 and num_keyed == num_total else True
187
+ show_totals = not (num_keyed != 0 and num_keyed == num_total)
188
188
  complete = num_keyed != 0 and num_keyed == num_total
189
189
  return dict(
190
190
  show_totals=show_totals,
@@ -202,10 +202,10 @@ def render_crf_totals(appointment: Appointment = None) -> dict[str, bool | int]:
202
202
  )
203
203
  def render_crf_button_group(
204
204
  context,
205
- model_obj: CrfMetadata = None,
206
- appointment: Appointment = None,
207
- registered_subject: RegisteredSubject = None,
208
- visit_schedule: VisitScheduleModel = None,
205
+ model_obj: CrfMetadata | None = None,
206
+ appointment: Appointment | None = None,
207
+ registered_subject: RegisteredSubject | None = None,
208
+ visit_schedule: VisitScheduleModel | None = None,
209
209
  ):
210
210
  """Prepare context data to render CRF, History, and Query
211
211
  dashboard buttons.
@@ -238,10 +238,10 @@ def render_crf_button_group(
238
238
  )
239
239
  def render_requisition_button_group(
240
240
  context,
241
- model_obj: CrfMetadata = None,
242
- appointment: Appointment = None,
243
- registered_subject: RegisteredSubject = None,
244
- visit_schedule: VisitScheduleModel = None,
241
+ model_obj: CrfMetadata | None = None,
242
+ appointment: Appointment | None = None,
243
+ registered_subject: RegisteredSubject | None = None,
244
+ visit_schedule: VisitScheduleModel | None = None,
245
245
  ):
246
246
  # if still using deprecated ModelWrapper, get model instance
247
247
  # from model_wrapper
@@ -281,7 +281,7 @@ def render_prn_button(context, model_obj, model_name: str) -> dict:
281
281
  "edc_subject_dashboard/buttons/appointment_button.html",
282
282
  takes_context=True,
283
283
  )
284
- def render_appointment_button(context, appointment: Appointment = None):
284
+ def render_appointment_button(context, appointment: Appointment | None = None):
285
285
  # if still using deprecated ModelWrapper, get model instance
286
286
  # from model_wrapper
287
287
  appointment = getattr(appointment, "object", appointment)
@@ -297,7 +297,7 @@ def render_appointment_button(context, appointment: Appointment = None):
297
297
  "edc_subject_dashboard/buttons/appointment_button.html",
298
298
  takes_context=True,
299
299
  )
300
- def render_related_visit_button(context, appointment: Appointment = None):
300
+ def render_related_visit_button(context, appointment: Appointment | None = None):
301
301
  # if still using deprecated ModelWrapper, get model instance
302
302
  # from model_wrapper
303
303
  appointment = getattr(appointment, "object", appointment)
@@ -317,7 +317,7 @@ def render_related_visit_button(context, appointment: Appointment = None):
317
317
  "edc_subject_dashboard/buttons/forms_button.html",
318
318
  takes_context=True,
319
319
  )
320
- def render_gotoforms_button(context, appointment: Appointment = None):
320
+ def render_gotoforms_button(context, appointment: Appointment | None = None):
321
321
  # if still using deprecated ModelWrapper, get model instance
322
322
  # from model_wrapper
323
323
  appointment: Appointment = getattr(appointment, "object", appointment)
@@ -337,7 +337,7 @@ def render_gotoforms_button(context, appointment: Appointment = None):
337
337
  "edc_subject_dashboard/buttons/appointment_button.html",
338
338
  takes_context=True,
339
339
  )
340
- def render_timepoint_status_button(context, appointment: Appointment = None):
340
+ def render_timepoint_status_button(context, appointment: Appointment | None = None):
341
341
  btn = TimepointStatusButton(
342
342
  model_obj=appointment,
343
343
  user=context["user"],
@@ -350,9 +350,9 @@ def render_timepoint_status_button(context, appointment: Appointment = None):
350
350
  "edc_subject_dashboard/buttons/subject_consent_button.html",
351
351
  takes_context=True,
352
352
  )
353
- def render_subject_listboard_consent_button(
353
+ def render_subject_listboard_consent_button( # noqa: UP047
354
354
  context,
355
- subject_screening: ScreeningModel = None,
355
+ subject_screening: ScreeningModel | None = None,
356
356
  next_url_name: str | None = None,
357
357
  ):
358
358
  """A subject consent button to appear on the subject listboard.
@@ -372,10 +372,10 @@ def render_subject_listboard_consent_button(
372
372
  "edc_subject_dashboard/buttons/subject_consent_button.html",
373
373
  takes_context=True,
374
374
  )
375
- def render_subject_consent_dashboard_button(
375
+ def render_subject_consent_dashboard_button( # noqa: UP047
376
376
  context,
377
- consent: ConsentModel = None,
378
- appointment: Appointment = None,
377
+ consent: ConsentModel | None = None,
378
+ appointment: Appointment | None = None,
379
379
  next_url_name: str | None = None,
380
380
  ):
381
381
  """A subject consent button to appear on the subject dashboard
@@ -398,7 +398,7 @@ def render_subject_consent_dashboard_button(
398
398
  takes_context=True,
399
399
  )
400
400
  def render_unscheduled_appointment_button(
401
- context, appointment: Appointment = None, view_appointment: bool = None
401
+ context, appointment: Appointment | None = None, view_appointment: bool | None = None
402
402
  ):
403
403
  show_button = False
404
404
  anchor_id: str | None = None
@@ -477,9 +477,9 @@ def render_subject_schedule_button(
477
477
  )
478
478
  def render_refresh_appointments_button(
479
479
  context,
480
- subject_identifier: str = None,
481
- visit_schedule_name: str = None,
482
- schedule_name: str = None,
480
+ subject_identifier: str | None = None,
481
+ visit_schedule_name: str | None = None,
482
+ schedule_name: str | None = None,
483
483
  ) -> dict:
484
484
  if context["request"].user.userprofile.is_multisite_viewer or context[
485
485
  "request"
@@ -503,9 +503,9 @@ def render_refresh_appointments_button(
503
503
  )
504
504
  def render_refresh_data_collection_schedule_button(
505
505
  context,
506
- related_visit_id: str = None,
507
- visit_schedule_name: str = None,
508
- schedule_name: str = None,
506
+ related_visit_id: str | None = None,
507
+ visit_schedule_name: str | None = None,
508
+ schedule_name: str | None = None,
509
509
  ) -> dict:
510
510
  if (
511
511
  context["request"].user.userprofile.is_multisite_viewer
@@ -83,7 +83,7 @@ class SubjectVisitViewMixin:
83
83
  did not declare this view with AppointmentViewMixin.
84
84
  """
85
85
  try:
86
- self.appointment
86
+ self.appointment # noqa: B018
87
87
  except AttributeError as e:
88
88
  if "appointment" in str(e):
89
89
  raise SubjectVisitViewMixinError(
@@ -19,9 +19,10 @@ class CrfButton(DashboardModelButton):
19
19
  @property
20
20
  def disabled(self) -> str:
21
21
  disabled = "disabled"
22
- if (not self.model_obj and self.perms.add) or self.perms.change:
22
+ if (
23
+ (not self.model_obj and self.perms.add)
24
+ or self.perms.change
25
+ or (self.perms.view and self.model_obj)
26
+ ):
23
27
  disabled = ""
24
- elif self.perms.view:
25
- if self.model_obj:
26
- disabled = ""
27
28
  return disabled
@@ -63,8 +63,7 @@ class GotToFormsButton(RelatedVisitButton):
63
63
  extra_kwargs=self.extra_kwargs,
64
64
  )
65
65
 
66
- url = "?".join([f"{nq.next_url}", nq.querystring])
67
- return url
66
+ return "?".join([f"{nq.next_url}", nq.querystring])
68
67
 
69
68
  @property
70
69
  def disabled(self) -> str: