canvas 0.22.0__tar.gz → 0.22.1__tar.gz

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 canvas might be problematic. Click here for more details.

Files changed (346) hide show
  1. {canvas-0.22.0 → canvas-0.22.1}/PKG-INFO +1 -1
  2. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/tests/protocol/tests.py +10 -1
  3. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/tests/test_utils.py +4 -1
  4. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/effects/banner_alert/tests.py +10 -2
  5. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/installation.py +1 -2
  6. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/plugin_runner.py +34 -2
  7. {canvas-0.22.0 → canvas-0.22.1}/pyproject.toml +1 -1
  8. {canvas-0.22.0 → canvas-0.22.1}/.gitignore +0 -0
  9. {canvas-0.22.0 → canvas-0.22.1}/README.md +0 -0
  10. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/__init__.py +0 -0
  11. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/__init__.py +0 -0
  12. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/auth/__init__.py +0 -0
  13. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/auth/tests.py +0 -0
  14. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/auth/utils.py +0 -0
  15. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/__init__.py +0 -0
  16. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/emit.py +0 -0
  17. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/ALLERGY_INTOLERANCE_CREATED.ndjson +0 -0
  18. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/ALLERGY_INTOLERANCE_UPDATED.ndjson +0 -0
  19. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CANCELED.ndjson +0 -0
  20. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CHECKED_IN.ndjson +0 -0
  21. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CREATED.ndjson +0 -0
  22. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_NO_SHOWED.ndjson +0 -0
  23. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_RESCHEDULED.ndjson +0 -0
  24. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_RESTORED.ndjson +0 -0
  25. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_UPDATED.ndjson +0 -0
  26. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__CONDITION_SELECTED.ndjson +0 -0
  27. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__POST_COMMIT.ndjson +0 -0
  28. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__POST_ORIGINATE.ndjson +0 -0
  29. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__POST_UPDATE.ndjson +0 -0
  30. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__PRE_COMMIT.ndjson +0 -0
  31. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__PRE_ORIGINATE.ndjson +0 -0
  32. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__PRE_UPDATE.ndjson +0 -0
  33. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/BILLING_LINE_ITEM_CREATED.ndjson +0 -0
  34. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/BILLING_LINE_ITEM_UPDATED.ndjson +0 -0
  35. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/CONDITION_ASSESSED.ndjson +0 -0
  36. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/CONDITION_CREATED.ndjson +0 -0
  37. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/CONDITION_UPDATED.ndjson +0 -0
  38. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/CRON.ndjson +0 -0
  39. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/ENCOUNTER_CREATED.ndjson +0 -0
  40. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/ENCOUNTER_UPDATED.ndjson +0 -0
  41. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_CREATED.ndjson +0 -0
  42. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_STATEMENT_CREATED.ndjson +0 -0
  43. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_STATEMENT_UPDATED.ndjson +0 -0
  44. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_UPDATED.ndjson +0 -0
  45. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/INTERVIEW_CREATED.ndjson +0 -0
  46. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/INTERVIEW_UPDATED.ndjson +0 -0
  47. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/LAB_ORDER_CREATED.ndjson +0 -0
  48. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/LAB_ORDER_UPDATED.ndjson +0 -0
  49. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_LIST_ITEM_CREATED.ndjson +0 -0
  50. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_LIST_ITEM_UPDATED.ndjson +0 -0
  51. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__POST_COMMIT.ndjson +0 -0
  52. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__POST_ORIGINATE.ndjson +0 -0
  53. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__POST_UPDATE.ndjson +0 -0
  54. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__PRE_COMMIT.ndjson +0 -0
  55. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__PRE_ORIGINATE.ndjson +0 -0
  56. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__PRE_UPDATE.ndjson +0 -0
  57. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT__MEDICATION__POST_SEARCH.ndjson +0 -0
  58. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/PATIENT_CREATED.ndjson +0 -0
  59. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/PATIENT_UPDATED.ndjson +0 -0
  60. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/PLAN_COMMAND__POST_ORIGINATE.ndjson +0 -0
  61. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/PLAN_COMMAND__PRE_ORIGINATE.ndjson +0 -0
  62. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__POST_COMMIT.ndjson +0 -0
  63. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__POST_ORIGINATE.ndjson +0 -0
  64. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__POST_UPDATE.ndjson +0 -0
  65. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__PRE_COMMIT.ndjson +0 -0
  66. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__PRE_ORIGINATE.ndjson +0 -0
  67. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__PRE_UPDATE.ndjson +0 -0
  68. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE__QUESTIONNAIRE__POST_SEARCH.ndjson +0 -0
  69. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/TASK_COMMENT_CREATED.ndjson +0 -0
  70. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/TASK_CREATED.ndjson +0 -0
  71. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/TASK_UPDATED.ndjson +0 -0
  72. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/VITAL_SIGN_CREATED.ndjson +0 -0
  73. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/emit/event_fixtures/VITAL_SIGN_UPDATED.ndjson +0 -0
  74. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/logs/__init__.py +0 -0
  75. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/logs/logs.py +0 -0
  76. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/plugin/__init__.py +0 -0
  77. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/plugin/plugin.py +0 -0
  78. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/plugin/tests.py +0 -0
  79. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/run_plugins/__init__.py +0 -0
  80. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/apps/run_plugins/run_plugins.py +0 -0
  81. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/conftest.py +0 -0
  82. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/main.py +0 -0
  83. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/templates/plugins/application/cookiecutter.json +0 -0
  84. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/CANVAS_MANIFEST.json +0 -0
  85. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/README.md +0 -0
  86. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/applications/__init__.py +0 -0
  87. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/applications/my_application.py +0 -0
  88. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/assets/python-logo.png +0 -0
  89. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/templates/plugins/default/cookiecutter.json +0 -0
  90. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/CANVAS_MANIFEST.json +0 -0
  91. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/README.md +0 -0
  92. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/protocols/__init__.py +0 -0
  93. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/protocols/my_protocol.py +0 -0
  94. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/tests.py +0 -0
  95. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/utils/__init__.py +0 -0
  96. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/utils/context/__init__.py +0 -0
  97. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/utils/context/context.py +0 -0
  98. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/utils/context/tests.py +0 -0
  99. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/utils/print/__init__.py +0 -0
  100. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/utils/print/print.py +0 -0
  101. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/utils/print/tests.py +0 -0
  102. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/utils/urls/__init__.py +0 -0
  103. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/utils/urls/tests.py +0 -0
  104. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/utils/urls/urls.py +0 -0
  105. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/utils/validators/__init__.py +0 -0
  106. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/utils/validators/manifest_schema.py +0 -0
  107. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/utils/validators/tests.py +0 -0
  108. {canvas-0.22.0 → canvas-0.22.1}/canvas_cli/utils/validators/validators.py +0 -0
  109. {canvas-0.22.0 → canvas-0.22.1}/canvas_generated/messages/effects_pb2.py +0 -0
  110. {canvas-0.22.0 → canvas-0.22.1}/canvas_generated/messages/effects_pb2.pyi +0 -0
  111. {canvas-0.22.0 → canvas-0.22.1}/canvas_generated/messages/effects_pb2_grpc.py +0 -0
  112. {canvas-0.22.0 → canvas-0.22.1}/canvas_generated/messages/events_pb2.py +0 -0
  113. {canvas-0.22.0 → canvas-0.22.1}/canvas_generated/messages/events_pb2.pyi +0 -0
  114. {canvas-0.22.0 → canvas-0.22.1}/canvas_generated/messages/events_pb2_grpc.py +0 -0
  115. {canvas-0.22.0 → canvas-0.22.1}/canvas_generated/messages/plugins_pb2.py +0 -0
  116. {canvas-0.22.0 → canvas-0.22.1}/canvas_generated/messages/plugins_pb2.pyi +0 -0
  117. {canvas-0.22.0 → canvas-0.22.1}/canvas_generated/messages/plugins_pb2_grpc.py +0 -0
  118. {canvas-0.22.0 → canvas-0.22.1}/canvas_generated/services/plugin_runner_pb2.py +0 -0
  119. {canvas-0.22.0 → canvas-0.22.1}/canvas_generated/services/plugin_runner_pb2.pyi +0 -0
  120. {canvas-0.22.0 → canvas-0.22.1}/canvas_generated/services/plugin_runner_pb2_grpc.py +0 -0
  121. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/__init__.py +0 -0
  122. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/base.py +0 -0
  123. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/__init__.py +0 -0
  124. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/base.py +0 -0
  125. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/__init__.py +0 -0
  126. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/adjust_prescription.py +0 -0
  127. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/allergy.py +0 -0
  128. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/assess.py +0 -0
  129. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/close_goal.py +0 -0
  130. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/diagnose.py +0 -0
  131. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/exam.py +0 -0
  132. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/family_history.py +0 -0
  133. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/follow_up.py +0 -0
  134. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/goal.py +0 -0
  135. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/history_present_illness.py +0 -0
  136. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/imaging_order.py +0 -0
  137. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/instruct.py +0 -0
  138. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/lab_order.py +0 -0
  139. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/medical_history.py +0 -0
  140. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/medication_statement.py +0 -0
  141. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/past_surgical_history.py +0 -0
  142. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/perform.py +0 -0
  143. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/plan.py +0 -0
  144. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/prescribe.py +0 -0
  145. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/questionnaire/__init__.py +0 -0
  146. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/questionnaire/question.py +0 -0
  147. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/reason_for_visit.py +0 -0
  148. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/refer.py +0 -0
  149. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/refill.py +0 -0
  150. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/remove_allergy.py +0 -0
  151. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/resolve_condition.py +0 -0
  152. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/review_of_systems.py +0 -0
  153. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/stop_medication.py +0 -0
  154. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/structured_assessment.py +0 -0
  155. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/task.py +0 -0
  156. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/update_diagnosis.py +0 -0
  157. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/update_goal.py +0 -0
  158. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/commands/vitals.py +0 -0
  159. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/constants.py +0 -0
  160. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/tests/protocol/__init__.py +0 -0
  161. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/tests/schema/__init__.py +0 -0
  162. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/tests/schema/tests.py +0 -0
  163. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/tests/test_base_command.py +0 -0
  164. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/tests/unit/__init__.py +0 -0
  165. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/commands/tests/unit/tests.py +0 -0
  166. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/effects/__init__.py +0 -0
  167. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/effects/banner_alert/__init__.py +0 -0
  168. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/effects/banner_alert/add_banner_alert.py +0 -0
  169. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/effects/banner_alert/remove_banner_alert.py +0 -0
  170. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/effects/base.py +0 -0
  171. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/effects/billing_line_item/__init__.py +0 -0
  172. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/effects/billing_line_item/add_billing_line_item.py +0 -0
  173. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/effects/billing_line_item/remove_billing_line_item.py +0 -0
  174. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/effects/billing_line_item/update_billing_line_item.py +0 -0
  175. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/effects/launch_modal.py +0 -0
  176. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/effects/patient_chart_summary_configuration.py +0 -0
  177. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/effects/patient_portal/__init__.py +0 -0
  178. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/effects/patient_portal/intake_form_results.py +0 -0
  179. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/effects/patient_profile_configuration.py +0 -0
  180. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/effects/protocol_card/__init__.py +0 -0
  181. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/effects/protocol_card/protocol_card.py +0 -0
  182. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/effects/protocol_card/tests.py +0 -0
  183. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/effects/questionnaire_result.py +0 -0
  184. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/effects/show_button.py +0 -0
  185. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/effects/surescripts/__init__.py +0 -0
  186. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/effects/surescripts/surescripts_messages.py +0 -0
  187. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/effects/task/__init__.py +0 -0
  188. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/effects/task/task.py +0 -0
  189. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/events/__init__.py +0 -0
  190. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/events/base.py +0 -0
  191. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/handlers/__init__.py +0 -0
  192. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/handlers/action_button.py +0 -0
  193. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/handlers/application.py +0 -0
  194. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/handlers/base.py +0 -0
  195. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/handlers/cron_task.py +0 -0
  196. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/protocols/__init__.py +0 -0
  197. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/protocols/base.py +0 -0
  198. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/protocols/clinical_quality_measure.py +0 -0
  199. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/protocols/timeframe.py +0 -0
  200. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/questionnaires/__init__.py +0 -0
  201. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/questionnaires/tests/__init__.py +0 -0
  202. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/questionnaires/tests/test_utils.py +0 -0
  203. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/questionnaires/utils.py +0 -0
  204. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/templates/__init__.py +0 -0
  205. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/templates/tests/__init__.py +0 -0
  206. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/templates/tests/test_utils.py +0 -0
  207. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/templates/utils.py +0 -0
  208. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/tests/__init__.py +0 -0
  209. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/utils/__init__.py +0 -0
  210. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/utils/http.py +0 -0
  211. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/utils/plugins.py +0 -0
  212. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/utils/stats.py +0 -0
  213. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/utils/tests.py +0 -0
  214. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/__init__.py +0 -0
  215. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/apps.py +0 -0
  216. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/data/__init__.py +0 -0
  217. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/data/allergy_intolerance.py +0 -0
  218. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/data/appointment.py +0 -0
  219. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/data/assessment.py +0 -0
  220. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/data/base.py +0 -0
  221. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/data/billing.py +0 -0
  222. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/data/care_team.py +0 -0
  223. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/data/command.py +0 -0
  224. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/data/common.py +0 -0
  225. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/data/condition.py +0 -0
  226. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/data/coverage.py +0 -0
  227. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/data/detected_issue.py +0 -0
  228. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/data/device.py +0 -0
  229. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/data/imaging.py +0 -0
  230. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/data/lab.py +0 -0
  231. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/data/medication.py +0 -0
  232. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/data/note.py +0 -0
  233. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/data/observation.py +0 -0
  234. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/data/organization.py +0 -0
  235. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/data/patient.py +0 -0
  236. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/data/practicelocation.py +0 -0
  237. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/data/protocol_override.py +0 -0
  238. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/data/questionnaire.py +0 -0
  239. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/data/reason_for_visit.py +0 -0
  240. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/data/staff.py +0 -0
  241. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/data/task.py +0 -0
  242. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/data/team.py +0 -0
  243. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/data/user.py +0 -0
  244. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/v1/models.py +0 -0
  245. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/value_set/__init__.py +0 -0
  246. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/value_set/custom.py +0 -0
  247. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/value_set/hcc2018.py +0 -0
  248. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/value_set/tests/test_value_sets.py +0 -0
  249. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/value_set/v2022/__init__.py +0 -0
  250. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/value_set/v2022/adverse_event.py +0 -0
  251. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/value_set/v2022/allergy.py +0 -0
  252. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/value_set/v2022/assessment.py +0 -0
  253. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/value_set/v2022/communication.py +0 -0
  254. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/value_set/v2022/condition.py +0 -0
  255. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/value_set/v2022/device.py +0 -0
  256. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/value_set/v2022/diagnostic_study.py +0 -0
  257. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/value_set/v2022/encounter.py +0 -0
  258. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/value_set/v2022/immunization.py +0 -0
  259. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/value_set/v2022/individual_characteristic.py +0 -0
  260. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/value_set/v2022/intervention.py +0 -0
  261. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/value_set/v2022/laboratory_test.py +0 -0
  262. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/value_set/v2022/medication.py +0 -0
  263. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/value_set/v2022/physical_exam.py +0 -0
  264. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/value_set/v2022/procedure.py +0 -0
  265. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/value_set/v2022/symptom.py +0 -0
  266. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/value_set/value_set.py +0 -0
  267. {canvas-0.22.0 → canvas-0.22.1}/canvas_sdk/views/__init__.py +0 -0
  268. {canvas-0.22.0 → canvas-0.22.1}/logger/__init__.py +0 -0
  269. {canvas-0.22.0 → canvas-0.22.1}/logger/logger.py +0 -0
  270. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/__init__.py +0 -0
  271. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/authentication.py +0 -0
  272. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/aws_headers.py +0 -0
  273. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/exceptions.py +0 -0
  274. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/sandbox.py +0 -0
  275. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/__init__.py +0 -0
  276. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/data/plugins/.gitkeep +0 -0
  277. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/example_plugin/CANVAS_MANIFEST.json +0 -0
  278. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/example_plugin/README.md +0 -0
  279. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/example_plugin/__init__.py +0 -0
  280. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/example_plugin/protocols/__init__.py +0 -0
  281. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/example_plugin/protocols/my_protocol.py +0 -0
  282. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_implicit_imports_plugin/CANVAS_MANIFEST.json +0 -0
  283. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_implicit_imports_plugin/README.md +0 -0
  284. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_implicit_imports_plugin/protocols/__init__.py +0 -0
  285. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_implicit_imports_plugin/protocols/my_protocol.py +0 -0
  286. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_implicit_imports_plugin/templates/__init__.py +0 -0
  287. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_implicit_imports_plugin/templates/base.py +0 -0
  288. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_implicit_imports_plugin/utils/__init__.py +0 -0
  289. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_implicit_imports_plugin/utils/base.py +0 -0
  290. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_load_questionnaire/CANVAS_MANIFEST.json +0 -0
  291. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_load_questionnaire/README.md +0 -0
  292. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_load_questionnaire/protocols/__init__.py +0 -0
  293. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_load_questionnaire/protocols/my_protocol.py +0 -0
  294. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_load_questionnaire/questionnaires/example_questionnaire.yml +0 -0
  295. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_forbidden_imports_plugin/CANVAS_MANIFEST.json +0 -0
  296. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_forbidden_imports_plugin/README.md +0 -0
  297. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_forbidden_imports_plugin/other_module/__init__.py +0 -0
  298. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_forbidden_imports_plugin/other_module/base.py +0 -0
  299. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_forbidden_imports_plugin/protocols/__init__.py +0 -0
  300. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_forbidden_imports_plugin/protocols/my_protocol.py +0 -0
  301. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_forbidden_imports_runtime_plugin/CANVAS_MANIFEST.json +0 -0
  302. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_forbidden_imports_runtime_plugin/README.md +0 -0
  303. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_forbidden_imports_runtime_plugin/other_module/__init__.py +0 -0
  304. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_forbidden_imports_runtime_plugin/other_module/base.py +0 -0
  305. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_forbidden_imports_runtime_plugin/protocols/__init__.py +0 -0
  306. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_forbidden_imports_runtime_plugin/protocols/my_protocol.py +0 -0
  307. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v1/CANVAS_MANIFEST.json +0 -0
  308. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v1/README.md +0 -0
  309. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v1/other_module/__init__.py +0 -0
  310. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v1/other_module/base.py +0 -0
  311. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v1/protocols/__init__.py +0 -0
  312. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v1/protocols/my_protocol.py +0 -0
  313. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v2/CANVAS_MANIFEST.json +0 -0
  314. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v2/README.md +0 -0
  315. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v2/other_module/__init__.py +0 -0
  316. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v2/other_module/base.py +0 -0
  317. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v2/protocols/__init__.py +0 -0
  318. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v2/protocols/my_protocol.py +0 -0
  319. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v3/CANVAS_MANIFEST.json +0 -0
  320. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v3/README.md +0 -0
  321. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v3/other_module/__init__.py +0 -0
  322. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v3/other_module/base.py +0 -0
  323. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v3/protocols/__init__.py +0 -0
  324. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v3/protocols/my_protocol.py +0 -0
  325. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_imports_plugin/CANVAS_MANIFEST.json +0 -0
  326. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_imports_plugin/README.md +0 -0
  327. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_imports_plugin/other_module/__init__.py +0 -0
  328. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_imports_plugin/other_module/base.py +0 -0
  329. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_imports_plugin/protocols/__init__.py +0 -0
  330. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_module_imports_plugin/protocols/my_protocol.py +0 -0
  331. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_render_template/CANVAS_MANIFEST.json +0 -0
  332. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_render_template/README.md +0 -0
  333. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_render_template/protocols/__init__.py +0 -0
  334. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_render_template/protocols/my_protocol.py +0 -0
  335. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/fixtures/plugins/test_render_template/templates/template.html +0 -0
  336. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/test_application.py +0 -0
  337. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/test_plugin_installer.py +0 -0
  338. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/test_plugin_runner.py +0 -0
  339. {canvas-0.22.0 → canvas-0.22.1}/plugin_runner/tests/test_sandbox.py +0 -0
  340. {canvas-0.22.0 → canvas-0.22.1}/protobufs/canvas_generated/messages/effects.proto +0 -0
  341. {canvas-0.22.0 → canvas-0.22.1}/protobufs/canvas_generated/messages/events.proto +0 -0
  342. {canvas-0.22.0 → canvas-0.22.1}/protobufs/canvas_generated/messages/plugins.proto +0 -0
  343. {canvas-0.22.0 → canvas-0.22.1}/protobufs/canvas_generated/services/plugin_runner.proto +0 -0
  344. {canvas-0.22.0 → canvas-0.22.1}/pubsub/__init__.py +0 -0
  345. {canvas-0.22.0 → canvas-0.22.1}/pubsub/pubsub.py +0 -0
  346. {canvas-0.22.0 → canvas-0.22.1}/settings.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: canvas
3
- Version: 0.22.0
3
+ Version: 0.22.1
4
4
  Summary: SDK to customize event-driven actions in your Canvas instance
5
5
  Author-email: Canvas Team <engineering@canvasmedical.com>
6
6
  License-Expression: MIT
@@ -49,7 +49,16 @@ def write_and_install_protocol_and_clean_up(
49
49
  f"Loading plugin '{plugin_name}",
50
50
  )
51
51
  install_plugin(plugin_name, token)
52
- message_received_event.wait(timeout=5.0)
52
+ message_received_event.wait(timeout=15.0)
53
+
54
+ # unfortunately sometimes the log websocket just doesn't return any
55
+ # messages, so asserting on the state of the timeout here causes failures
56
+ # even though the delay itself will cause the waiting test to pass (because
57
+ # the plugin has been loaded).
58
+ # timeout_not_hit = message_received_event.wait(timeout=15.0)
59
+ # if not timeout_not_hit:
60
+ # ws.close()
61
+ # assert timeout_not_hit, f"plugin loading message timeout hit: Loading plugin '{plugin_name}"
53
62
 
54
63
  yield
55
64
 
@@ -367,6 +367,9 @@ def wait_for_log(
367
367
  thread = threading.Thread(target=ws.run_forever)
368
368
  thread.start()
369
369
 
370
- connected_event.wait(timeout=5.0)
370
+ timeout_not_hit = connected_event.wait(timeout=5.0)
371
+ if not timeout_not_hit:
372
+ ws.close()
373
+ assert timeout_not_hit, "connection timeout hit"
371
374
 
372
375
  return message_received_event, thread, ws
@@ -107,8 +107,16 @@ class Protocol(BaseProtocol):
107
107
  )
108
108
  response.raise_for_status()
109
109
 
110
- message_received_event.wait(timeout=5.0)
111
-
110
+ message_received_event.wait(timeout=15.0)
111
+
112
+ # unfortunately sometimes the log websocket just doesn't return any
113
+ # messages, so asserting on the state of the timeout here causes failures
114
+ # even though the delay itself will cause the waiting test to pass (because
115
+ # the plugin has been loaded).
116
+ # timeout_not_hit = message_received_event.wait(timeout=15.0)
117
+ # if not timeout_not_hit:
118
+ # ws.close()
119
+ # assert timeout_not_hit, f"plugin loading message timeout hit: Loading plugin '{plugin_name}"
112
120
  yield
113
121
 
114
122
  ws.close()
@@ -137,7 +137,7 @@ def download_plugin(plugin_package: str) -> Generator[Path, None, None]:
137
137
  def install_plugin(plugin_name: str, attributes: PluginAttributes) -> None:
138
138
  """Install the given Plugin's package into the runtime."""
139
139
  try:
140
- log.info(f'Installing plugin "{plugin_name}"')
140
+ log.info(f'Installing plugin "{plugin_name}", version {attributes["version"]}')
141
141
 
142
142
  plugin_installation_path = Path(PLUGIN_DIRECTORY) / plugin_name
143
143
 
@@ -224,7 +224,6 @@ def install_plugins() -> None:
224
224
 
225
225
  for plugin_name, attributes in enabled_plugins().items():
226
226
  try:
227
- log.info(f'Installing plugin "{plugin_name}", version {attributes["version"]}')
228
227
  install_plugin(plugin_name, attributes)
229
228
  except PluginInstallationError:
230
229
  disable_plugin(plugin_name)
@@ -13,6 +13,8 @@ from typing import Any, TypedDict
13
13
 
14
14
  import grpc
15
15
  import redis.asyncio as redis
16
+ from asgiref.sync import sync_to_async
17
+ from django.db import connections
16
18
 
17
19
  from canvas_generated.messages.effects_pb2 import EffectType
18
20
  from canvas_generated.messages.plugins_pb2 import ReloadPluginsRequest, ReloadPluginsResponse
@@ -30,6 +32,7 @@ from plugin_runner.installation import install_plugins
30
32
  from plugin_runner.sandbox import Sandbox
31
33
  from settings import (
32
34
  CHANNEL_NAME,
35
+ IS_TESTING,
33
36
  MANIFEST_FILE_NAME,
34
37
  PLUGIN_DIRECTORY,
35
38
  REDIS_ENDPOINT,
@@ -103,6 +106,25 @@ class PluginManifest(TypedDict):
103
106
  readme: str
104
107
 
105
108
 
109
+ @sync_to_async
110
+ def reconnect_if_needed() -> None:
111
+ """
112
+ Reconnect to the database if the connection has been closed.
113
+
114
+ NOTE: Django database functions are not async-safe and must be called
115
+ via e.g. sync_to_async. They will silently fail and block the handler
116
+ if called in an async context directly.
117
+ """
118
+ if IS_TESTING:
119
+ return
120
+
121
+ connection = connections["default"]
122
+
123
+ if not connection.is_usable():
124
+ log.debug("Connection was unusable, reconnecting...")
125
+ connection.connect()
126
+
127
+
106
128
  class PluginRunner(PluginRunnerServicer):
107
129
  """This process runs provided plugins that register interest in incoming events."""
108
130
 
@@ -118,6 +140,11 @@ class PluginRunner(PluginRunnerServicer):
118
140
  event_name = event.name
119
141
  relevant_plugins = EVENT_HANDLER_MAP[event_name]
120
142
 
143
+ log.debug(f"Processing {relevant_plugins} for {event_name}")
144
+
145
+ if relevant_plugins:
146
+ await reconnect_if_needed()
147
+
121
148
  if event_type in [EventType.PLUGIN_CREATED, EventType.PLUGIN_UPDATED]:
122
149
  plugin_name = event.target.id
123
150
  # filter only for the plugin(s) that were created/updated
@@ -126,6 +153,8 @@ class PluginRunner(PluginRunnerServicer):
126
153
  effect_list = []
127
154
 
128
155
  for plugin_name in relevant_plugins:
156
+ log.debug(f"Processing {plugin_name}")
157
+
129
158
  plugin = LOADED_PLUGINS[plugin_name]
130
159
  handler_class = plugin["class"]
131
160
  base_plugin_name = plugin_name.split(":")[0]
@@ -142,7 +171,7 @@ class PluginRunner(PluginRunnerServicer):
142
171
  )
143
172
 
144
173
  compute_start_time = time.time()
145
- _effects = await asyncio.get_running_loop().run_in_executor(None, handler.compute)
174
+ _effects = await sync_to_async(handler.compute)()
146
175
  effects = [
147
176
  Effect(
148
177
  type=effect.type,
@@ -166,9 +195,12 @@ class PluginRunner(PluginRunnerServicer):
166
195
  tags={"plugin": plugin_name},
167
196
  )
168
197
  except Exception as e:
198
+ log.error(f"Encountered exception in plugin {plugin_name}:")
199
+
169
200
  for error_line_with_newlines in traceback.format_exception(e):
170
201
  for error_line in error_line_with_newlines.split("\n"):
171
202
  log.error(error_line)
203
+
172
204
  continue
173
205
 
174
206
  effect_list += effects
@@ -204,7 +236,7 @@ async def synchronize_plugins(run_once: bool = False) -> None:
204
236
  """
205
237
  log.info(f'synchronize_plugins: listening for messages on pubsub channel "{CHANNEL_NAME}"')
206
238
 
207
- client, pubsub = get_client()
239
+ _, pubsub = get_client()
208
240
  await pubsub.psubscribe(CHANNEL_NAME)
209
241
 
210
242
  while True:
@@ -50,7 +50,7 @@ license = "MIT"
50
50
  name = "canvas"
51
51
  readme = "README.md"
52
52
  requires-python = ">=3.11,<3.13"
53
- version = "0.22.0"
53
+ version = "0.22.1"
54
54
 
55
55
  [project.scripts]
56
56
  canvas = "canvas_cli.main:app"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes