canvas 0.33.1__tar.gz → 0.34.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 (272) hide show
  1. {canvas-0.33.1 → canvas-0.34.1}/PKG-INFO +1 -1
  2. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/utils/http.py +27 -2
  3. {canvas-0.33.1 → canvas-0.34.1}/plugin_runner/sandbox.py +99 -8
  4. {canvas-0.33.1 → canvas-0.34.1}/pyproject.toml +1 -1
  5. {canvas-0.33.1 → canvas-0.34.1}/.gitignore +0 -0
  6. {canvas-0.33.1 → canvas-0.34.1}/README.md +0 -0
  7. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/__init__.py +0 -0
  8. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/__init__.py +0 -0
  9. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/auth/__init__.py +0 -0
  10. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/auth/utils.py +0 -0
  11. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/__init__.py +0 -0
  12. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/emit.py +0 -0
  13. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/ALLERGY_INTOLERANCE_CREATED.ndjson +0 -0
  14. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/ALLERGY_INTOLERANCE_UPDATED.ndjson +0 -0
  15. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CANCELED.ndjson +0 -0
  16. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CHECKED_IN.ndjson +0 -0
  17. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CREATED.ndjson +0 -0
  18. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_NO_SHOWED.ndjson +0 -0
  19. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_RESCHEDULED.ndjson +0 -0
  20. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_RESTORED.ndjson +0 -0
  21. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_UPDATED.ndjson +0 -0
  22. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__CONDITION_SELECTED.ndjson +0 -0
  23. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__POST_COMMIT.ndjson +0 -0
  24. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__POST_ORIGINATE.ndjson +0 -0
  25. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__POST_UPDATE.ndjson +0 -0
  26. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__PRE_COMMIT.ndjson +0 -0
  27. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__PRE_ORIGINATE.ndjson +0 -0
  28. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__PRE_UPDATE.ndjson +0 -0
  29. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/BILLING_LINE_ITEM_CREATED.ndjson +0 -0
  30. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/BILLING_LINE_ITEM_UPDATED.ndjson +0 -0
  31. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/CONDITION_ASSESSED.ndjson +0 -0
  32. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/CONDITION_CREATED.ndjson +0 -0
  33. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/CONDITION_UPDATED.ndjson +0 -0
  34. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/CRON.ndjson +0 -0
  35. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/ENCOUNTER_CREATED.ndjson +0 -0
  36. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/ENCOUNTER_UPDATED.ndjson +0 -0
  37. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_CREATED.ndjson +0 -0
  38. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_STATEMENT_CREATED.ndjson +0 -0
  39. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_STATEMENT_UPDATED.ndjson +0 -0
  40. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_UPDATED.ndjson +0 -0
  41. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/INTERVIEW_CREATED.ndjson +0 -0
  42. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/INTERVIEW_UPDATED.ndjson +0 -0
  43. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/LAB_ORDER_CREATED.ndjson +0 -0
  44. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/LAB_ORDER_UPDATED.ndjson +0 -0
  45. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_LIST_ITEM_CREATED.ndjson +0 -0
  46. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_LIST_ITEM_UPDATED.ndjson +0 -0
  47. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__POST_COMMIT.ndjson +0 -0
  48. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__POST_ORIGINATE.ndjson +0 -0
  49. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__POST_UPDATE.ndjson +0 -0
  50. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__PRE_COMMIT.ndjson +0 -0
  51. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__PRE_ORIGINATE.ndjson +0 -0
  52. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__PRE_UPDATE.ndjson +0 -0
  53. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT__MEDICATION__POST_SEARCH.ndjson +0 -0
  54. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/PATIENT_CREATED.ndjson +0 -0
  55. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/PATIENT_UPDATED.ndjson +0 -0
  56. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/PLAN_COMMAND__POST_ORIGINATE.ndjson +0 -0
  57. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/PLAN_COMMAND__PRE_ORIGINATE.ndjson +0 -0
  58. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__POST_COMMIT.ndjson +0 -0
  59. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__POST_ORIGINATE.ndjson +0 -0
  60. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__POST_UPDATE.ndjson +0 -0
  61. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__PRE_COMMIT.ndjson +0 -0
  62. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__PRE_ORIGINATE.ndjson +0 -0
  63. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__PRE_UPDATE.ndjson +0 -0
  64. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE__QUESTIONNAIRE__POST_SEARCH.ndjson +0 -0
  65. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/SIMPLE_API_REQUEST.ndjson +0 -0
  66. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/TASK_COMMENT_CREATED.ndjson +0 -0
  67. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/TASK_CREATED.ndjson +0 -0
  68. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/TASK_UPDATED.ndjson +0 -0
  69. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/VITAL_SIGN_CREATED.ndjson +0 -0
  70. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/VITAL_SIGN_UPDATED.ndjson +0 -0
  71. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/logs/__init__.py +0 -0
  72. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/logs/logs.py +0 -0
  73. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/plugin/__init__.py +0 -0
  74. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/plugin/plugin.py +0 -0
  75. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/run_plugins/__init__.py +0 -0
  76. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/apps/run_plugins/run_plugins.py +0 -0
  77. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/main.py +0 -0
  78. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/templates/plugins/application/cookiecutter.json +0 -0
  79. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/CANVAS_MANIFEST.json +0 -0
  80. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/README.md +0 -0
  81. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/applications/__init__.py +0 -0
  82. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/applications/my_application.py +0 -0
  83. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/assets/python-logo.png +0 -0
  84. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/templates/plugins/default/cookiecutter.json +0 -0
  85. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/CANVAS_MANIFEST.json +0 -0
  86. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/README.md +0 -0
  87. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/protocols/__init__.py +0 -0
  88. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/protocols/my_protocol.py +0 -0
  89. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/utils/__init__.py +0 -0
  90. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/utils/context/__init__.py +0 -0
  91. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/utils/context/context.py +0 -0
  92. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/utils/print/__init__.py +0 -0
  93. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/utils/print/print.py +0 -0
  94. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/utils/urls/__init__.py +0 -0
  95. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/utils/urls/urls.py +0 -0
  96. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/utils/validators/__init__.py +0 -0
  97. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/utils/validators/manifest_schema.py +0 -0
  98. {canvas-0.33.1 → canvas-0.34.1}/canvas_cli/utils/validators/validators.py +0 -0
  99. {canvas-0.33.1 → canvas-0.34.1}/canvas_generated/messages/effects_pb2.py +0 -0
  100. {canvas-0.33.1 → canvas-0.34.1}/canvas_generated/messages/effects_pb2.pyi +0 -0
  101. {canvas-0.33.1 → canvas-0.34.1}/canvas_generated/messages/effects_pb2_grpc.py +0 -0
  102. {canvas-0.33.1 → canvas-0.34.1}/canvas_generated/messages/events_pb2.py +0 -0
  103. {canvas-0.33.1 → canvas-0.34.1}/canvas_generated/messages/events_pb2.pyi +0 -0
  104. {canvas-0.33.1 → canvas-0.34.1}/canvas_generated/messages/events_pb2_grpc.py +0 -0
  105. {canvas-0.33.1 → canvas-0.34.1}/canvas_generated/messages/plugins_pb2.py +0 -0
  106. {canvas-0.33.1 → canvas-0.34.1}/canvas_generated/messages/plugins_pb2.pyi +0 -0
  107. {canvas-0.33.1 → canvas-0.34.1}/canvas_generated/messages/plugins_pb2_grpc.py +0 -0
  108. {canvas-0.33.1 → canvas-0.34.1}/canvas_generated/services/plugin_runner_pb2.py +0 -0
  109. {canvas-0.33.1 → canvas-0.34.1}/canvas_generated/services/plugin_runner_pb2.pyi +0 -0
  110. {canvas-0.33.1 → canvas-0.34.1}/canvas_generated/services/plugin_runner_pb2_grpc.py +0 -0
  111. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/__init__.py +0 -0
  112. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/base.py +0 -0
  113. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/__init__.py +0 -0
  114. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/base.py +0 -0
  115. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/__init__.py +0 -0
  116. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/adjust_prescription.py +0 -0
  117. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/allergy.py +0 -0
  118. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/assess.py +0 -0
  119. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/close_goal.py +0 -0
  120. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/diagnose.py +0 -0
  121. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/exam.py +0 -0
  122. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/family_history.py +0 -0
  123. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/follow_up.py +0 -0
  124. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/goal.py +0 -0
  125. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/history_present_illness.py +0 -0
  126. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/imaging_order.py +0 -0
  127. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/instruct.py +0 -0
  128. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/lab_order.py +0 -0
  129. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/medical_history.py +0 -0
  130. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/medication_statement.py +0 -0
  131. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/past_surgical_history.py +0 -0
  132. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/perform.py +0 -0
  133. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/plan.py +0 -0
  134. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/prescribe.py +0 -0
  135. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/questionnaire/__init__.py +0 -0
  136. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/questionnaire/question.py +0 -0
  137. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/reason_for_visit.py +0 -0
  138. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/refer.py +0 -0
  139. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/refill.py +0 -0
  140. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/remove_allergy.py +0 -0
  141. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/resolve_condition.py +0 -0
  142. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/review_of_systems.py +0 -0
  143. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/stop_medication.py +0 -0
  144. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/structured_assessment.py +0 -0
  145. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/task.py +0 -0
  146. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/update_diagnosis.py +0 -0
  147. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/update_goal.py +0 -0
  148. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/commands/vitals.py +0 -0
  149. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/commands/constants.py +0 -0
  150. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/__init__.py +0 -0
  151. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/banner_alert/__init__.py +0 -0
  152. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/banner_alert/add_banner_alert.py +0 -0
  153. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/banner_alert/remove_banner_alert.py +0 -0
  154. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/base.py +0 -0
  155. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/billing_line_item/__init__.py +0 -0
  156. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/billing_line_item/add_billing_line_item.py +0 -0
  157. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/billing_line_item/remove_billing_line_item.py +0 -0
  158. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/billing_line_item/update_billing_line_item.py +0 -0
  159. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/launch_modal.py +0 -0
  160. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/patient_chart_summary_configuration.py +0 -0
  161. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/patient_portal/__init__.py +0 -0
  162. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/patient_portal/application_configuration.py +0 -0
  163. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/patient_portal/form_result.py +0 -0
  164. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/patient_portal_menu_configuration.py +0 -0
  165. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/patient_profile_configuration.py +0 -0
  166. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/protocol_card/__init__.py +0 -0
  167. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/protocol_card/protocol_card.py +0 -0
  168. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/questionnaire_result.py +0 -0
  169. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/send_invite.py +0 -0
  170. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/show_button.py +0 -0
  171. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/simple_api.py +0 -0
  172. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/surescripts/__init__.py +0 -0
  173. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/surescripts/surescripts_messages.py +0 -0
  174. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/task/__init__.py +0 -0
  175. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/task/task.py +0 -0
  176. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/update_user.py +0 -0
  177. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/widgets/__init__.py +0 -0
  178. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/effects/widgets/portal_widget.py +0 -0
  179. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/events/__init__.py +0 -0
  180. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/events/base.py +0 -0
  181. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/handlers/__init__.py +0 -0
  182. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/handlers/action_button.py +0 -0
  183. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/handlers/application.py +0 -0
  184. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/handlers/base.py +0 -0
  185. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/handlers/cron_task.py +0 -0
  186. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/handlers/simple_api/__init__.py +0 -0
  187. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/handlers/simple_api/api.py +0 -0
  188. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/handlers/simple_api/exceptions.py +0 -0
  189. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/handlers/simple_api/security.py +0 -0
  190. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/handlers/simple_api/tools.py +0 -0
  191. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/protocols/__init__.py +0 -0
  192. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/protocols/base.py +0 -0
  193. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/protocols/clinical_quality_measure.py +0 -0
  194. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/protocols/timeframe.py +0 -0
  195. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/questionnaires/__init__.py +0 -0
  196. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/questionnaires/utils.py +0 -0
  197. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/templates/__init__.py +0 -0
  198. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/templates/utils.py +0 -0
  199. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/utils/__init__.py +0 -0
  200. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/utils/plugins.py +0 -0
  201. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/utils/stats.py +0 -0
  202. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/__init__.py +0 -0
  203. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/apps.py +0 -0
  204. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/__init__.py +0 -0
  205. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/allergy_intolerance.py +0 -0
  206. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/appointment.py +0 -0
  207. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/assessment.py +0 -0
  208. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/banner_alert.py +0 -0
  209. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/base.py +0 -0
  210. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/billing.py +0 -0
  211. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/care_team.py +0 -0
  212. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/command.py +0 -0
  213. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/common.py +0 -0
  214. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/condition.py +0 -0
  215. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/coverage.py +0 -0
  216. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/detected_issue.py +0 -0
  217. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/device.py +0 -0
  218. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/imaging.py +0 -0
  219. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/lab.py +0 -0
  220. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/medication.py +0 -0
  221. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/note.py +0 -0
  222. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/observation.py +0 -0
  223. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/organization.py +0 -0
  224. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/patient.py +0 -0
  225. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/practicelocation.py +0 -0
  226. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/protocol_override.py +0 -0
  227. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/questionnaire.py +0 -0
  228. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/reason_for_visit.py +0 -0
  229. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/staff.py +0 -0
  230. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/task.py +0 -0
  231. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/team.py +0 -0
  232. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/data/user.py +0 -0
  233. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/v1/models.py +0 -0
  234. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/value_set/__init__.py +0 -0
  235. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/value_set/_utilities.py +0 -0
  236. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/value_set/custom.py +0 -0
  237. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/value_set/hcc2018.py +0 -0
  238. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/value_set/v2022/__init__.py +0 -0
  239. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/value_set/v2022/adverse_event.py +0 -0
  240. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/value_set/v2022/allergy.py +0 -0
  241. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/value_set/v2022/assessment.py +0 -0
  242. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/value_set/v2022/communication.py +0 -0
  243. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/value_set/v2022/condition.py +0 -0
  244. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/value_set/v2022/device.py +0 -0
  245. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/value_set/v2022/diagnostic_study.py +0 -0
  246. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/value_set/v2022/encounter.py +0 -0
  247. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/value_set/v2022/immunization.py +0 -0
  248. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/value_set/v2022/individual_characteristic.py +0 -0
  249. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/value_set/v2022/intervention.py +0 -0
  250. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/value_set/v2022/laboratory_test.py +0 -0
  251. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/value_set/v2022/medication.py +0 -0
  252. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/value_set/v2022/physical_exam.py +0 -0
  253. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/value_set/v2022/procedure.py +0 -0
  254. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/value_set/v2022/symptom.py +0 -0
  255. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/value_set/value_set.py +0 -0
  256. {canvas-0.33.1 → canvas-0.34.1}/canvas_sdk/views/__init__.py +0 -0
  257. {canvas-0.33.1 → canvas-0.34.1}/logger/__init__.py +0 -0
  258. {canvas-0.33.1 → canvas-0.34.1}/logger/logger.py +0 -0
  259. {canvas-0.33.1 → canvas-0.34.1}/plugin_runner/__init__.py +0 -0
  260. {canvas-0.33.1 → canvas-0.34.1}/plugin_runner/authentication.py +0 -0
  261. {canvas-0.33.1 → canvas-0.34.1}/plugin_runner/aws_headers.py +0 -0
  262. {canvas-0.33.1 → canvas-0.34.1}/plugin_runner/exceptions.py +0 -0
  263. {canvas-0.33.1 → canvas-0.34.1}/plugin_runner/installation.py +0 -0
  264. {canvas-0.33.1 → canvas-0.34.1}/plugin_runner/load_all_plugins.py +0 -0
  265. {canvas-0.33.1 → canvas-0.34.1}/plugin_runner/plugin_runner.py +0 -0
  266. {canvas-0.33.1 → canvas-0.34.1}/protobufs/canvas_generated/messages/effects.proto +0 -0
  267. {canvas-0.33.1 → canvas-0.34.1}/protobufs/canvas_generated/messages/events.proto +0 -0
  268. {canvas-0.33.1 → canvas-0.34.1}/protobufs/canvas_generated/messages/plugins.proto +0 -0
  269. {canvas-0.33.1 → canvas-0.34.1}/protobufs/canvas_generated/services/plugin_runner.proto +0 -0
  270. {canvas-0.33.1 → canvas-0.34.1}/pubsub/__init__.py +0 -0
  271. {canvas-0.33.1 → canvas-0.34.1}/pubsub/pubsub.py +0 -0
  272. {canvas-0.33.1 → canvas-0.34.1}/settings.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: canvas
3
- Version: 0.33.1
3
+ Version: 0.34.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
@@ -226,6 +226,31 @@ class Http:
226
226
  return [future.result() for future in futures]
227
227
 
228
228
 
229
+ class JsonOnlyResponse:
230
+ """
231
+ A very simple Response analog that only allows access to the json() method
232
+ and the status_code.
233
+
234
+ If we returned the response directly the user could look at the request
235
+ headers on the response object and see any authentication headers we sent
236
+ on their behalf.
237
+ """
238
+
239
+ _json: dict[str, Any] | None
240
+ status_code: int
241
+
242
+ def __init__(self, response: requests.Response):
243
+ self.status_code = response.status_code
244
+
245
+ try:
246
+ self._json = response.json()
247
+ except Exception:
248
+ self._json = None
249
+
250
+ def json(self) -> dict[str, Any] | None:
251
+ return self._json
252
+
253
+
229
254
  class JsonOnlyHttp(Http):
230
255
  def get(
231
256
  self,
@@ -238,8 +263,8 @@ class JsonOnlyHttp(Http):
238
263
  self,
239
264
  url: str,
240
265
  headers: Mapping[str, str | bytes | None] | None = None,
241
- ) -> dict[str, Any]:
242
- return super().get(url, headers).json()
266
+ ) -> JsonOnlyResponse:
267
+ return JsonOnlyResponse(super().get(url, headers))
243
268
 
244
269
  def post(
245
270
  self,
@@ -206,6 +206,9 @@ STANDARD_LIBRARY_MODULES = {
206
206
  "Type",
207
207
  "TypedDict",
208
208
  },
209
+ "urllib": {
210
+ "parse",
211
+ },
209
212
  "urllib.parse": {
210
213
  "urlencode",
211
214
  "quote",
@@ -309,6 +312,22 @@ def _find_folder_in_path(file_path: Path, target_folder_name: str) -> Path | Non
309
312
  return _find_folder_in_path(file_path.parent, target_folder_name)
310
313
 
311
314
 
315
+ def node_name(node: ast.AST) -> str:
316
+ """
317
+ Given an AST node, return its name.
318
+ """
319
+ if isinstance(node, ast.Call):
320
+ return ".".join(node_name(arg) for arg in node.args)
321
+
322
+ if isinstance(node, ast.Constant):
323
+ return str(node.value)
324
+
325
+ if isinstance(node, ast.Name):
326
+ return str(node.id)
327
+
328
+ return "__unknown__"
329
+
330
+
312
331
  class Sandbox:
313
332
  """A restricted sandbox for safely executing arbitrary Python code."""
314
333
 
@@ -483,7 +502,7 @@ class Sandbox:
483
502
  func=ast.Name("_write_", ast.Load()),
484
503
  args=[
485
504
  node.value,
486
- ast.Constant(node.value.id if isinstance(node.value, ast.Name) else None),
505
+ ast.Constant(node_name(node.value)),
487
506
  ast.Constant(node.attr),
488
507
  ],
489
508
  keywords=[],
@@ -497,6 +516,55 @@ class Sandbox:
497
516
  # Impossible Case only ctx Load, Store and Del are defined in ast.
498
517
  raise NotImplementedError(f"Unknown ctx type: {type(node.ctx)}")
499
518
 
519
+ def visit_Subscript(self, node: ast.Subscript) -> ast.AST:
520
+ """Transforms all kinds of subscripts.
521
+
522
+ 'foo[bar]' becomes '_getitem_(foo, bar)'
523
+ 'foo[:ab]' becomes '_getitem_(foo, slice(None, ab, None))'
524
+ 'foo[ab:]' becomes '_getitem_(foo, slice(ab, None, None))'
525
+ 'foo[a:b]' becomes '_getitem_(foo, slice(a, b, None))'
526
+ 'foo[a:b:c]' becomes '_getitem_(foo, slice(a, b, c))'
527
+ 'foo[a, b:c] becomes '_getitem_(foo, (a, slice(b, c, None)))'
528
+ 'foo[a] = c' becomes '_write_(foo)[a] = c'
529
+ 'del foo[a]' becomes 'del _write_(foo)[a]'
530
+
531
+ The _write_ function should return a security proxy.
532
+ """
533
+ node = self.node_contents_visit(node)
534
+
535
+ # 'AugStore' and 'AugLoad' are defined in 'Python.asdl' as possible
536
+ # 'expr_context'. However, according to Python/ast.c
537
+ # they are NOT used by the implementation => No need to worry here.
538
+ # Instead ast.c creates 'AugAssign' nodes, which can be visited.
539
+ if isinstance(node.ctx, ast.Load):
540
+ new_node = ast.Call(
541
+ func=ast.Name("_getitem_", ast.Load()),
542
+ args=[node.value, self.transform_slice(node.slice)],
543
+ keywords=[],
544
+ )
545
+
546
+ copy_locations(new_node, node)
547
+
548
+ return new_node
549
+ elif isinstance(node.ctx, ast.Del | ast.Store):
550
+ new_value = ast.Call(
551
+ func=ast.Name("_write_", ast.Load()),
552
+ args=[
553
+ node.value,
554
+ ast.Constant(node_name(node.value)),
555
+ ast.Constant(node_name(node.slice)),
556
+ ],
557
+ keywords=[],
558
+ )
559
+
560
+ copy_locations(new_value, node)
561
+ node.value = new_value
562
+
563
+ return node
564
+ else: # pragma: no cover
565
+ # Impossible Case only ctx Load, Store and Del are defined in ast.
566
+ raise NotImplementedError(f"Unknown ctx type: {type(node.ctx)}")
567
+
500
568
  def __init__(
501
569
  self,
502
570
  source_code: Path,
@@ -655,7 +723,12 @@ class Sandbox:
655
723
  """
656
724
  return bool(self.base_path) and module.split(".")[0] == self.package_name
657
725
 
658
- def _safe_write(self, _ob: Any, name: str | None = None, attribute: str | None = None) -> Any:
726
+ def _safe_write(
727
+ self,
728
+ _ob: Any,
729
+ name: str | None = None,
730
+ attribute: str | int | None = None,
731
+ ) -> Any:
659
732
  """Check if the given obj belongs to a protected resource."""
660
733
  is_module = isinstance(_ob, types.ModuleType)
661
734
 
@@ -664,14 +737,30 @@ class Sandbox:
664
737
  raise AttributeError(f"Forbidden assignment to a module attribute: {_ob.__name__}.")
665
738
  elif isinstance(_ob, type):
666
739
  full_name = f"{_ob.__module__}.{_ob.__qualname__}"
740
+ module_name = _ob.__module__
741
+ else:
742
+ full_name = f"{_ob.__class__.__module__}.{_ob.__class__.__qualname__}"
743
+ module_name = _ob.__class__.__module__
744
+
745
+ if attribute is not None:
746
+ if isinstance(_ob, dict):
747
+ value = dict.get(_ob, attribute)
748
+ elif isinstance(_ob, list | tuple) and isinstance(attribute, int):
749
+ value = _ob.__getitem__(attribute)
750
+ elif isinstance(attribute, str):
751
+ value = getattr(_ob, attribute, None)
752
+ else:
753
+ value = None
667
754
  else:
668
- full_name = f"{_ob.__module__}.{_ob.__class__.__qualname__}"
755
+ value = None
669
756
 
670
- if not self._same_module(_ob.__module__) and (
757
+ if not self._same_module(module_name) and (
671
758
  # deny if it was anything imported
672
- name in self.imported_names["names"]
759
+ (name and name.split(".")[0] in self.imported_names["names"])
673
760
  # deny if it's anything callable
674
- or (attribute is not None and callable(getattr(_ob, attribute)))
761
+ or callable(value)
762
+ # deny writes to dictionary underscore keys
763
+ or (isinstance(_ob, dict) and isinstance(attribute, str) and attribute.startswith("_"))
675
764
  ):
676
765
  raise AttributeError(
677
766
  f"Forbidden assignment to a non-module attribute: {full_name} "
@@ -704,7 +793,7 @@ class Sandbox:
704
793
  is_module = isinstance(_ob, types.ModuleType)
705
794
 
706
795
  if is_module:
707
- module = _ob.__name__.split(".")[0]
796
+ module = _ob.__name__
708
797
  elif isinstance(_ob, type):
709
798
  module = _ob.__module__.split(".")[0]
710
799
  else:
@@ -743,7 +832,9 @@ class Sandbox:
743
832
  if name not in exports:
744
833
  raise AttributeError(f'"{name}" is an invalid attribute name (not in __exports__)')
745
834
  elif is_module and (module not in ALLOWED_MODULES or name not in ALLOWED_MODULES[module]):
746
- raise AttributeError(f'"{name}" is an invalid attribute name (not in ALLOWED_MODULES)')
835
+ raise AttributeError(
836
+ f'"{module}.{name}" is an invalid attribute name (not in ALLOWED_MODULES)'
837
+ )
747
838
 
748
839
  return getattr(_ob, name, default)
749
840
 
@@ -53,7 +53,7 @@ license = "MIT"
53
53
  name = "canvas"
54
54
  readme = "README.md"
55
55
  requires-python = ">=3.11,<3.13"
56
- version = "0.33.1"
56
+ version = "0.34.1"
57
57
 
58
58
  [project.scripts]
59
59
  canvas = "canvas_cli.main:app"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes