canvas 0.13.3__tar.gz → 0.14.0__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 (282) hide show
  1. {canvas-0.13.3 → canvas-0.14.0}/PKG-INFO +1 -3
  2. {canvas-0.13.3 → canvas-0.14.0}/canvas_generated/messages/effects_pb2.py +2 -2
  3. {canvas-0.13.3 → canvas-0.14.0}/canvas_generated/messages/effects_pb2.pyi +2 -0
  4. canvas-0.14.0/canvas_sdk/effects/questionnaire_result.py +29 -0
  5. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/models/__init__.py +1 -0
  6. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/v1/data/command.py +13 -0
  7. canvas-0.14.0/plugin_runner/aws_headers.py +77 -0
  8. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/plugin_installer.py +25 -7
  9. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/test_plugin_installer.py +10 -12
  10. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/test_sandbox.py +13 -1
  11. {canvas-0.13.3 → canvas-0.14.0}/pyproject.toml +1 -3
  12. {canvas-0.13.3 → canvas-0.14.0}/settings.py +4 -0
  13. {canvas-0.13.3 → canvas-0.14.0}/README.md +0 -0
  14. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/__init__.py +0 -0
  15. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/__init__.py +0 -0
  16. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/auth/__init__.py +0 -0
  17. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/auth/tests.py +0 -0
  18. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/auth/utils.py +0 -0
  19. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/__init__.py +0 -0
  20. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/emit.py +0 -0
  21. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/ALLERGY_INTOLERANCE_CREATED.ndjson +0 -0
  22. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/ALLERGY_INTOLERANCE_UPDATED.ndjson +0 -0
  23. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CANCELED.ndjson +0 -0
  24. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CHECKED_IN.ndjson +0 -0
  25. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CREATED.ndjson +0 -0
  26. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_NO_SHOWED.ndjson +0 -0
  27. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_RESCHEDULED.ndjson +0 -0
  28. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_RESTORED.ndjson +0 -0
  29. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_UPDATED.ndjson +0 -0
  30. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__CONDITION_SELECTED.ndjson +0 -0
  31. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__POST_COMMIT.ndjson +0 -0
  32. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__POST_ORIGINATE.ndjson +0 -0
  33. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__POST_UPDATE.ndjson +0 -0
  34. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__PRE_COMMIT.ndjson +0 -0
  35. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__PRE_ORIGINATE.ndjson +0 -0
  36. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__PRE_UPDATE.ndjson +0 -0
  37. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/BILLING_LINE_ITEM_CREATED.ndjson +0 -0
  38. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/BILLING_LINE_ITEM_UPDATED.ndjson +0 -0
  39. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/CONDITION_ASSESSED.ndjson +0 -0
  40. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/CONDITION_CREATED.ndjson +0 -0
  41. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/CONDITION_UPDATED.ndjson +0 -0
  42. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/CRON.ndjson +0 -0
  43. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/ENCOUNTER_CREATED.ndjson +0 -0
  44. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/ENCOUNTER_UPDATED.ndjson +0 -0
  45. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_CREATED.ndjson +0 -0
  46. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_STATEMENT_CREATED.ndjson +0 -0
  47. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_STATEMENT_UPDATED.ndjson +0 -0
  48. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_UPDATED.ndjson +0 -0
  49. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/INTERVIEW_CREATED.ndjson +0 -0
  50. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/INTERVIEW_UPDATED.ndjson +0 -0
  51. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/LAB_ORDER_CREATED.ndjson +0 -0
  52. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/LAB_ORDER_UPDATED.ndjson +0 -0
  53. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_LIST_ITEM_CREATED.ndjson +0 -0
  54. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_LIST_ITEM_UPDATED.ndjson +0 -0
  55. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__POST_COMMIT.ndjson +0 -0
  56. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__POST_ORIGINATE.ndjson +0 -0
  57. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__POST_UPDATE.ndjson +0 -0
  58. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__PRE_COMMIT.ndjson +0 -0
  59. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__PRE_ORIGINATE.ndjson +0 -0
  60. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__PRE_UPDATE.ndjson +0 -0
  61. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT__MEDICATION__POST_SEARCH.ndjson +0 -0
  62. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/PATIENT_CREATED.ndjson +0 -0
  63. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/PATIENT_UPDATED.ndjson +0 -0
  64. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/PLAN_COMMAND__POST_ORIGINATE.ndjson +0 -0
  65. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/PLAN_COMMAND__PRE_ORIGINATE.ndjson +0 -0
  66. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__POST_COMMIT.ndjson +0 -0
  67. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__POST_ORIGINATE.ndjson +0 -0
  68. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__POST_UPDATE.ndjson +0 -0
  69. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__PRE_COMMIT.ndjson +0 -0
  70. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__PRE_ORIGINATE.ndjson +0 -0
  71. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__PRE_UPDATE.ndjson +0 -0
  72. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE__QUESTIONNAIRE__POST_SEARCH.ndjson +0 -0
  73. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/TASK_COMMENT_CREATED.ndjson +0 -0
  74. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/TASK_CREATED.ndjson +0 -0
  75. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/TASK_UPDATED.ndjson +0 -0
  76. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/VITAL_SIGN_CREATED.ndjson +0 -0
  77. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/emit/event_fixtures/VITAL_SIGN_UPDATED.ndjson +0 -0
  78. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/logs/__init__.py +0 -0
  79. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/logs/logs.py +0 -0
  80. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/plugin/__init__.py +0 -0
  81. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/plugin/plugin.py +0 -0
  82. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/plugin/tests.py +0 -0
  83. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/run_plugins/__init__.py +0 -0
  84. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/apps/run_plugins/run_plugins.py +0 -0
  85. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/conftest.py +0 -0
  86. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/main.py +0 -0
  87. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/templates/plugins/application/cookiecutter.json +0 -0
  88. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/CANVAS_MANIFEST.json +0 -0
  89. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/README.md +0 -0
  90. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/applications/__init__.py +0 -0
  91. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/applications/my_application.py +0 -0
  92. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/assets/python-logo.png +0 -0
  93. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/templates/plugins/default/cookiecutter.json +0 -0
  94. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/CANVAS_MANIFEST.json +0 -0
  95. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/README.md +0 -0
  96. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/protocols/__init__.py +0 -0
  97. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/protocols/my_protocol.py +0 -0
  98. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/tests.py +0 -0
  99. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/utils/__init__.py +0 -0
  100. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/utils/context/__init__.py +0 -0
  101. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/utils/context/context.py +0 -0
  102. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/utils/context/tests.py +0 -0
  103. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/utils/print/__init__.py +0 -0
  104. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/utils/print/print.py +0 -0
  105. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/utils/print/tests.py +0 -0
  106. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/utils/urls/__init__.py +0 -0
  107. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/utils/urls/tests.py +0 -0
  108. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/utils/urls/urls.py +0 -0
  109. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/utils/validators/__init__.py +0 -0
  110. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/utils/validators/manifest_schema.py +0 -0
  111. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/utils/validators/tests.py +0 -0
  112. {canvas-0.13.3 → canvas-0.14.0}/canvas_cli/utils/validators/validators.py +0 -0
  113. {canvas-0.13.3 → canvas-0.14.0}/canvas_generated/messages/effects_pb2_grpc.py +0 -0
  114. {canvas-0.13.3 → canvas-0.14.0}/canvas_generated/messages/events_pb2.py +0 -0
  115. {canvas-0.13.3 → canvas-0.14.0}/canvas_generated/messages/events_pb2.pyi +0 -0
  116. {canvas-0.13.3 → canvas-0.14.0}/canvas_generated/messages/events_pb2_grpc.py +0 -0
  117. {canvas-0.13.3 → canvas-0.14.0}/canvas_generated/messages/plugins_pb2.py +0 -0
  118. {canvas-0.13.3 → canvas-0.14.0}/canvas_generated/messages/plugins_pb2.pyi +0 -0
  119. {canvas-0.13.3 → canvas-0.14.0}/canvas_generated/messages/plugins_pb2_grpc.py +0 -0
  120. {canvas-0.13.3 → canvas-0.14.0}/canvas_generated/services/plugin_runner_pb2.py +0 -0
  121. {canvas-0.13.3 → canvas-0.14.0}/canvas_generated/services/plugin_runner_pb2.pyi +0 -0
  122. {canvas-0.13.3 → canvas-0.14.0}/canvas_generated/services/plugin_runner_pb2_grpc.py +0 -0
  123. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/__init__.py +0 -0
  124. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/base.py +0 -0
  125. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/__init__.py +0 -0
  126. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/base.py +0 -0
  127. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/commands/allergy.py +0 -0
  128. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/commands/assess.py +0 -0
  129. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/commands/close_goal.py +0 -0
  130. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/commands/diagnose.py +0 -0
  131. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/commands/exam.py +0 -0
  132. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/commands/family_history.py +0 -0
  133. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/commands/goal.py +0 -0
  134. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/commands/history_present_illness.py +0 -0
  135. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/commands/instruct.py +0 -0
  136. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/commands/lab_order.py +0 -0
  137. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/commands/medical_history.py +0 -0
  138. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/commands/medication_statement.py +0 -0
  139. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/commands/past_surgical_history.py +0 -0
  140. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/commands/perform.py +0 -0
  141. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/commands/plan.py +0 -0
  142. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/commands/prescribe.py +0 -0
  143. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/commands/questionnaire.py +0 -0
  144. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/commands/reason_for_visit.py +0 -0
  145. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/commands/refill.py +0 -0
  146. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/commands/remove_allergy.py +0 -0
  147. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/commands/review_of_systems.py +0 -0
  148. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/commands/stop_medication.py +0 -0
  149. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/commands/structured_assessment.py +0 -0
  150. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/commands/task.py +0 -0
  151. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/commands/update_diagnosis.py +0 -0
  152. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/commands/update_goal.py +0 -0
  153. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/commands/vitals.py +0 -0
  154. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/constants.py +0 -0
  155. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/tests/protocol/__init__.py +0 -0
  156. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/tests/protocol/tests.py +0 -0
  157. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/tests/schema/__init__.py +0 -0
  158. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/tests/schema/tests.py +0 -0
  159. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/tests/test_utils.py +0 -0
  160. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/tests/unit/__init__.py +0 -0
  161. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/commands/tests/unit/tests.py +0 -0
  162. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/effects/__init__.py +0 -0
  163. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/effects/banner_alert/__init__.py +0 -0
  164. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/effects/banner_alert/add_banner_alert.py +0 -0
  165. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/effects/banner_alert/remove_banner_alert.py +0 -0
  166. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/effects/banner_alert/tests.py +0 -0
  167. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/effects/base.py +0 -0
  168. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/effects/launch_modal.py +0 -0
  169. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/effects/patient_chart_summary_configuration.py +0 -0
  170. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/effects/patient_portal/__init__.py +0 -0
  171. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/effects/patient_portal/intake_form_results.py +0 -0
  172. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/effects/patient_profile_configuration.py +0 -0
  173. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/effects/protocol_card/__init__.py +0 -0
  174. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/effects/protocol_card/protocol_card.py +0 -0
  175. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/effects/protocol_card/tests.py +0 -0
  176. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/effects/show_button.py +0 -0
  177. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/effects/surescripts/surescripts_messages.py +0 -0
  178. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/effects/task/task.py +0 -0
  179. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/events/__init__.py +0 -0
  180. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/events/base.py +0 -0
  181. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/handlers/__init__.py +0 -0
  182. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/handlers/action_button.py +0 -0
  183. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/handlers/application.py +0 -0
  184. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/handlers/base.py +0 -0
  185. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/handlers/cron_task.py +0 -0
  186. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/protocols/__init__.py +0 -0
  187. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/protocols/base.py +0 -0
  188. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/protocols/clinical_quality_measure.py +0 -0
  189. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/protocols/timeframe.py +0 -0
  190. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/tests/__init__.py +0 -0
  191. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/utils/__init__.py +0 -0
  192. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/utils/db.py +0 -0
  193. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/utils/http.py +0 -0
  194. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/utils/stats.py +0 -0
  195. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/utils/tests.py +0 -0
  196. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/v1/__init__.py +0 -0
  197. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/v1/data/__init__.py +0 -0
  198. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/v1/data/allergy_intolerance.py +0 -0
  199. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/v1/data/base.py +0 -0
  200. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/v1/data/billing.py +0 -0
  201. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/v1/data/common.py +0 -0
  202. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/v1/data/condition.py +0 -0
  203. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/v1/data/detected_issue.py +0 -0
  204. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/v1/data/device.py +0 -0
  205. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/v1/data/imaging.py +0 -0
  206. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/v1/data/lab.py +0 -0
  207. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/v1/data/medication.py +0 -0
  208. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/v1/data/note.py +0 -0
  209. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/v1/data/observation.py +0 -0
  210. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/v1/data/organization.py +0 -0
  211. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/v1/data/patient.py +0 -0
  212. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/v1/data/practicelocation.py +0 -0
  213. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/v1/data/protocol_override.py +0 -0
  214. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/v1/data/questionnaire.py +0 -0
  215. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/v1/data/staff.py +0 -0
  216. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/v1/data/task.py +0 -0
  217. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/v1/data/user.py +0 -0
  218. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/value_set/__init__.py +0 -0
  219. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/value_set/custom.py +0 -0
  220. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/value_set/tests/test_value_sets.py +0 -0
  221. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/value_set/v2022/__init__.py +0 -0
  222. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/value_set/v2022/adverse_event.py +0 -0
  223. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/value_set/v2022/allergy.py +0 -0
  224. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/value_set/v2022/assessment.py +0 -0
  225. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/value_set/v2022/communication.py +0 -0
  226. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/value_set/v2022/condition.py +0 -0
  227. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/value_set/v2022/device.py +0 -0
  228. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/value_set/v2022/diagnostic_study.py +0 -0
  229. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/value_set/v2022/encounter.py +0 -0
  230. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/value_set/v2022/immunization.py +0 -0
  231. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/value_set/v2022/individual_characteristic.py +0 -0
  232. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/value_set/v2022/intervention.py +0 -0
  233. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/value_set/v2022/laboratory_test.py +0 -0
  234. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/value_set/v2022/medication.py +0 -0
  235. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/value_set/v2022/physical_exam.py +0 -0
  236. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/value_set/v2022/procedure.py +0 -0
  237. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/value_set/v2022/symptom.py +0 -0
  238. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/value_set/value_set.py +0 -0
  239. {canvas-0.13.3 → canvas-0.14.0}/canvas_sdk/views/__init__.py +0 -0
  240. {canvas-0.13.3 → canvas-0.14.0}/logger/__init__.py +0 -0
  241. {canvas-0.13.3 → canvas-0.14.0}/logger/logger.py +0 -0
  242. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/__init__.py +0 -0
  243. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/authentication.py +0 -0
  244. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/exceptions.py +0 -0
  245. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/plugin_runner.py +0 -0
  246. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/plugin_synchronizer.py +0 -0
  247. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/sandbox.py +0 -0
  248. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/__init__.py +0 -0
  249. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/data/plugins/.gitkeep +0 -0
  250. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/example_plugin/CANVAS_MANIFEST.json +0 -0
  251. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/example_plugin/README.md +0 -0
  252. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/example_plugin/__init__.py +0 -0
  253. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/example_plugin/protocols/__init__.py +0 -0
  254. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/example_plugin/protocols/my_protocol.py +0 -0
  255. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v1/CANVAS_MANIFEST.json +0 -0
  256. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v1/README.md +0 -0
  257. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v1/other_module/__init__.py +0 -0
  258. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v1/other_module/base.py +0 -0
  259. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v1/protocols/__init__.py +0 -0
  260. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v1/protocols/my_protocol.py +0 -0
  261. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v2/CANVAS_MANIFEST.json +0 -0
  262. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v2/README.md +0 -0
  263. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v2/other_module/__init__.py +0 -0
  264. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v2/other_module/base.py +0 -0
  265. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v2/protocols/__init__.py +0 -0
  266. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v2/protocols/my_protocol.py +0 -0
  267. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v3/CANVAS_MANIFEST.json +0 -0
  268. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v3/README.md +0 -0
  269. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v3/other_module/__init__.py +0 -0
  270. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v3/other_module/base.py +0 -0
  271. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v3/protocols/__init__.py +0 -0
  272. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_outside_plugin_v3/protocols/my_protocol.py +0 -0
  273. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_plugin/CANVAS_MANIFEST.json +0 -0
  274. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_plugin/README.md +0 -0
  275. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_plugin/other_module/__init__.py +0 -0
  276. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_plugin/other_module/base.py +0 -0
  277. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_plugin/protocols/__init__.py +0 -0
  278. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/fixtures/plugins/test_module_imports_plugin/protocols/my_protocol.py +0 -0
  279. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/test_application.py +0 -0
  280. {canvas-0.13.3 → canvas-0.14.0}/plugin_runner/tests/test_plugin_runner.py +0 -0
  281. {canvas-0.13.3 → canvas-0.14.0}/pubsub/__init__.py +0 -0
  282. {canvas-0.13.3 → canvas-0.14.0}/pubsub/pubsub.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: canvas
3
- Version: 0.13.3
3
+ Version: 0.14.0
4
4
  Summary: SDK to customize event-driven actions in your Canvas instance
5
5
  License: MIT
6
6
  Author: Canvas Team
@@ -10,8 +10,6 @@ Classifier: License :: OSI Approved :: MIT License
10
10
  Classifier: Programming Language :: Python :: 3
11
11
  Classifier: Programming Language :: Python :: 3.11
12
12
  Classifier: Programming Language :: Python :: 3.12
13
- Requires-Dist: boto3 (>=1.35.88,<2.0.0)
14
- Requires-Dist: boto3-stubs[s3] (>=1.35.88,<2.0.0)
15
13
  Requires-Dist: cookiecutter
16
14
  Requires-Dist: cron-converter (>=1.2.1,<2.0.0)
17
15
  Requires-Dist: deprecation (>=2.1.0,<3.0.0)
@@ -14,7 +14,7 @@ _sym_db = _symbol_database.Default()
14
14
 
15
15
 
16
16
 
17
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'canvas_generated/messages/effects.proto\x12\x06\x63\x61nvas\"c\n\x06\x45\x66\x66\x65\x63t\x12 \n\x04type\x18\x01 \x01(\x0e\x32\x12.canvas.EffectType\x12\x0f\n\x07payload\x18\x02 \x01(\t\x12\x13\n\x0bplugin_name\x18\x03 \x01(\t\x12\x11\n\tclassname\x18\x04 \x01(\t*\x83(\n\nEffectType\x12\x12\n\x0eUNKNOWN_EFFECT\x10\x00\x12\x07\n\x03LOG\x10\x01\x12\x14\n\x10\x41\x44\x44_PLAN_COMMAND\x10\x02\x12\x1f\n\x1b\x41UTOCOMPLETE_SEARCH_RESULTS\x10\x03\x12\x14\n\x10\x41\x44\x44_BANNER_ALERT\x10\x04\x12\x17\n\x13REMOVE_BANNER_ALERT\x10\x05\x12\x1c\n\x18ORIGINATE_ASSESS_COMMAND\x10\x06\x12\x17\n\x13\x45\x44IT_ASSESS_COMMAND\x10\x07\x12\x19\n\x15\x44\x45LETE_ASSESS_COMMAND\x10\x08\x12\x19\n\x15\x43OMMIT_ASSESS_COMMAND\x10\t\x12!\n\x1d\x45NTER_IN_ERROR_ASSESS_COMMAND\x10\n\x12\x1e\n\x1aORIGINATE_DIAGNOSE_COMMAND\x10\x0b\x12\x19\n\x15\x45\x44IT_DIAGNOSE_COMMAND\x10\x0c\x12\x1b\n\x17\x44\x45LETE_DIAGNOSE_COMMAND\x10\r\x12\x1b\n\x17\x43OMMIT_DIAGNOSE_COMMAND\x10\x0e\x12#\n\x1f\x45NTER_IN_ERROR_DIAGNOSE_COMMAND\x10\x0f\x12\x1a\n\x16ORIGINATE_GOAL_COMMAND\x10\x10\x12\x15\n\x11\x45\x44IT_GOAL_COMMAND\x10\x11\x12\x17\n\x13\x44\x45LETE_GOAL_COMMAND\x10\x12\x12\x17\n\x13\x43OMMIT_GOAL_COMMAND\x10\x13\x12\x1f\n\x1b\x45NTER_IN_ERROR_GOAL_COMMAND\x10\x14\x12\x19\n\x15ORIGINATE_HPI_COMMAND\x10\x15\x12\x14\n\x10\x45\x44IT_HPI_COMMAND\x10\x16\x12\x16\n\x12\x44\x45LETE_HPI_COMMAND\x10\x17\x12\x16\n\x12\x43OMMIT_HPI_COMMAND\x10\x18\x12\x1e\n\x1a\x45NTER_IN_ERROR_HPI_COMMAND\x10\x19\x12*\n&ORIGINATE_MEDICATION_STATEMENT_COMMAND\x10\x1a\x12%\n!EDIT_MEDICATION_STATEMENT_COMMAND\x10\x1b\x12\'\n#DELETE_MEDICATION_STATEMENT_COMMAND\x10\x1c\x12\'\n#COMMIT_MEDICATION_STATEMENT_COMMAND\x10\x1d\x12/\n+ENTER_IN_ERROR_MEDICATION_STATEMENT_COMMAND\x10\x1e\x12\x1a\n\x16ORIGINATE_PLAN_COMMAND\x10\x1f\x12\x15\n\x11\x45\x44IT_PLAN_COMMAND\x10 \x12\x17\n\x13\x44\x45LETE_PLAN_COMMAND\x10!\x12\x17\n\x13\x43OMMIT_PLAN_COMMAND\x10\"\x12\x1f\n\x1b\x45NTER_IN_ERROR_PLAN_COMMAND\x10#\x12\x1f\n\x1bORIGINATE_PRESCRIBE_COMMAND\x10$\x12\x1a\n\x16\x45\x44IT_PRESCRIBE_COMMAND\x10%\x12\x1c\n\x18\x44\x45LETE_PRESCRIBE_COMMAND\x10&\x12\x1c\n\x18\x43OMMIT_PRESCRIBE_COMMAND\x10\'\x12$\n ENTER_IN_ERROR_PRESCRIBE_COMMAND\x10(\x12#\n\x1fORIGINATE_QUESTIONNAIRE_COMMAND\x10)\x12\x1e\n\x1a\x45\x44IT_QUESTIONNAIRE_COMMAND\x10*\x12 \n\x1c\x44\x45LETE_QUESTIONNAIRE_COMMAND\x10+\x12 \n\x1c\x43OMMIT_QUESTIONNAIRE_COMMAND\x10,\x12(\n$ENTER_IN_ERROR_QUESTIONNAIRE_COMMAND\x10-\x12&\n\"ORIGINATE_REASON_FOR_VISIT_COMMAND\x10.\x12!\n\x1d\x45\x44IT_REASON_FOR_VISIT_COMMAND\x10/\x12#\n\x1f\x44\x45LETE_REASON_FOR_VISIT_COMMAND\x10\x30\x12#\n\x1f\x43OMMIT_REASON_FOR_VISIT_COMMAND\x10\x31\x12+\n\'ENTER_IN_ERROR_REASON_FOR_VISIT_COMMAND\x10\x32\x12%\n!ORIGINATE_STOP_MEDICATION_COMMAND\x10\x33\x12 \n\x1c\x45\x44IT_STOP_MEDICATION_COMMAND\x10\x34\x12\"\n\x1e\x44\x45LETE_STOP_MEDICATION_COMMAND\x10\x35\x12\"\n\x1e\x43OMMIT_STOP_MEDICATION_COMMAND\x10\x36\x12*\n&ENTER_IN_ERROR_STOP_MEDICATION_COMMAND\x10\x37\x12!\n\x1dORIGINATE_UPDATE_GOAL_COMMAND\x10\x38\x12\x1c\n\x18\x45\x44IT_UPDATE_GOAL_COMMAND\x10\x39\x12\x1e\n\x1a\x44\x45LETE_UPDATE_GOAL_COMMAND\x10:\x12\x1e\n\x1a\x43OMMIT_UPDATE_GOAL_COMMAND\x10;\x12&\n\"ENTER_IN_ERROR_UPDATE_GOAL_COMMAND\x10<\x12\x1d\n\x19ORIGINATE_PERFORM_COMMAND\x10=\x12\x18\n\x14\x45\x44IT_PERFORM_COMMAND\x10>\x12\x1a\n\x16\x44\x45LETE_PERFORM_COMMAND\x10?\x12\x1a\n\x16\x43OMMIT_PERFORM_COMMAND\x10@\x12\"\n\x1e\x45NTER_IN_ERROR_PERFORM_COMMAND\x10\x41\x12\x1e\n\x1aORIGINATE_INSTRUCT_COMMAND\x10\x42\x12\x19\n\x15\x45\x44IT_INSTRUCT_COMMAND\x10\x43\x12\x1b\n\x17\x44\x45LETE_INSTRUCT_COMMAND\x10\x44\x12\x1b\n\x17\x43OMMIT_INSTRUCT_COMMAND\x10\x45\x12#\n\x1f\x45NTER_IN_ERROR_INSTRUCT_COMMAND\x10\x46\x12\x1f\n\x1bORIGINATE_LAB_ORDER_COMMAND\x10G\x12\x1a\n\x16\x45\x44IT_LAB_ORDER_COMMAND\x10H\x12\x1c\n\x18\x44\x45LETE_LAB_ORDER_COMMAND\x10I\x12\x1c\n\x18\x43OMMIT_LAB_ORDER_COMMAND\x10J\x12$\n ENTER_IN_ERROR_LAB_ORDER_COMMAND\x10K\x12$\n ORIGINATE_FAMILY_HISTORY_COMMAND\x10L\x12\x1f\n\x1b\x45\x44IT_FAMILY_HISTORY_COMMAND\x10M\x12!\n\x1d\x44\x45LETE_FAMILY_HISTORY_COMMAND\x10N\x12!\n\x1d\x43OMMIT_FAMILY_HISTORY_COMMAND\x10O\x12)\n%ENTER_IN_ERROR_FAMILY_HISTORY_COMMAND\x10P\x12\x1d\n\x19ORIGINATE_ALLERGY_COMMAND\x10Q\x12\x18\n\x14\x45\x44IT_ALLERGY_COMMAND\x10R\x12\x1a\n\x16\x44\x45LETE_ALLERGY_COMMAND\x10S\x12\x1a\n\x16\x43OMMIT_ALLERGY_COMMAND\x10T\x12\"\n\x1e\x45NTER_IN_ERROR_ALLERGY_COMMAND\x10U\x12$\n ORIGINATE_REMOVE_ALLERGY_COMMAND\x10V\x12\x1f\n\x1b\x45\x44IT_REMOVE_ALLERGY_COMMAND\x10W\x12!\n\x1d\x44\x45LETE_REMOVE_ALLERGY_COMMAND\x10X\x12!\n\x1d\x43OMMIT_REMOVE_ALLERGY_COMMAND\x10Y\x12)\n%ENTER_IN_ERROR_REMOVE_ALLERGY_COMMAND\x10Z\x12&\n\"ORIGINATE_SURGICAL_HISTORY_COMMAND\x10[\x12!\n\x1d\x45\x44IT_SURGICAL_HISTORY_COMMAND\x10\\\x12#\n\x1f\x44\x45LETE_SURGICAL_HISTORY_COMMAND\x10]\x12#\n\x1f\x43OMMIT_SURGICAL_HISTORY_COMMAND\x10^\x12+\n\'ENTER_IN_ERROR_SURGICAL_HISTORY_COMMAND\x10_\x12\x0f\n\x0b\x43REATE_TASK\x10\x64\x12\x0f\n\x0bUPDATE_TASK\x10\x65\x12\x17\n\x13\x43REATE_TASK_COMMENT\x10\x66\x12%\n!ORIGINATE_MEDICAL_HISTORY_COMMAND\x10g\x12 \n\x1c\x45\x44IT_MEDICAL_HISTORY_COMMAND\x10h\x12\"\n\x1e\x44\x45LETE_MEDICAL_HISTORY_COMMAND\x10i\x12\"\n\x1e\x43OMMIT_MEDICAL_HISTORY_COMMAND\x10j\x12*\n&ENTER_IN_ERROR_MEDICAL_HISTORY_COMMAND\x10k\x12\x1f\n\x1b\x41\x44\x44_OR_UPDATE_PROTOCOL_CARD\x10n\x12\x1b\n\x16ORIGINATE_TASK_COMMAND\x10\x85\x01\x12\x16\n\x11\x45\x44IT_TASK_COMMAND\x10\x86\x01\x12\x18\n\x13\x44\x45LETE_TASK_COMMAND\x10\x87\x01\x12\x18\n\x13\x43OMMIT_TASK_COMMAND\x10\x88\x01\x12 \n\x1b\x45NTER_IN_ERROR_TASK_COMMAND\x10\x89\x01\x12\x1c\n\x18ORIGINATE_REFILL_COMMAND\x10q\x12\x17\n\x13\x45\x44IT_REFILL_COMMAND\x10r\x12\x19\n\x15\x44\x45LETE_REFILL_COMMAND\x10s\x12\x19\n\x15\x43OMMIT_REFILL_COMMAND\x10t\x12!\n\x1d\x45NTER_IN_ERROR_REFILL_COMMAND\x10u\x12\x1c\n\x18ORIGINATE_VITALS_COMMAND\x10v\x12\x17\n\x13\x45\x44IT_VITALS_COMMAND\x10w\x12\x19\n\x15\x44\x45LETE_VITALS_COMMAND\x10x\x12\x19\n\x15\x43OMMIT_VITALS_COMMAND\x10y\x12!\n\x1d\x45NTER_IN_ERROR_VITALS_COMMAND\x10z\x12&\n\"ORIGINATE_UPDATE_DIAGNOSIS_COMMAND\x10{\x12!\n\x1d\x45\x44IT_UPDATE_DIAGNOSIS_COMMAND\x10|\x12#\n\x1f\x44\x45LETE_UPDATE_DIAGNOSIS_COMMAND\x10}\x12#\n\x1f\x43OMMIT_UPDATE_DIAGNOSIS_COMMAND\x10~\x12+\n\'ENTER_IN_ERROR_UPDATE_DIAGNOSIS_COMMAND\x10\x7f\x12!\n\x1cORIGINATE_CLOSE_GOAL_COMMAND\x10\x80\x01\x12\x1c\n\x17\x45\x44IT_CLOSE_GOAL_COMMAND\x10\x81\x01\x12\x1e\n\x19\x44\x45LETE_CLOSE_GOAL_COMMAND\x10\x82\x01\x12\x1e\n\x19\x43OMMIT_CLOSE_GOAL_COMMAND\x10\x83\x01\x12&\n!ENTER_IN_ERROR_CLOSE_GOAL_COMMAND\x10\x84\x01\x12-\n(ANNOTATE_PATIENT_CHART_CONDITION_RESULTS\x10\xc8\x01\x12%\n ANNOTATE_CLAIM_CONDITION_RESULTS\x10\xac\x02\x12(\n#SHOW_PATIENT_CHART_SUMMARY_SECTIONS\x10\x90\x03\x12\"\n\x1dSHOW_PATIENT_PROFILE_SECTIONS\x10\xf4\x03\x12\x37\n2PATIENT_PROFILE__ADD_PHARMACY__POST_SEARCH_RESULTS\x10\xf5\x03\x12)\n$SEND_SURESCRIPTS_ELIGIBILITY_REQUEST\x10\xd8\x04\x12\x30\n+SEND_SURESCRIPTS_MEDICATION_HISTORY_REQUEST\x10\xd9\x04\x12&\n!SEND_SURESCRIPTS_BENEFITS_REQUEST\x10\xda\x04\x12\x1b\n\x16ORIGINATE_EXAM_COMMAND\x10\xbc\x05\x12\x16\n\x11\x45\x44IT_EXAM_COMMAND\x10\xbd\x05\x12\x18\n\x13\x44\x45LETE_EXAM_COMMAND\x10\xbe\x05\x12\x18\n\x13\x43OMMIT_EXAM_COMMAND\x10\xbf\x05\x12 \n\x1b\x45NTER_IN_ERROR_EXAM_COMMAND\x10\xc0\x05\x12\x1a\n\x15ORIGINATE_ROS_COMMAND\x10\xa0\x06\x12\x15\n\x10\x45\x44IT_ROS_COMMAND\x10\xa1\x06\x12\x17\n\x12\x44\x45LETE_ROS_COMMAND\x10\xa2\x06\x12\x17\n\x12\x43OMMIT_ROS_COMMAND\x10\xa3\x06\x12\x1f\n\x1a\x45NTER_IN_ERROR_ROS_COMMAND\x10\xa4\x06\x12,\n\'ORIGINATE_STRUCTURED_ASSESSMENT_COMMAND\x10\x84\x07\x12\'\n\"EDIT_STRUCTURED_ASSESSMENT_COMMAND\x10\x85\x07\x12)\n$DELETE_STRUCTURED_ASSESSMENT_COMMAND\x10\x86\x07\x12)\n$COMMIT_STRUCTURED_ASSESSMENT_COMMAND\x10\x87\x07\x12\x31\n,ENTER_IN_ERROR_STRUCTURED_ASSESSMENT_COMMAND\x10\x88\x07\x12\x17\n\x12SHOW_ACTION_BUTTON\x10\xe8\x07\x12(\n#PATIENT_PORTAL__INTAKE_FORM_RESULTS\x10\xd0\x0f\x12\x11\n\x0cLAUNCH_MODAL\x10\xb8\x17\x62\x06proto3')
17
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'canvas_generated/messages/effects.proto\x12\x06\x63\x61nvas\"c\n\x06\x45\x66\x66\x65\x63t\x12 \n\x04type\x18\x01 \x01(\x0e\x32\x12.canvas.EffectType\x12\x0f\n\x07payload\x18\x02 \x01(\t\x12\x13\n\x0bplugin_name\x18\x03 \x01(\t\x12\x11\n\tclassname\x18\x04 \x01(\t*\xa5(\n\nEffectType\x12\x12\n\x0eUNKNOWN_EFFECT\x10\x00\x12\x07\n\x03LOG\x10\x01\x12\x14\n\x10\x41\x44\x44_PLAN_COMMAND\x10\x02\x12\x1f\n\x1b\x41UTOCOMPLETE_SEARCH_RESULTS\x10\x03\x12\x14\n\x10\x41\x44\x44_BANNER_ALERT\x10\x04\x12\x17\n\x13REMOVE_BANNER_ALERT\x10\x05\x12\x1c\n\x18ORIGINATE_ASSESS_COMMAND\x10\x06\x12\x17\n\x13\x45\x44IT_ASSESS_COMMAND\x10\x07\x12\x19\n\x15\x44\x45LETE_ASSESS_COMMAND\x10\x08\x12\x19\n\x15\x43OMMIT_ASSESS_COMMAND\x10\t\x12!\n\x1d\x45NTER_IN_ERROR_ASSESS_COMMAND\x10\n\x12\x1e\n\x1aORIGINATE_DIAGNOSE_COMMAND\x10\x0b\x12\x19\n\x15\x45\x44IT_DIAGNOSE_COMMAND\x10\x0c\x12\x1b\n\x17\x44\x45LETE_DIAGNOSE_COMMAND\x10\r\x12\x1b\n\x17\x43OMMIT_DIAGNOSE_COMMAND\x10\x0e\x12#\n\x1f\x45NTER_IN_ERROR_DIAGNOSE_COMMAND\x10\x0f\x12\x1a\n\x16ORIGINATE_GOAL_COMMAND\x10\x10\x12\x15\n\x11\x45\x44IT_GOAL_COMMAND\x10\x11\x12\x17\n\x13\x44\x45LETE_GOAL_COMMAND\x10\x12\x12\x17\n\x13\x43OMMIT_GOAL_COMMAND\x10\x13\x12\x1f\n\x1b\x45NTER_IN_ERROR_GOAL_COMMAND\x10\x14\x12\x19\n\x15ORIGINATE_HPI_COMMAND\x10\x15\x12\x14\n\x10\x45\x44IT_HPI_COMMAND\x10\x16\x12\x16\n\x12\x44\x45LETE_HPI_COMMAND\x10\x17\x12\x16\n\x12\x43OMMIT_HPI_COMMAND\x10\x18\x12\x1e\n\x1a\x45NTER_IN_ERROR_HPI_COMMAND\x10\x19\x12*\n&ORIGINATE_MEDICATION_STATEMENT_COMMAND\x10\x1a\x12%\n!EDIT_MEDICATION_STATEMENT_COMMAND\x10\x1b\x12\'\n#DELETE_MEDICATION_STATEMENT_COMMAND\x10\x1c\x12\'\n#COMMIT_MEDICATION_STATEMENT_COMMAND\x10\x1d\x12/\n+ENTER_IN_ERROR_MEDICATION_STATEMENT_COMMAND\x10\x1e\x12\x1a\n\x16ORIGINATE_PLAN_COMMAND\x10\x1f\x12\x15\n\x11\x45\x44IT_PLAN_COMMAND\x10 \x12\x17\n\x13\x44\x45LETE_PLAN_COMMAND\x10!\x12\x17\n\x13\x43OMMIT_PLAN_COMMAND\x10\"\x12\x1f\n\x1b\x45NTER_IN_ERROR_PLAN_COMMAND\x10#\x12\x1f\n\x1bORIGINATE_PRESCRIBE_COMMAND\x10$\x12\x1a\n\x16\x45\x44IT_PRESCRIBE_COMMAND\x10%\x12\x1c\n\x18\x44\x45LETE_PRESCRIBE_COMMAND\x10&\x12\x1c\n\x18\x43OMMIT_PRESCRIBE_COMMAND\x10\'\x12$\n ENTER_IN_ERROR_PRESCRIBE_COMMAND\x10(\x12#\n\x1fORIGINATE_QUESTIONNAIRE_COMMAND\x10)\x12\x1e\n\x1a\x45\x44IT_QUESTIONNAIRE_COMMAND\x10*\x12 \n\x1c\x44\x45LETE_QUESTIONNAIRE_COMMAND\x10+\x12 \n\x1c\x43OMMIT_QUESTIONNAIRE_COMMAND\x10,\x12(\n$ENTER_IN_ERROR_QUESTIONNAIRE_COMMAND\x10-\x12&\n\"ORIGINATE_REASON_FOR_VISIT_COMMAND\x10.\x12!\n\x1d\x45\x44IT_REASON_FOR_VISIT_COMMAND\x10/\x12#\n\x1f\x44\x45LETE_REASON_FOR_VISIT_COMMAND\x10\x30\x12#\n\x1f\x43OMMIT_REASON_FOR_VISIT_COMMAND\x10\x31\x12+\n\'ENTER_IN_ERROR_REASON_FOR_VISIT_COMMAND\x10\x32\x12%\n!ORIGINATE_STOP_MEDICATION_COMMAND\x10\x33\x12 \n\x1c\x45\x44IT_STOP_MEDICATION_COMMAND\x10\x34\x12\"\n\x1e\x44\x45LETE_STOP_MEDICATION_COMMAND\x10\x35\x12\"\n\x1e\x43OMMIT_STOP_MEDICATION_COMMAND\x10\x36\x12*\n&ENTER_IN_ERROR_STOP_MEDICATION_COMMAND\x10\x37\x12!\n\x1dORIGINATE_UPDATE_GOAL_COMMAND\x10\x38\x12\x1c\n\x18\x45\x44IT_UPDATE_GOAL_COMMAND\x10\x39\x12\x1e\n\x1a\x44\x45LETE_UPDATE_GOAL_COMMAND\x10:\x12\x1e\n\x1a\x43OMMIT_UPDATE_GOAL_COMMAND\x10;\x12&\n\"ENTER_IN_ERROR_UPDATE_GOAL_COMMAND\x10<\x12\x1d\n\x19ORIGINATE_PERFORM_COMMAND\x10=\x12\x18\n\x14\x45\x44IT_PERFORM_COMMAND\x10>\x12\x1a\n\x16\x44\x45LETE_PERFORM_COMMAND\x10?\x12\x1a\n\x16\x43OMMIT_PERFORM_COMMAND\x10@\x12\"\n\x1e\x45NTER_IN_ERROR_PERFORM_COMMAND\x10\x41\x12\x1e\n\x1aORIGINATE_INSTRUCT_COMMAND\x10\x42\x12\x19\n\x15\x45\x44IT_INSTRUCT_COMMAND\x10\x43\x12\x1b\n\x17\x44\x45LETE_INSTRUCT_COMMAND\x10\x44\x12\x1b\n\x17\x43OMMIT_INSTRUCT_COMMAND\x10\x45\x12#\n\x1f\x45NTER_IN_ERROR_INSTRUCT_COMMAND\x10\x46\x12\x1f\n\x1bORIGINATE_LAB_ORDER_COMMAND\x10G\x12\x1a\n\x16\x45\x44IT_LAB_ORDER_COMMAND\x10H\x12\x1c\n\x18\x44\x45LETE_LAB_ORDER_COMMAND\x10I\x12\x1c\n\x18\x43OMMIT_LAB_ORDER_COMMAND\x10J\x12$\n ENTER_IN_ERROR_LAB_ORDER_COMMAND\x10K\x12$\n ORIGINATE_FAMILY_HISTORY_COMMAND\x10L\x12\x1f\n\x1b\x45\x44IT_FAMILY_HISTORY_COMMAND\x10M\x12!\n\x1d\x44\x45LETE_FAMILY_HISTORY_COMMAND\x10N\x12!\n\x1d\x43OMMIT_FAMILY_HISTORY_COMMAND\x10O\x12)\n%ENTER_IN_ERROR_FAMILY_HISTORY_COMMAND\x10P\x12\x1d\n\x19ORIGINATE_ALLERGY_COMMAND\x10Q\x12\x18\n\x14\x45\x44IT_ALLERGY_COMMAND\x10R\x12\x1a\n\x16\x44\x45LETE_ALLERGY_COMMAND\x10S\x12\x1a\n\x16\x43OMMIT_ALLERGY_COMMAND\x10T\x12\"\n\x1e\x45NTER_IN_ERROR_ALLERGY_COMMAND\x10U\x12$\n ORIGINATE_REMOVE_ALLERGY_COMMAND\x10V\x12\x1f\n\x1b\x45\x44IT_REMOVE_ALLERGY_COMMAND\x10W\x12!\n\x1d\x44\x45LETE_REMOVE_ALLERGY_COMMAND\x10X\x12!\n\x1d\x43OMMIT_REMOVE_ALLERGY_COMMAND\x10Y\x12)\n%ENTER_IN_ERROR_REMOVE_ALLERGY_COMMAND\x10Z\x12&\n\"ORIGINATE_SURGICAL_HISTORY_COMMAND\x10[\x12!\n\x1d\x45\x44IT_SURGICAL_HISTORY_COMMAND\x10\\\x12#\n\x1f\x44\x45LETE_SURGICAL_HISTORY_COMMAND\x10]\x12#\n\x1f\x43OMMIT_SURGICAL_HISTORY_COMMAND\x10^\x12+\n\'ENTER_IN_ERROR_SURGICAL_HISTORY_COMMAND\x10_\x12\x0f\n\x0b\x43REATE_TASK\x10\x64\x12\x0f\n\x0bUPDATE_TASK\x10\x65\x12\x17\n\x13\x43REATE_TASK_COMMENT\x10\x66\x12%\n!ORIGINATE_MEDICAL_HISTORY_COMMAND\x10g\x12 \n\x1c\x45\x44IT_MEDICAL_HISTORY_COMMAND\x10h\x12\"\n\x1e\x44\x45LETE_MEDICAL_HISTORY_COMMAND\x10i\x12\"\n\x1e\x43OMMIT_MEDICAL_HISTORY_COMMAND\x10j\x12*\n&ENTER_IN_ERROR_MEDICAL_HISTORY_COMMAND\x10k\x12\x1f\n\x1b\x41\x44\x44_OR_UPDATE_PROTOCOL_CARD\x10n\x12\x1b\n\x16ORIGINATE_TASK_COMMAND\x10\x85\x01\x12\x16\n\x11\x45\x44IT_TASK_COMMAND\x10\x86\x01\x12\x18\n\x13\x44\x45LETE_TASK_COMMAND\x10\x87\x01\x12\x18\n\x13\x43OMMIT_TASK_COMMAND\x10\x88\x01\x12 \n\x1b\x45NTER_IN_ERROR_TASK_COMMAND\x10\x89\x01\x12\x1c\n\x18ORIGINATE_REFILL_COMMAND\x10q\x12\x17\n\x13\x45\x44IT_REFILL_COMMAND\x10r\x12\x19\n\x15\x44\x45LETE_REFILL_COMMAND\x10s\x12\x19\n\x15\x43OMMIT_REFILL_COMMAND\x10t\x12!\n\x1d\x45NTER_IN_ERROR_REFILL_COMMAND\x10u\x12\x1c\n\x18ORIGINATE_VITALS_COMMAND\x10v\x12\x17\n\x13\x45\x44IT_VITALS_COMMAND\x10w\x12\x19\n\x15\x44\x45LETE_VITALS_COMMAND\x10x\x12\x19\n\x15\x43OMMIT_VITALS_COMMAND\x10y\x12!\n\x1d\x45NTER_IN_ERROR_VITALS_COMMAND\x10z\x12&\n\"ORIGINATE_UPDATE_DIAGNOSIS_COMMAND\x10{\x12!\n\x1d\x45\x44IT_UPDATE_DIAGNOSIS_COMMAND\x10|\x12#\n\x1f\x44\x45LETE_UPDATE_DIAGNOSIS_COMMAND\x10}\x12#\n\x1f\x43OMMIT_UPDATE_DIAGNOSIS_COMMAND\x10~\x12+\n\'ENTER_IN_ERROR_UPDATE_DIAGNOSIS_COMMAND\x10\x7f\x12!\n\x1cORIGINATE_CLOSE_GOAL_COMMAND\x10\x80\x01\x12\x1c\n\x17\x45\x44IT_CLOSE_GOAL_COMMAND\x10\x81\x01\x12\x1e\n\x19\x44\x45LETE_CLOSE_GOAL_COMMAND\x10\x82\x01\x12\x1e\n\x19\x43OMMIT_CLOSE_GOAL_COMMAND\x10\x83\x01\x12&\n!ENTER_IN_ERROR_CLOSE_GOAL_COMMAND\x10\x84\x01\x12 \n\x1b\x43REATE_QUESTIONNAIRE_RESULT\x10\x8a\x01\x12-\n(ANNOTATE_PATIENT_CHART_CONDITION_RESULTS\x10\xc8\x01\x12%\n ANNOTATE_CLAIM_CONDITION_RESULTS\x10\xac\x02\x12(\n#SHOW_PATIENT_CHART_SUMMARY_SECTIONS\x10\x90\x03\x12\"\n\x1dSHOW_PATIENT_PROFILE_SECTIONS\x10\xf4\x03\x12\x37\n2PATIENT_PROFILE__ADD_PHARMACY__POST_SEARCH_RESULTS\x10\xf5\x03\x12)\n$SEND_SURESCRIPTS_ELIGIBILITY_REQUEST\x10\xd8\x04\x12\x30\n+SEND_SURESCRIPTS_MEDICATION_HISTORY_REQUEST\x10\xd9\x04\x12&\n!SEND_SURESCRIPTS_BENEFITS_REQUEST\x10\xda\x04\x12\x1b\n\x16ORIGINATE_EXAM_COMMAND\x10\xbc\x05\x12\x16\n\x11\x45\x44IT_EXAM_COMMAND\x10\xbd\x05\x12\x18\n\x13\x44\x45LETE_EXAM_COMMAND\x10\xbe\x05\x12\x18\n\x13\x43OMMIT_EXAM_COMMAND\x10\xbf\x05\x12 \n\x1b\x45NTER_IN_ERROR_EXAM_COMMAND\x10\xc0\x05\x12\x1a\n\x15ORIGINATE_ROS_COMMAND\x10\xa0\x06\x12\x15\n\x10\x45\x44IT_ROS_COMMAND\x10\xa1\x06\x12\x17\n\x12\x44\x45LETE_ROS_COMMAND\x10\xa2\x06\x12\x17\n\x12\x43OMMIT_ROS_COMMAND\x10\xa3\x06\x12\x1f\n\x1a\x45NTER_IN_ERROR_ROS_COMMAND\x10\xa4\x06\x12,\n\'ORIGINATE_STRUCTURED_ASSESSMENT_COMMAND\x10\x84\x07\x12\'\n\"EDIT_STRUCTURED_ASSESSMENT_COMMAND\x10\x85\x07\x12)\n$DELETE_STRUCTURED_ASSESSMENT_COMMAND\x10\x86\x07\x12)\n$COMMIT_STRUCTURED_ASSESSMENT_COMMAND\x10\x87\x07\x12\x31\n,ENTER_IN_ERROR_STRUCTURED_ASSESSMENT_COMMAND\x10\x88\x07\x12\x17\n\x12SHOW_ACTION_BUTTON\x10\xe8\x07\x12(\n#PATIENT_PORTAL__INTAKE_FORM_RESULTS\x10\xd0\x0f\x12\x11\n\x0cLAUNCH_MODAL\x10\xb8\x17\x62\x06proto3')
18
18
 
19
19
  _globals = globals()
20
20
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -22,7 +22,7 @@ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'canvas_generated.messages.e
22
22
  if _descriptor._USE_C_DESCRIPTORS == False:
23
23
  DESCRIPTOR._options = None
24
24
  _globals['_EFFECTTYPE']._serialized_start=153
25
- _globals['_EFFECTTYPE']._serialized_end=5276
25
+ _globals['_EFFECTTYPE']._serialized_end=5310
26
26
  _globals['_EFFECT']._serialized_start=51
27
27
  _globals['_EFFECT']._serialized_end=150
28
28
  # @@protoc_insertion_point(module_scope)
@@ -137,6 +137,7 @@ class EffectType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
137
137
  DELETE_CLOSE_GOAL_COMMAND: _ClassVar[EffectType]
138
138
  COMMIT_CLOSE_GOAL_COMMAND: _ClassVar[EffectType]
139
139
  ENTER_IN_ERROR_CLOSE_GOAL_COMMAND: _ClassVar[EffectType]
140
+ CREATE_QUESTIONNAIRE_RESULT: _ClassVar[EffectType]
140
141
  ANNOTATE_PATIENT_CHART_CONDITION_RESULTS: _ClassVar[EffectType]
141
142
  ANNOTATE_CLAIM_CONDITION_RESULTS: _ClassVar[EffectType]
142
143
  SHOW_PATIENT_CHART_SUMMARY_SECTIONS: _ClassVar[EffectType]
@@ -293,6 +294,7 @@ EDIT_CLOSE_GOAL_COMMAND: EffectType
293
294
  DELETE_CLOSE_GOAL_COMMAND: EffectType
294
295
  COMMIT_CLOSE_GOAL_COMMAND: EffectType
295
296
  ENTER_IN_ERROR_CLOSE_GOAL_COMMAND: EffectType
297
+ CREATE_QUESTIONNAIRE_RESULT: EffectType
296
298
  ANNOTATE_PATIENT_CHART_CONDITION_RESULTS: EffectType
297
299
  ANNOTATE_CLAIM_CONDITION_RESULTS: EffectType
298
300
  SHOW_PATIENT_CHART_SUMMARY_SECTIONS: EffectType
@@ -0,0 +1,29 @@
1
+ from typing import Any
2
+
3
+ from canvas_sdk.effects.base import EffectType, _BaseEffect
4
+
5
+
6
+ class CreateQuestionnaireResult(_BaseEffect):
7
+ """CreateQuestionnaireResult effect."""
8
+
9
+ class Meta:
10
+ effect_type = EffectType.CREATE_QUESTIONNAIRE_RESULT
11
+
12
+ interview_id: str | None = None
13
+ score: float | None = None
14
+ abnormal: bool | None = None
15
+ narrative: str | None = None
16
+ code_system: str | None = None
17
+ code: str | None = None
18
+
19
+ @property
20
+ def values(self) -> dict[str, Any]:
21
+ """Make the payload."""
22
+ return {
23
+ "interview_id": self.interview_id,
24
+ "score": self.score,
25
+ "abnormal": self.abnormal or False,
26
+ "narrative": self.narrative or "",
27
+ "code_system": self.code_system,
28
+ "code": self.code,
29
+ }
@@ -5,3 +5,4 @@ from canvas_sdk.v1.data.condition import Condition
5
5
  from canvas_sdk.v1.data.note import Note
6
6
  from canvas_sdk.v1.data.patient import Patient
7
7
  from canvas_sdk.v1.data.user import CanvasUser
8
+ from canvas_sdk.v1.data.questionnaire import Interview
@@ -1,3 +1,4 @@
1
+ from django.apps import apps
1
2
  from django.db import models
2
3
 
3
4
  from canvas_sdk.v1.data.patient import Patient
@@ -25,3 +26,15 @@ class Command(models.Model):
25
26
  schema_key = models.TextField()
26
27
  data = models.JSONField()
27
28
  origination_source = models.CharField()
29
+ anchor_object_type = models.CharField()
30
+ anchor_object_dbid = models.BigIntegerField()
31
+
32
+ @property
33
+ def anchor_object(self) -> models.Model | None:
34
+ """
35
+ Use the anchor_object_type and anchor_object_dbid to get the anchor object for the command.
36
+ """
37
+ # TODO: Is the anchor object type enough here, or do we need a mapping? The home-app model
38
+ # names might not exactly match the plugins model names.
39
+ anchor_model = apps.get_model(app_label="canvas_sdk", model_name=self.anchor_object_type)
40
+ return anchor_model.objects.get(dbid=self.anchor_object_dbid)
@@ -0,0 +1,77 @@
1
+ # Shamelessly cribbed from https://charemza.name/blog/posts/aws/python/you-might-not-need-boto-3/
2
+
3
+ import datetime
4
+ import hashlib
5
+ import hmac
6
+ import urllib.parse
7
+
8
+
9
+ def aws_sig_v4_headers(
10
+ access_key_id: str,
11
+ secret_access_key: str,
12
+ pre_auth_headers: dict[str, str],
13
+ service: str,
14
+ region: str,
15
+ host: str,
16
+ method: str,
17
+ path: str,
18
+ query: dict[str, str],
19
+ payload: bytes,
20
+ ) -> dict[str, str]:
21
+ """Constructs signed headers for use in requests made to AWS."""
22
+ algorithm = "AWS4-HMAC-SHA256"
23
+ now = datetime.datetime.utcnow()
24
+ amzdate = now.strftime("%Y%m%dT%H%M%SZ")
25
+ datestamp = now.strftime("%Y%m%d")
26
+ payload_hash = hashlib.sha256(payload).hexdigest()
27
+ credential_scope = f"{datestamp}/{region}/{service}/aws4_request"
28
+
29
+ pre_auth_headers_lower = {
30
+ header_key.lower(): " ".join(header_value.split())
31
+ for header_key, header_value in pre_auth_headers.items()
32
+ }
33
+ required_headers = {
34
+ "host": host,
35
+ "x-amz-content-sha256": payload_hash,
36
+ "x-amz-date": amzdate,
37
+ }
38
+ headers = {**pre_auth_headers_lower, **required_headers}
39
+ header_keys = sorted(headers.keys())
40
+ signed_headers = ";".join(header_keys)
41
+
42
+ def signature() -> str:
43
+ def canonical_request() -> str:
44
+ canonical_uri = urllib.parse.quote(path, safe="/~")
45
+ quoted_query = sorted(
46
+ (urllib.parse.quote(key, safe="~"), urllib.parse.quote(value, safe="~"))
47
+ for key, value in query.items()
48
+ )
49
+ canonical_querystring = "&".join(f"{key}={value}" for key, value in quoted_query)
50
+ canonical_headers = "".join(f"{key}:{headers[key]}\n" for key in header_keys)
51
+
52
+ return (
53
+ f"{method}\n{canonical_uri}\n{canonical_querystring}\n"
54
+ + f"{canonical_headers}\n{signed_headers}\n{payload_hash}"
55
+ )
56
+
57
+ def sign(key: bytes, msg: str) -> bytes:
58
+ return hmac.new(key, msg.encode("utf-8"), hashlib.sha256).digest()
59
+
60
+ string_to_sign = (
61
+ f"{algorithm}\n{amzdate}\n{credential_scope}\n"
62
+ + hashlib.sha256(canonical_request().encode("utf-8")).hexdigest()
63
+ )
64
+
65
+ date_key = sign(("AWS4" + secret_access_key).encode("utf-8"), datestamp)
66
+ region_key = sign(date_key, region)
67
+ service_key = sign(region_key, service)
68
+ request_key = sign(service_key, "aws4_request")
69
+ return sign(request_key, string_to_sign).hex()
70
+
71
+ return {
72
+ **pre_auth_headers,
73
+ "x-amz-date": amzdate,
74
+ "x-amz-content-sha256": payload_hash,
75
+ "Authorization": f"{algorithm} Credential={access_key_id}/{credential_scope}, "
76
+ f"SignedHeaders={signed_headers}, Signature=" + signature(),
77
+ }
@@ -9,12 +9,13 @@ from pathlib import Path
9
9
  from typing import Any, TypedDict
10
10
  from urllib import parse
11
11
 
12
- import boto3
13
12
  import psycopg
13
+ import requests
14
14
  from psycopg import Connection
15
15
  from psycopg.rows import dict_row
16
16
 
17
17
  import settings
18
+ from plugin_runner.aws_headers import aws_sig_v4_headers
18
19
  from plugin_runner.exceptions import InvalidPluginFormat, PluginInstallationError
19
20
 
20
21
  # Plugin "packages" include this prefix in the database record for the plugin and the S3 bucket key.
@@ -98,17 +99,34 @@ def _extract_rows_to_dict(rows: list) -> dict[str, PluginAttributes]:
98
99
  @contextmanager
99
100
  def download_plugin(plugin_package: str) -> Generator:
100
101
  """Download the plugin package from the S3 bucket."""
101
- s3 = boto3.client("s3")
102
+ method = "GET"
103
+ host = f"s3-{settings.AWS_REGION}.amazonaws.com"
104
+ bucket = settings.MEDIA_S3_BUCKET_NAME
105
+ customer_identifier = settings.CUSTOMER_IDENTIFIER
106
+ path = f"/{bucket}/{customer_identifier}/{plugin_package}"
107
+ payload = b"This is required for the AWS headers because it is part of the signature"
108
+ pre_auth_headers: dict[str, str] = {}
109
+ query: dict[str, str] = {}
110
+ headers = aws_sig_v4_headers(
111
+ settings.AWS_ACCESS_KEY_ID,
112
+ settings.AWS_SECRET_ACCESS_KEY,
113
+ pre_auth_headers,
114
+ "s3",
115
+ settings.AWS_REGION,
116
+ host,
117
+ method,
118
+ path,
119
+ query,
120
+ payload,
121
+ )
122
+
102
123
  with tempfile.TemporaryDirectory() as temp_dir:
103
124
  prefix_dir = Path(temp_dir) / UPLOAD_TO_PREFIX
104
125
  prefix_dir.mkdir() # create an intermediate directory reflecting the prefix
105
126
  download_path = Path(temp_dir) / plugin_package
106
127
  with open(download_path, "wb") as download_file:
107
- s3.download_fileobj(
108
- "canvas-client-media",
109
- f"{settings.CUSTOMER_IDENTIFIER}/{plugin_package}",
110
- download_file,
111
- )
128
+ response = requests.request(method=method, url=f"https://{host}{path}", headers=headers)
129
+ download_file.write(response.content)
112
130
  yield download_path
113
131
 
114
132
 
@@ -2,11 +2,10 @@ import json
2
2
  import tarfile
3
3
  import tempfile
4
4
  from pathlib import Path
5
- from unittest.mock import MagicMock
5
+ from unittest.mock import MagicMock, patch
6
6
 
7
7
  from pytest_mock import MockerFixture
8
8
 
9
- import settings
10
9
  from plugin_runner.plugin_installer import (
11
10
  PluginAttributes,
12
11
  _extract_rows_to_dict,
@@ -106,13 +105,12 @@ def test_plugin_installation_from_tarball(mocker: MockerFixture) -> None:
106
105
 
107
106
  def test_download(mocker: MockerFixture) -> None:
108
107
  """Test that the plugin package can be written to disk, mocking out S3."""
109
- mock_s3_client = MagicMock()
110
- mocker.patch("boto3.client", return_value=mock_s3_client)
111
-
112
- plugin_package = "plugins/plugin1.tar.gz"
113
- with download_plugin(plugin_package) as plugin_path:
114
- assert plugin_path.exists()
115
-
116
- mock_s3_client.download_fileobj.assert_called_once_with(
117
- "canvas-client-media", f"{settings.CUSTOMER_IDENTIFIER}/{plugin_package}", mocker.ANY
118
- )
108
+ mock_response = MagicMock()
109
+ mock_response.status_code = 200
110
+ mock_response.content = b"some content in a file"
111
+ with patch("requests.request", return_value=mock_response) as mock_request:
112
+ plugin_package = "plugins/plugin1.tar.gz"
113
+ with download_plugin(plugin_package) as plugin_path:
114
+ assert plugin_path.exists()
115
+ assert plugin_path.read_bytes() == b"some content in a file"
116
+ mock_request.assert_called_once()
@@ -14,6 +14,11 @@ import os
14
14
  result = os.listdir('.')
15
15
  """
16
16
 
17
+ CODE_WITH_PLUGIN_RUNNER_SETTING_IMPORT = """
18
+ import settings
19
+ result = settings.AWS_SECRET_ACCESS_KEY
20
+ """
21
+
17
22
  CODE_WITH_ALLOWED_IMPORT = """
18
23
  import json
19
24
  result = json.dumps({"key": "value"})
@@ -39,7 +44,14 @@ def test_valid_code_execution() -> None:
39
44
  def test_disallowed_import() -> None:
40
45
  """Test that restricted imports are not allowed."""
41
46
  sandbox = Sandbox(CODE_WITH_RESTRICTED_IMPORT)
42
- with pytest.raises(ImportError, match="os' is not an allowed import."):
47
+ with pytest.raises(ImportError, match="'os' is not an allowed import."):
48
+ sandbox.execute()
49
+
50
+
51
+ def test_plugin_runner_settings_import() -> None:
52
+ """Test that imports of plugin runner settings are not allowed."""
53
+ sandbox = Sandbox(CODE_WITH_PLUGIN_RUNNER_SETTING_IMPORT)
54
+ with pytest.raises(ImportError, match="'settings' is not an allowed import."):
43
55
  sandbox.execute()
44
56
 
45
57
 
@@ -47,11 +47,9 @@ packages = [
47
47
  {include = "settings.py"}
48
48
  ]
49
49
  readme = "README.md"
50
- version = "0.13.3"
50
+ version = "0.14.0"
51
51
 
52
52
  [tool.poetry.dependencies]
53
- boto3 = "^1.35.88"
54
- boto3-stubs = {extras = ["s3"], version = "^1.35.88"}
55
53
  cookiecutter = "*"
56
54
  cron-converter = "^1.2.1"
57
55
  deprecation = "^2.1.0"
@@ -49,6 +49,10 @@ else:
49
49
 
50
50
  DATABASES = {"default": database_dict}
51
51
 
52
+ AWS_ACCESS_KEY_ID = os.getenv("AWS_ACCESS_KEY_ID", "")
53
+ AWS_SECRET_ACCESS_KEY = os.getenv("AWS_SECRET_ACCESS_KEY", "")
54
+ AWS_REGION = os.getenv("AWS_REGION", "us-west-2")
55
+ MEDIA_S3_BUCKET_NAME = os.getenv("MEDIA_S3_BUCKET_NAME", "canvas-client-media")
52
56
 
53
57
  PLUGIN_RUNNER_SIGNING_KEY = os.getenv("PLUGIN_RUNNER_SIGNING_KEY", "")
54
58
 
File without changes
File without changes
File without changes
File without changes
File without changes