canvas 0.34.0__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.34.0 → canvas-0.34.1}/PKG-INFO +1 -1
  2. {canvas-0.34.0 → canvas-0.34.1}/plugin_runner/sandbox.py +99 -8
  3. {canvas-0.34.0 → canvas-0.34.1}/pyproject.toml +1 -1
  4. {canvas-0.34.0 → canvas-0.34.1}/.gitignore +0 -0
  5. {canvas-0.34.0 → canvas-0.34.1}/README.md +0 -0
  6. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/__init__.py +0 -0
  7. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/__init__.py +0 -0
  8. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/auth/__init__.py +0 -0
  9. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/auth/utils.py +0 -0
  10. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/__init__.py +0 -0
  11. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/emit.py +0 -0
  12. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/ALLERGY_INTOLERANCE_CREATED.ndjson +0 -0
  13. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/ALLERGY_INTOLERANCE_UPDATED.ndjson +0 -0
  14. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CANCELED.ndjson +0 -0
  15. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CHECKED_IN.ndjson +0 -0
  16. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CREATED.ndjson +0 -0
  17. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_NO_SHOWED.ndjson +0 -0
  18. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_RESCHEDULED.ndjson +0 -0
  19. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_RESTORED.ndjson +0 -0
  20. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_UPDATED.ndjson +0 -0
  21. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__CONDITION_SELECTED.ndjson +0 -0
  22. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__POST_COMMIT.ndjson +0 -0
  23. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__POST_ORIGINATE.ndjson +0 -0
  24. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__POST_UPDATE.ndjson +0 -0
  25. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__PRE_COMMIT.ndjson +0 -0
  26. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__PRE_ORIGINATE.ndjson +0 -0
  27. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__PRE_UPDATE.ndjson +0 -0
  28. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/BILLING_LINE_ITEM_CREATED.ndjson +0 -0
  29. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/BILLING_LINE_ITEM_UPDATED.ndjson +0 -0
  30. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/CONDITION_ASSESSED.ndjson +0 -0
  31. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/CONDITION_CREATED.ndjson +0 -0
  32. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/CONDITION_UPDATED.ndjson +0 -0
  33. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/CRON.ndjson +0 -0
  34. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/ENCOUNTER_CREATED.ndjson +0 -0
  35. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/ENCOUNTER_UPDATED.ndjson +0 -0
  36. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_CREATED.ndjson +0 -0
  37. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_STATEMENT_CREATED.ndjson +0 -0
  38. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_STATEMENT_UPDATED.ndjson +0 -0
  39. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_UPDATED.ndjson +0 -0
  40. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/INTERVIEW_CREATED.ndjson +0 -0
  41. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/INTERVIEW_UPDATED.ndjson +0 -0
  42. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/LAB_ORDER_CREATED.ndjson +0 -0
  43. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/LAB_ORDER_UPDATED.ndjson +0 -0
  44. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_LIST_ITEM_CREATED.ndjson +0 -0
  45. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_LIST_ITEM_UPDATED.ndjson +0 -0
  46. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__POST_COMMIT.ndjson +0 -0
  47. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__POST_ORIGINATE.ndjson +0 -0
  48. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__POST_UPDATE.ndjson +0 -0
  49. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__PRE_COMMIT.ndjson +0 -0
  50. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__PRE_ORIGINATE.ndjson +0 -0
  51. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__PRE_UPDATE.ndjson +0 -0
  52. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT__MEDICATION__POST_SEARCH.ndjson +0 -0
  53. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/PATIENT_CREATED.ndjson +0 -0
  54. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/PATIENT_UPDATED.ndjson +0 -0
  55. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/PLAN_COMMAND__POST_ORIGINATE.ndjson +0 -0
  56. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/PLAN_COMMAND__PRE_ORIGINATE.ndjson +0 -0
  57. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__POST_COMMIT.ndjson +0 -0
  58. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__POST_ORIGINATE.ndjson +0 -0
  59. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__POST_UPDATE.ndjson +0 -0
  60. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__PRE_COMMIT.ndjson +0 -0
  61. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__PRE_ORIGINATE.ndjson +0 -0
  62. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__PRE_UPDATE.ndjson +0 -0
  63. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE__QUESTIONNAIRE__POST_SEARCH.ndjson +0 -0
  64. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/SIMPLE_API_REQUEST.ndjson +0 -0
  65. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/TASK_COMMENT_CREATED.ndjson +0 -0
  66. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/TASK_CREATED.ndjson +0 -0
  67. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/TASK_UPDATED.ndjson +0 -0
  68. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/VITAL_SIGN_CREATED.ndjson +0 -0
  69. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/emit/event_fixtures/VITAL_SIGN_UPDATED.ndjson +0 -0
  70. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/logs/__init__.py +0 -0
  71. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/logs/logs.py +0 -0
  72. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/plugin/__init__.py +0 -0
  73. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/plugin/plugin.py +0 -0
  74. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/run_plugins/__init__.py +0 -0
  75. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/apps/run_plugins/run_plugins.py +0 -0
  76. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/main.py +0 -0
  77. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/templates/plugins/application/cookiecutter.json +0 -0
  78. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/CANVAS_MANIFEST.json +0 -0
  79. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/README.md +0 -0
  80. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/applications/__init__.py +0 -0
  81. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/applications/my_application.py +0 -0
  82. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/assets/python-logo.png +0 -0
  83. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/templates/plugins/default/cookiecutter.json +0 -0
  84. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/CANVAS_MANIFEST.json +0 -0
  85. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/README.md +0 -0
  86. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/protocols/__init__.py +0 -0
  87. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/protocols/my_protocol.py +0 -0
  88. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/utils/__init__.py +0 -0
  89. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/utils/context/__init__.py +0 -0
  90. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/utils/context/context.py +0 -0
  91. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/utils/print/__init__.py +0 -0
  92. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/utils/print/print.py +0 -0
  93. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/utils/urls/__init__.py +0 -0
  94. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/utils/urls/urls.py +0 -0
  95. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/utils/validators/__init__.py +0 -0
  96. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/utils/validators/manifest_schema.py +0 -0
  97. {canvas-0.34.0 → canvas-0.34.1}/canvas_cli/utils/validators/validators.py +0 -0
  98. {canvas-0.34.0 → canvas-0.34.1}/canvas_generated/messages/effects_pb2.py +0 -0
  99. {canvas-0.34.0 → canvas-0.34.1}/canvas_generated/messages/effects_pb2.pyi +0 -0
  100. {canvas-0.34.0 → canvas-0.34.1}/canvas_generated/messages/effects_pb2_grpc.py +0 -0
  101. {canvas-0.34.0 → canvas-0.34.1}/canvas_generated/messages/events_pb2.py +0 -0
  102. {canvas-0.34.0 → canvas-0.34.1}/canvas_generated/messages/events_pb2.pyi +0 -0
  103. {canvas-0.34.0 → canvas-0.34.1}/canvas_generated/messages/events_pb2_grpc.py +0 -0
  104. {canvas-0.34.0 → canvas-0.34.1}/canvas_generated/messages/plugins_pb2.py +0 -0
  105. {canvas-0.34.0 → canvas-0.34.1}/canvas_generated/messages/plugins_pb2.pyi +0 -0
  106. {canvas-0.34.0 → canvas-0.34.1}/canvas_generated/messages/plugins_pb2_grpc.py +0 -0
  107. {canvas-0.34.0 → canvas-0.34.1}/canvas_generated/services/plugin_runner_pb2.py +0 -0
  108. {canvas-0.34.0 → canvas-0.34.1}/canvas_generated/services/plugin_runner_pb2.pyi +0 -0
  109. {canvas-0.34.0 → canvas-0.34.1}/canvas_generated/services/plugin_runner_pb2_grpc.py +0 -0
  110. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/__init__.py +0 -0
  111. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/base.py +0 -0
  112. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/__init__.py +0 -0
  113. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/base.py +0 -0
  114. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/__init__.py +0 -0
  115. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/adjust_prescription.py +0 -0
  116. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/allergy.py +0 -0
  117. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/assess.py +0 -0
  118. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/close_goal.py +0 -0
  119. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/diagnose.py +0 -0
  120. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/exam.py +0 -0
  121. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/family_history.py +0 -0
  122. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/follow_up.py +0 -0
  123. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/goal.py +0 -0
  124. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/history_present_illness.py +0 -0
  125. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/imaging_order.py +0 -0
  126. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/instruct.py +0 -0
  127. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/lab_order.py +0 -0
  128. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/medical_history.py +0 -0
  129. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/medication_statement.py +0 -0
  130. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/past_surgical_history.py +0 -0
  131. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/perform.py +0 -0
  132. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/plan.py +0 -0
  133. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/prescribe.py +0 -0
  134. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/questionnaire/__init__.py +0 -0
  135. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/questionnaire/question.py +0 -0
  136. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/reason_for_visit.py +0 -0
  137. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/refer.py +0 -0
  138. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/refill.py +0 -0
  139. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/remove_allergy.py +0 -0
  140. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/resolve_condition.py +0 -0
  141. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/review_of_systems.py +0 -0
  142. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/stop_medication.py +0 -0
  143. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/structured_assessment.py +0 -0
  144. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/task.py +0 -0
  145. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/update_diagnosis.py +0 -0
  146. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/update_goal.py +0 -0
  147. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/commands/vitals.py +0 -0
  148. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/commands/constants.py +0 -0
  149. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/__init__.py +0 -0
  150. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/banner_alert/__init__.py +0 -0
  151. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/banner_alert/add_banner_alert.py +0 -0
  152. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/banner_alert/remove_banner_alert.py +0 -0
  153. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/base.py +0 -0
  154. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/billing_line_item/__init__.py +0 -0
  155. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/billing_line_item/add_billing_line_item.py +0 -0
  156. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/billing_line_item/remove_billing_line_item.py +0 -0
  157. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/billing_line_item/update_billing_line_item.py +0 -0
  158. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/launch_modal.py +0 -0
  159. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/patient_chart_summary_configuration.py +0 -0
  160. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/patient_portal/__init__.py +0 -0
  161. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/patient_portal/application_configuration.py +0 -0
  162. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/patient_portal/form_result.py +0 -0
  163. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/patient_portal_menu_configuration.py +0 -0
  164. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/patient_profile_configuration.py +0 -0
  165. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/protocol_card/__init__.py +0 -0
  166. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/protocol_card/protocol_card.py +0 -0
  167. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/questionnaire_result.py +0 -0
  168. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/send_invite.py +0 -0
  169. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/show_button.py +0 -0
  170. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/simple_api.py +0 -0
  171. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/surescripts/__init__.py +0 -0
  172. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/surescripts/surescripts_messages.py +0 -0
  173. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/task/__init__.py +0 -0
  174. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/task/task.py +0 -0
  175. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/update_user.py +0 -0
  176. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/widgets/__init__.py +0 -0
  177. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/effects/widgets/portal_widget.py +0 -0
  178. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/events/__init__.py +0 -0
  179. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/events/base.py +0 -0
  180. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/handlers/__init__.py +0 -0
  181. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/handlers/action_button.py +0 -0
  182. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/handlers/application.py +0 -0
  183. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/handlers/base.py +0 -0
  184. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/handlers/cron_task.py +0 -0
  185. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/handlers/simple_api/__init__.py +0 -0
  186. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/handlers/simple_api/api.py +0 -0
  187. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/handlers/simple_api/exceptions.py +0 -0
  188. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/handlers/simple_api/security.py +0 -0
  189. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/handlers/simple_api/tools.py +0 -0
  190. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/protocols/__init__.py +0 -0
  191. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/protocols/base.py +0 -0
  192. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/protocols/clinical_quality_measure.py +0 -0
  193. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/protocols/timeframe.py +0 -0
  194. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/questionnaires/__init__.py +0 -0
  195. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/questionnaires/utils.py +0 -0
  196. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/templates/__init__.py +0 -0
  197. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/templates/utils.py +0 -0
  198. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/utils/__init__.py +0 -0
  199. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/utils/http.py +0 -0
  200. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/utils/plugins.py +0 -0
  201. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/utils/stats.py +0 -0
  202. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/__init__.py +0 -0
  203. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/apps.py +0 -0
  204. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/__init__.py +0 -0
  205. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/allergy_intolerance.py +0 -0
  206. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/appointment.py +0 -0
  207. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/assessment.py +0 -0
  208. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/banner_alert.py +0 -0
  209. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/base.py +0 -0
  210. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/billing.py +0 -0
  211. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/care_team.py +0 -0
  212. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/command.py +0 -0
  213. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/common.py +0 -0
  214. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/condition.py +0 -0
  215. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/coverage.py +0 -0
  216. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/detected_issue.py +0 -0
  217. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/device.py +0 -0
  218. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/imaging.py +0 -0
  219. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/lab.py +0 -0
  220. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/medication.py +0 -0
  221. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/note.py +0 -0
  222. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/observation.py +0 -0
  223. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/organization.py +0 -0
  224. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/patient.py +0 -0
  225. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/practicelocation.py +0 -0
  226. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/protocol_override.py +0 -0
  227. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/questionnaire.py +0 -0
  228. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/reason_for_visit.py +0 -0
  229. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/staff.py +0 -0
  230. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/task.py +0 -0
  231. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/team.py +0 -0
  232. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/data/user.py +0 -0
  233. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/v1/models.py +0 -0
  234. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/value_set/__init__.py +0 -0
  235. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/value_set/_utilities.py +0 -0
  236. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/value_set/custom.py +0 -0
  237. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/value_set/hcc2018.py +0 -0
  238. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/value_set/v2022/__init__.py +0 -0
  239. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/value_set/v2022/adverse_event.py +0 -0
  240. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/value_set/v2022/allergy.py +0 -0
  241. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/value_set/v2022/assessment.py +0 -0
  242. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/value_set/v2022/communication.py +0 -0
  243. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/value_set/v2022/condition.py +0 -0
  244. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/value_set/v2022/device.py +0 -0
  245. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/value_set/v2022/diagnostic_study.py +0 -0
  246. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/value_set/v2022/encounter.py +0 -0
  247. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/value_set/v2022/immunization.py +0 -0
  248. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/value_set/v2022/individual_characteristic.py +0 -0
  249. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/value_set/v2022/intervention.py +0 -0
  250. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/value_set/v2022/laboratory_test.py +0 -0
  251. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/value_set/v2022/medication.py +0 -0
  252. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/value_set/v2022/physical_exam.py +0 -0
  253. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/value_set/v2022/procedure.py +0 -0
  254. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/value_set/v2022/symptom.py +0 -0
  255. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/value_set/value_set.py +0 -0
  256. {canvas-0.34.0 → canvas-0.34.1}/canvas_sdk/views/__init__.py +0 -0
  257. {canvas-0.34.0 → canvas-0.34.1}/logger/__init__.py +0 -0
  258. {canvas-0.34.0 → canvas-0.34.1}/logger/logger.py +0 -0
  259. {canvas-0.34.0 → canvas-0.34.1}/plugin_runner/__init__.py +0 -0
  260. {canvas-0.34.0 → canvas-0.34.1}/plugin_runner/authentication.py +0 -0
  261. {canvas-0.34.0 → canvas-0.34.1}/plugin_runner/aws_headers.py +0 -0
  262. {canvas-0.34.0 → canvas-0.34.1}/plugin_runner/exceptions.py +0 -0
  263. {canvas-0.34.0 → canvas-0.34.1}/plugin_runner/installation.py +0 -0
  264. {canvas-0.34.0 → canvas-0.34.1}/plugin_runner/load_all_plugins.py +0 -0
  265. {canvas-0.34.0 → canvas-0.34.1}/plugin_runner/plugin_runner.py +0 -0
  266. {canvas-0.34.0 → canvas-0.34.1}/protobufs/canvas_generated/messages/effects.proto +0 -0
  267. {canvas-0.34.0 → canvas-0.34.1}/protobufs/canvas_generated/messages/events.proto +0 -0
  268. {canvas-0.34.0 → canvas-0.34.1}/protobufs/canvas_generated/messages/plugins.proto +0 -0
  269. {canvas-0.34.0 → canvas-0.34.1}/protobufs/canvas_generated/services/plugin_runner.proto +0 -0
  270. {canvas-0.34.0 → canvas-0.34.1}/pubsub/__init__.py +0 -0
  271. {canvas-0.34.0 → canvas-0.34.1}/pubsub/pubsub.py +0 -0
  272. {canvas-0.34.0 → 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.34.0
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
@@ -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.34.0"
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