canvas 0.53.1__tar.gz → 0.53.2__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.
- {canvas-0.53.1 → canvas-0.53.2}/PKG-INFO +1 -1
- {canvas-0.53.1 → canvas-0.53.2}/canvas_generated/messages/plugins_pb2.py +9 -1
- canvas-0.53.2/canvas_generated/messages/plugins_pb2.pyi +39 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_generated/services/plugin_runner_pb2.py +2 -2
- {canvas-0.53.1 → canvas-0.53.2}/canvas_generated/services/plugin_runner_pb2_grpc.py +66 -0
- {canvas-0.53.1 → canvas-0.53.2}/plugin_runner/exceptions.py +4 -0
- {canvas-0.53.1 → canvas-0.53.2}/plugin_runner/installation.py +39 -13
- {canvas-0.53.1 → canvas-0.53.2}/plugin_runner/plugin_runner.py +112 -18
- canvas-0.53.2/protobufs/canvas_generated/messages/plugins.proto +24 -0
- {canvas-0.53.1 → canvas-0.53.2}/protobufs/canvas_generated/services/plugin_runner.proto +4 -0
- {canvas-0.53.1 → canvas-0.53.2}/pyproject.toml +1 -1
- canvas-0.53.1/canvas_generated/messages/plugins_pb2.pyi +0 -15
- canvas-0.53.1/protobufs/canvas_generated/messages/plugins.proto +0 -9
- {canvas-0.53.1 → canvas-0.53.2}/.gitignore +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/README.md +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/auth/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/auth/storage.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/auth/utils.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/emit.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/ALLERGY_INTOLERANCE_CREATED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/ALLERGY_INTOLERANCE_UPDATED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CANCELED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CHECKED_IN.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CREATED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_NO_SHOWED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_RESCHEDULED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_RESTORED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_UPDATED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__CONDITION_SELECTED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__POST_COMMIT.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__POST_ORIGINATE.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__POST_UPDATE.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__PRE_COMMIT.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__PRE_ORIGINATE.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__PRE_UPDATE.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/BILLING_LINE_ITEM_CREATED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/BILLING_LINE_ITEM_UPDATED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/CONDITION_ASSESSED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/CONDITION_CREATED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/CONDITION_UPDATED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/CRON.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/ENCOUNTER_CREATED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/ENCOUNTER_UPDATED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_CREATED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_STATEMENT_CREATED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_STATEMENT_UPDATED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_UPDATED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/INTERVIEW_CREATED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/INTERVIEW_UPDATED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/LAB_ORDER_CREATED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/LAB_ORDER_UPDATED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/MEDICATION_LIST_ITEM_CREATED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/MEDICATION_LIST_ITEM_UPDATED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__POST_COMMIT.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__POST_ORIGINATE.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__POST_UPDATE.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__PRE_COMMIT.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__PRE_ORIGINATE.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__PRE_UPDATE.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT__MEDICATION__POST_SEARCH.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/PATIENT_CREATED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/PATIENT_UPDATED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/PLAN_COMMAND__POST_ORIGINATE.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/PLAN_COMMAND__PRE_ORIGINATE.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__POST_COMMIT.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__POST_ORIGINATE.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__POST_UPDATE.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__PRE_COMMIT.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__PRE_ORIGINATE.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__PRE_UPDATE.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE__QUESTIONNAIRE__POST_SEARCH.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/SIMPLE_API_REQUEST.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/TASK_COMMENT_CREATED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/TASK_CREATED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/TASK_UPDATED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/VITAL_SIGN_CREATED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/VITAL_SIGN_UPDATED.ndjson +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/logs/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/logs/logs.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/plugin/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/plugin/plugin.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/run_plugins/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/run_plugins/run_plugins.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/main.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/templates/plugins/application/cookiecutter.json +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/CANVAS_MANIFEST.json +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/README.md +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/applications/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/applications/my_application.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/assets/python-logo.png +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/templates/plugins/default/cookiecutter.json +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/CANVAS_MANIFEST.json +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/README.md +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/protocols/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/protocols/my_protocol.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/utils/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/utils/context/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/utils/context/context.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/utils/print/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/utils/print/print.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/utils/urls/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/utils/urls/urls.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/utils/validators/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/utils/validators/manifest_schema.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_cli/utils/validators/validators.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_generated/messages/effects_pb2.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_generated/messages/effects_pb2.pyi +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_generated/messages/effects_pb2_grpc.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_generated/messages/events_pb2.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_generated/messages/events_pb2.pyi +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_generated/messages/events_pb2_grpc.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_generated/messages/plugins_pb2_grpc.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_generated/services/plugin_runner_pb2.pyi +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/base.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/caching/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/caching/base.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/caching/client.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/caching/exceptions.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/caching/plugins.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/caching/utils.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/base.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/adjust_prescription.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/allergy.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/assess.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/change_medication.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/chart_section_review.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/close_goal.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/diagnose.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/exam.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/family_history.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/follow_up.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/goal.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/history_present_illness.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/imaging_order.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/immunization_statement.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/instruct.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/lab_order.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/medical_history.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/medication_statement.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/past_surgical_history.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/perform.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/plan.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/prescribe.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/questionnaire/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/questionnaire/question.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/questionnaire/toggle_questions.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/reason_for_visit.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/refer.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/refill.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/remove_allergy.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/resolve_condition.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/review_of_systems.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/stop_medication.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/structured_assessment.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/task.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/update_diagnosis.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/update_goal.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/commands/vitals.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/commands/constants.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/banner_alert/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/banner_alert/add_banner_alert.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/banner_alert/remove_banner_alert.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/base.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/billing_line_item/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/billing_line_item/add_billing_line_item.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/billing_line_item/remove_billing_line_item.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/billing_line_item/update_billing_line_item.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/compound_medications/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/compound_medications/compound_medication.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/launch_modal.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/note/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/note/appointment.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/note/base.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/note/message.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/note/note.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/patient/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/patient/base.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/patient/create_patient_external_identifier.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/patient_chart_summary_configuration.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/patient_metadata/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/patient_metadata/base.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/patient_metadata/patient_metadata_create_form.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/patient_portal/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/patient_portal/application_configuration.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/patient_portal/form_result.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/patient_portal_menu_configuration.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/patient_profile_configuration.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/protocol_card/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/protocol_card/protocol_card.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/questionnaire_result.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/send_invite.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/show_button.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/simple_api.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/surescripts/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/surescripts/surescripts_messages.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/task/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/task/task.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/update_user.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/widgets/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/effects/widgets/portal_widget.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/events/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/events/base.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/handlers/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/handlers/action_button.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/handlers/application.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/handlers/base.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/handlers/cron_task.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/handlers/simple_api/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/handlers/simple_api/api.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/handlers/simple_api/exceptions.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/handlers/simple_api/security.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/handlers/simple_api/tools.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/handlers/simple_api/websocket.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/protocols/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/protocols/base.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/protocols/clinical_quality_measure.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/protocols/timeframe.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/questionnaires/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/questionnaires/utils.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/templates/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/templates/utils.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/utils/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/utils/db.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/utils/http.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/utils/metrics.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/utils/plugins.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/apps.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/allergy_intolerance.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/appointment.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/assessment.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/banner_alert.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/base.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/billing.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/business_line.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/care_team.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/charge_description_master.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/claim.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/claim_line_item.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/command.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/common.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/compound_medication.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/condition.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/coverage.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/detected_issue.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/device.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/discount.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/fields.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/imaging.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/invoice.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/lab.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/line_item_transaction.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/medication.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/message.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/note.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/observation.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/organization.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/patient.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/patient_consent.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/payment_collection.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/payor_specific_charge.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/posting.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/practicelocation.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/protocol_override.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/questionnaire.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/reason_for_visit.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/referral.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/service_provider.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/staff.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/task.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/team.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/user.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/data/utils.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/v1/models.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/value_set/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/value_set/custom.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/value_set/hcc2018.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/value_set/v2022/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/value_set/v2022/adverse_event.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/value_set/v2022/allergy.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/value_set/v2022/assessment.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/value_set/v2022/communication.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/value_set/v2022/condition.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/value_set/v2022/device.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/value_set/v2022/diagnostic_study.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/value_set/v2022/encounter.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/value_set/v2022/immunization.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/value_set/v2022/individual_characteristic.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/value_set/v2022/intervention.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/value_set/v2022/laboratory_test.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/value_set/v2022/medication.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/value_set/v2022/physical_exam.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/value_set/v2022/procedure.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/value_set/v2022/symptom.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/value_set/value_set.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/canvas_sdk/views/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/logger/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/logger/logger.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/plugin_runner/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/plugin_runner/allowed-module-imports.json +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/plugin_runner/authentication.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/plugin_runner/aws_headers.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/plugin_runner/generate_allowed_imports.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/plugin_runner/load_all_plugins.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/plugin_runner/sandbox.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/protobufs/canvas_generated/messages/effects.proto +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/protobufs/canvas_generated/messages/events.proto +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/pubsub/__init__.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/pubsub/pubsub.py +0 -0
- {canvas-0.53.1 → canvas-0.53.2}/settings.py +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/plugins.proto\"\x16\n\x14ReloadPluginsRequest\"(\n\x15ReloadPluginsResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x62\x06proto3')
|
|
17
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'canvas_generated/messages/plugins.proto\"\x16\n\x14ReloadPluginsRequest\"(\n\x15ReloadPluginsResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"%\n\x13ReloadPluginRequest\x12\x0e\n\x06plugin\x18\x01 \x01(\t\"\'\n\x14ReloadPluginResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"%\n\x13UnloadPluginRequest\x12\x0e\n\x06plugin\x18\x01 \x01(\t\"\'\n\x14UnloadPluginResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x62\x06proto3')
|
|
18
18
|
|
|
19
19
|
_globals = globals()
|
|
20
20
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -25,4 +25,12 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
|
25
25
|
_globals['_RELOADPLUGINSREQUEST']._serialized_end=65
|
|
26
26
|
_globals['_RELOADPLUGINSRESPONSE']._serialized_start=67
|
|
27
27
|
_globals['_RELOADPLUGINSRESPONSE']._serialized_end=107
|
|
28
|
+
_globals['_RELOADPLUGINREQUEST']._serialized_start=109
|
|
29
|
+
_globals['_RELOADPLUGINREQUEST']._serialized_end=146
|
|
30
|
+
_globals['_RELOADPLUGINRESPONSE']._serialized_start=148
|
|
31
|
+
_globals['_RELOADPLUGINRESPONSE']._serialized_end=187
|
|
32
|
+
_globals['_UNLOADPLUGINREQUEST']._serialized_start=189
|
|
33
|
+
_globals['_UNLOADPLUGINREQUEST']._serialized_end=226
|
|
34
|
+
_globals['_UNLOADPLUGINRESPONSE']._serialized_start=228
|
|
35
|
+
_globals['_UNLOADPLUGINRESPONSE']._serialized_end=267
|
|
28
36
|
# @@protoc_insertion_point(module_scope)
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
from google.protobuf import descriptor as _descriptor
|
|
2
|
+
from google.protobuf import message as _message
|
|
3
|
+
from typing import ClassVar as _ClassVar, Optional as _Optional
|
|
4
|
+
|
|
5
|
+
DESCRIPTOR: _descriptor.FileDescriptor
|
|
6
|
+
|
|
7
|
+
class ReloadPluginsRequest(_message.Message):
|
|
8
|
+
__slots__ = ()
|
|
9
|
+
def __init__(self) -> None: ...
|
|
10
|
+
|
|
11
|
+
class ReloadPluginsResponse(_message.Message):
|
|
12
|
+
__slots__ = ("success",)
|
|
13
|
+
SUCCESS_FIELD_NUMBER: _ClassVar[int]
|
|
14
|
+
success: bool
|
|
15
|
+
def __init__(self, success: bool = ...) -> None: ...
|
|
16
|
+
|
|
17
|
+
class ReloadPluginRequest(_message.Message):
|
|
18
|
+
__slots__ = ("plugin",)
|
|
19
|
+
PLUGIN_FIELD_NUMBER: _ClassVar[int]
|
|
20
|
+
plugin: str
|
|
21
|
+
def __init__(self, plugin: _Optional[str] = ...) -> None: ...
|
|
22
|
+
|
|
23
|
+
class ReloadPluginResponse(_message.Message):
|
|
24
|
+
__slots__ = ("success",)
|
|
25
|
+
SUCCESS_FIELD_NUMBER: _ClassVar[int]
|
|
26
|
+
success: bool
|
|
27
|
+
def __init__(self, success: bool = ...) -> None: ...
|
|
28
|
+
|
|
29
|
+
class UnloadPluginRequest(_message.Message):
|
|
30
|
+
__slots__ = ("plugin",)
|
|
31
|
+
PLUGIN_FIELD_NUMBER: _ClassVar[int]
|
|
32
|
+
plugin: str
|
|
33
|
+
def __init__(self, plugin: _Optional[str] = ...) -> None: ...
|
|
34
|
+
|
|
35
|
+
class UnloadPluginResponse(_message.Message):
|
|
36
|
+
__slots__ = ("success",)
|
|
37
|
+
SUCCESS_FIELD_NUMBER: _ClassVar[int]
|
|
38
|
+
success: bool
|
|
39
|
+
def __init__(self, success: bool = ...) -> None: ...
|
|
@@ -16,7 +16,7 @@ from canvas_generated.messages import events_pb2 as canvas__generated_dot_messag
|
|
|
16
16
|
from canvas_generated.messages import plugins_pb2 as canvas__generated_dot_messages_dot_plugins__pb2
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n-canvas_generated/services/plugin_runner.proto\x12\x06\x63\x61nvas\x1a&canvas_generated/messages/events.proto\x1a\'canvas_generated/messages/plugins.proto2\
|
|
19
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n-canvas_generated/services/plugin_runner.proto\x12\x06\x63\x61nvas\x1a&canvas_generated/messages/events.proto\x1a\'canvas_generated/messages/plugins.proto2\x85\x02\n\x0cPluginRunner\x12\x35\n\x0bHandleEvent\x12\r.canvas.Event\x1a\x15.canvas.EventResponse0\x01\x12@\n\rReloadPlugins\x12\x15.ReloadPluginsRequest\x1a\x16.ReloadPluginsResponse0\x01\x12=\n\x0cReloadPlugin\x12\x14.ReloadPluginRequest\x1a\x15.ReloadPluginResponse0\x01\x12=\n\x0cUnloadPlugin\x12\x14.UnloadPluginRequest\x1a\x15.UnloadPluginResponse0\x01\x62\x06proto3')
|
|
20
20
|
|
|
21
21
|
_globals = globals()
|
|
22
22
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -24,5 +24,5 @@ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'canvas_generated.services.p
|
|
|
24
24
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
25
25
|
DESCRIPTOR._options = None
|
|
26
26
|
_globals['_PLUGINRUNNER']._serialized_start=139
|
|
27
|
-
_globals['_PLUGINRUNNER']._serialized_end=
|
|
27
|
+
_globals['_PLUGINRUNNER']._serialized_end=400
|
|
28
28
|
# @@protoc_insertion_point(module_scope)
|
|
@@ -25,6 +25,16 @@ class PluginRunnerStub(object):
|
|
|
25
25
|
request_serializer=canvas__generated_dot_messages_dot_plugins__pb2.ReloadPluginsRequest.SerializeToString,
|
|
26
26
|
response_deserializer=canvas__generated_dot_messages_dot_plugins__pb2.ReloadPluginsResponse.FromString,
|
|
27
27
|
)
|
|
28
|
+
self.ReloadPlugin = channel.unary_stream(
|
|
29
|
+
'/canvas.PluginRunner/ReloadPlugin',
|
|
30
|
+
request_serializer=canvas__generated_dot_messages_dot_plugins__pb2.ReloadPluginRequest.SerializeToString,
|
|
31
|
+
response_deserializer=canvas__generated_dot_messages_dot_plugins__pb2.ReloadPluginResponse.FromString,
|
|
32
|
+
)
|
|
33
|
+
self.UnloadPlugin = channel.unary_stream(
|
|
34
|
+
'/canvas.PluginRunner/UnloadPlugin',
|
|
35
|
+
request_serializer=canvas__generated_dot_messages_dot_plugins__pb2.UnloadPluginRequest.SerializeToString,
|
|
36
|
+
response_deserializer=canvas__generated_dot_messages_dot_plugins__pb2.UnloadPluginResponse.FromString,
|
|
37
|
+
)
|
|
28
38
|
|
|
29
39
|
|
|
30
40
|
class PluginRunnerServicer(object):
|
|
@@ -42,6 +52,18 @@ class PluginRunnerServicer(object):
|
|
|
42
52
|
context.set_details('Method not implemented!')
|
|
43
53
|
raise NotImplementedError('Method not implemented!')
|
|
44
54
|
|
|
55
|
+
def ReloadPlugin(self, request, context):
|
|
56
|
+
"""Missing associated documentation comment in .proto file."""
|
|
57
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
58
|
+
context.set_details('Method not implemented!')
|
|
59
|
+
raise NotImplementedError('Method not implemented!')
|
|
60
|
+
|
|
61
|
+
def UnloadPlugin(self, request, context):
|
|
62
|
+
"""Missing associated documentation comment in .proto file."""
|
|
63
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
64
|
+
context.set_details('Method not implemented!')
|
|
65
|
+
raise NotImplementedError('Method not implemented!')
|
|
66
|
+
|
|
45
67
|
|
|
46
68
|
def add_PluginRunnerServicer_to_server(servicer, server):
|
|
47
69
|
rpc_method_handlers = {
|
|
@@ -55,6 +77,16 @@ def add_PluginRunnerServicer_to_server(servicer, server):
|
|
|
55
77
|
request_deserializer=canvas__generated_dot_messages_dot_plugins__pb2.ReloadPluginsRequest.FromString,
|
|
56
78
|
response_serializer=canvas__generated_dot_messages_dot_plugins__pb2.ReloadPluginsResponse.SerializeToString,
|
|
57
79
|
),
|
|
80
|
+
'ReloadPlugin': grpc.unary_stream_rpc_method_handler(
|
|
81
|
+
servicer.ReloadPlugin,
|
|
82
|
+
request_deserializer=canvas__generated_dot_messages_dot_plugins__pb2.ReloadPluginRequest.FromString,
|
|
83
|
+
response_serializer=canvas__generated_dot_messages_dot_plugins__pb2.ReloadPluginResponse.SerializeToString,
|
|
84
|
+
),
|
|
85
|
+
'UnloadPlugin': grpc.unary_stream_rpc_method_handler(
|
|
86
|
+
servicer.UnloadPlugin,
|
|
87
|
+
request_deserializer=canvas__generated_dot_messages_dot_plugins__pb2.UnloadPluginRequest.FromString,
|
|
88
|
+
response_serializer=canvas__generated_dot_messages_dot_plugins__pb2.UnloadPluginResponse.SerializeToString,
|
|
89
|
+
),
|
|
58
90
|
}
|
|
59
91
|
generic_handler = grpc.method_handlers_generic_handler(
|
|
60
92
|
'canvas.PluginRunner', rpc_method_handlers)
|
|
@@ -98,3 +130,37 @@ class PluginRunner(object):
|
|
|
98
130
|
canvas__generated_dot_messages_dot_plugins__pb2.ReloadPluginsResponse.FromString,
|
|
99
131
|
options, channel_credentials,
|
|
100
132
|
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
|
133
|
+
|
|
134
|
+
@staticmethod
|
|
135
|
+
def ReloadPlugin(request,
|
|
136
|
+
target,
|
|
137
|
+
options=(),
|
|
138
|
+
channel_credentials=None,
|
|
139
|
+
call_credentials=None,
|
|
140
|
+
insecure=False,
|
|
141
|
+
compression=None,
|
|
142
|
+
wait_for_ready=None,
|
|
143
|
+
timeout=None,
|
|
144
|
+
metadata=None):
|
|
145
|
+
return grpc.experimental.unary_stream(request, target, '/canvas.PluginRunner/ReloadPlugin',
|
|
146
|
+
canvas__generated_dot_messages_dot_plugins__pb2.ReloadPluginRequest.SerializeToString,
|
|
147
|
+
canvas__generated_dot_messages_dot_plugins__pb2.ReloadPluginResponse.FromString,
|
|
148
|
+
options, channel_credentials,
|
|
149
|
+
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
|
150
|
+
|
|
151
|
+
@staticmethod
|
|
152
|
+
def UnloadPlugin(request,
|
|
153
|
+
target,
|
|
154
|
+
options=(),
|
|
155
|
+
channel_credentials=None,
|
|
156
|
+
call_credentials=None,
|
|
157
|
+
insecure=False,
|
|
158
|
+
compression=None,
|
|
159
|
+
wait_for_ready=None,
|
|
160
|
+
timeout=None,
|
|
161
|
+
metadata=None):
|
|
162
|
+
return grpc.experimental.unary_stream(request, target, '/canvas.PluginRunner/UnloadPlugin',
|
|
163
|
+
canvas__generated_dot_messages_dot_plugins__pb2.UnloadPluginRequest.SerializeToString,
|
|
164
|
+
canvas__generated_dot_messages_dot_plugins__pb2.UnloadPluginResponse.FromString,
|
|
165
|
+
options, channel_credentials,
|
|
166
|
+
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
|
@@ -12,3 +12,7 @@ class InvalidPluginFormat(PluginValidationError):
|
|
|
12
12
|
|
|
13
13
|
class PluginInstallationError(PluginError):
|
|
14
14
|
"""An exception raised when a plugin fails to install."""
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class PluginUninstallationError(PluginError):
|
|
18
|
+
"""An exception raised when a plugin fails to uninstall."""
|
|
@@ -17,7 +17,11 @@ from psycopg.rows import dict_row
|
|
|
17
17
|
|
|
18
18
|
from logger import log
|
|
19
19
|
from plugin_runner.aws_headers import aws_sig_v4_headers
|
|
20
|
-
from plugin_runner.exceptions import
|
|
20
|
+
from plugin_runner.exceptions import (
|
|
21
|
+
InvalidPluginFormat,
|
|
22
|
+
PluginInstallationError,
|
|
23
|
+
PluginUninstallationError,
|
|
24
|
+
)
|
|
21
25
|
from settings import (
|
|
22
26
|
AWS_ACCESS_KEY_ID,
|
|
23
27
|
AWS_REGION,
|
|
@@ -68,15 +72,28 @@ class PluginAttributes(TypedDict):
|
|
|
68
72
|
secrets: dict[str, str]
|
|
69
73
|
|
|
70
74
|
|
|
71
|
-
def enabled_plugins() -> dict[str, PluginAttributes]:
|
|
72
|
-
"""Returns a dictionary of enabled plugins and their attributes.
|
|
75
|
+
def enabled_plugins(plugin_names: list[str] | None = None) -> dict[str, PluginAttributes]:
|
|
76
|
+
"""Returns a dictionary of enabled plugins and their attributes.
|
|
77
|
+
|
|
78
|
+
If `plugin_names` is provided, only returns those plugins (if enabled).
|
|
79
|
+
"""
|
|
73
80
|
conn = open_database_connection()
|
|
74
81
|
|
|
75
82
|
with conn.cursor(row_factory=dict_row) as cursor:
|
|
76
|
-
|
|
77
|
-
"SELECT name, package, version, key, value
|
|
78
|
-
"
|
|
83
|
+
base_query = (
|
|
84
|
+
"SELECT name, package, version, key, value "
|
|
85
|
+
"FROM plugin_io_plugin p "
|
|
86
|
+
"LEFT JOIN plugin_io_pluginsecret s ON p.id = s.plugin_id "
|
|
87
|
+
"WHERE is_enabled"
|
|
79
88
|
)
|
|
89
|
+
|
|
90
|
+
params = []
|
|
91
|
+
if plugin_names:
|
|
92
|
+
placeholders = ",".join(["%s"] * len(plugin_names))
|
|
93
|
+
base_query += f" AND name IN ({placeholders})"
|
|
94
|
+
params.extend(plugin_names)
|
|
95
|
+
|
|
96
|
+
cursor.execute(base_query, params)
|
|
80
97
|
rows = cursor.fetchall()
|
|
81
98
|
plugins = _extract_rows_to_dict(rows)
|
|
82
99
|
|
|
@@ -210,22 +227,31 @@ def disable_plugin(plugin_name: str) -> None:
|
|
|
210
227
|
|
|
211
228
|
def uninstall_plugin(plugin_name: str) -> None:
|
|
212
229
|
"""Remove the plugin from the filesystem."""
|
|
213
|
-
|
|
230
|
+
try:
|
|
231
|
+
log.info(f'Uninstalling plugin "{plugin_name}"')
|
|
214
232
|
|
|
215
|
-
|
|
233
|
+
plugin_path = Path(PLUGIN_DIRECTORY) / plugin_name
|
|
216
234
|
|
|
217
|
-
|
|
218
|
-
|
|
235
|
+
if plugin_path.exists():
|
|
236
|
+
shutil.rmtree(plugin_path)
|
|
237
|
+
except Exception as e:
|
|
238
|
+
raise PluginUninstallationError() from e
|
|
219
239
|
|
|
220
240
|
|
|
221
241
|
def install_plugins() -> None:
|
|
222
242
|
"""Install all enabled plugins."""
|
|
223
243
|
log.info("Installing plugins")
|
|
244
|
+
try:
|
|
245
|
+
plugins_dir = Path(PLUGIN_DIRECTORY).resolve()
|
|
224
246
|
|
|
225
|
-
|
|
226
|
-
|
|
247
|
+
if plugins_dir.exists():
|
|
248
|
+
shutil.rmtree(plugins_dir.as_posix())
|
|
227
249
|
|
|
228
|
-
|
|
250
|
+
plugins_dir.mkdir(parents=False, exist_ok=True)
|
|
251
|
+
except Exception as e:
|
|
252
|
+
raise PluginInstallationError(
|
|
253
|
+
f'Failed to reset plugin directory "{PLUGIN_DIRECTORY}": {e}"'
|
|
254
|
+
) from e
|
|
229
255
|
|
|
230
256
|
for plugin_name, attributes in enabled_plugins().items():
|
|
231
257
|
try:
|
|
@@ -24,7 +24,14 @@ from sentry_sdk.integrations.logging import ignore_logger
|
|
|
24
24
|
|
|
25
25
|
import settings
|
|
26
26
|
from canvas_generated.messages.effects_pb2 import EffectType
|
|
27
|
-
from canvas_generated.messages.plugins_pb2 import
|
|
27
|
+
from canvas_generated.messages.plugins_pb2 import (
|
|
28
|
+
ReloadPluginRequest,
|
|
29
|
+
ReloadPluginResponse,
|
|
30
|
+
ReloadPluginsRequest,
|
|
31
|
+
ReloadPluginsResponse,
|
|
32
|
+
UnloadPluginRequest,
|
|
33
|
+
UnloadPluginResponse,
|
|
34
|
+
)
|
|
28
35
|
from canvas_generated.services.plugin_runner_pb2_grpc import (
|
|
29
36
|
PluginRunnerServicer,
|
|
30
37
|
add_PluginRunnerServicer_to_server,
|
|
@@ -38,7 +45,13 @@ from canvas_sdk.utils import metrics
|
|
|
38
45
|
from canvas_sdk.utils.metrics import measured
|
|
39
46
|
from logger import log
|
|
40
47
|
from plugin_runner.authentication import token_for_plugin
|
|
41
|
-
from plugin_runner.
|
|
48
|
+
from plugin_runner.exceptions import PluginInstallationError, PluginUninstallationError
|
|
49
|
+
from plugin_runner.installation import (
|
|
50
|
+
enabled_plugins,
|
|
51
|
+
install_plugin,
|
|
52
|
+
install_plugins,
|
|
53
|
+
uninstall_plugin,
|
|
54
|
+
)
|
|
42
55
|
from plugin_runner.sandbox import Sandbox, sandbox_from_module
|
|
43
56
|
from settings import (
|
|
44
57
|
CHANNEL_NAME,
|
|
@@ -305,14 +318,51 @@ class PluginRunner(PluginRunnerServicer):
|
|
|
305
318
|
self, request: ReloadPluginsRequest, context: Any
|
|
306
319
|
) -> Iterable[ReloadPluginsResponse]:
|
|
307
320
|
"""This is invoked when we need to reload plugins."""
|
|
308
|
-
log.info("Reloading plugins...")
|
|
321
|
+
log.info("Reloading all plugins...")
|
|
322
|
+
|
|
323
|
+
message = {"action": "reload"}
|
|
324
|
+
|
|
309
325
|
try:
|
|
310
|
-
publish_message(message=
|
|
326
|
+
publish_message(message=message)
|
|
311
327
|
except ImportError:
|
|
312
328
|
yield ReloadPluginsResponse(success=False)
|
|
313
329
|
else:
|
|
314
330
|
yield ReloadPluginsResponse(success=True)
|
|
315
331
|
|
|
332
|
+
def ReloadPlugin(
|
|
333
|
+
self, request: ReloadPluginRequest, context: Any
|
|
334
|
+
) -> Iterable[ReloadPluginResponse]:
|
|
335
|
+
"""This is invoked when we need to reload a specific plugin."""
|
|
336
|
+
log.info(f'Reloading plugin "{request.plugin}"...')
|
|
337
|
+
|
|
338
|
+
message = {
|
|
339
|
+
"action": "reload",
|
|
340
|
+
"plugin": request.plugin,
|
|
341
|
+
}
|
|
342
|
+
try:
|
|
343
|
+
publish_message(message=message)
|
|
344
|
+
except ImportError:
|
|
345
|
+
yield ReloadPluginResponse(success=False)
|
|
346
|
+
else:
|
|
347
|
+
yield ReloadPluginResponse(success=True)
|
|
348
|
+
|
|
349
|
+
def UnloadPlugin(
|
|
350
|
+
self, request: UnloadPluginRequest, context: Any
|
|
351
|
+
) -> Iterable[UnloadPluginResponse]:
|
|
352
|
+
"""This is invoked when we need to reload a specific plugin."""
|
|
353
|
+
log.info(f'Unloading plugin "{request.plugin}"...')
|
|
354
|
+
|
|
355
|
+
message = {
|
|
356
|
+
"action": "unload",
|
|
357
|
+
"plugin": request.plugin,
|
|
358
|
+
}
|
|
359
|
+
try:
|
|
360
|
+
publish_message(message=message)
|
|
361
|
+
except ImportError:
|
|
362
|
+
yield UnloadPluginResponse(success=False)
|
|
363
|
+
else:
|
|
364
|
+
yield UnloadPluginResponse(success=True)
|
|
365
|
+
|
|
316
366
|
|
|
317
367
|
STOP_SYNCHRONIZER = threading.Event()
|
|
318
368
|
|
|
@@ -346,20 +396,40 @@ def synchronize_plugins(run_once: bool = False) -> None:
|
|
|
346
396
|
if "action" not in data:
|
|
347
397
|
continue
|
|
348
398
|
|
|
349
|
-
|
|
350
|
-
|
|
399
|
+
plugin_name = data.get("plugin", None)
|
|
400
|
+
try:
|
|
401
|
+
if data["action"] == "reload":
|
|
402
|
+
if plugin_name:
|
|
403
|
+
plugin = enabled_plugins([plugin_name]).get(plugin_name, None)
|
|
404
|
+
|
|
405
|
+
if plugin:
|
|
406
|
+
log.info(
|
|
407
|
+
f'synchronize_plugins: installing/reloading plugin "{plugin_name}" for action=reload'
|
|
408
|
+
)
|
|
409
|
+
install_plugin(plugin_name, attributes=plugin)
|
|
410
|
+
plugin_dir = pathlib.Path(PLUGIN_DIRECTORY) / plugin_name
|
|
411
|
+
load_plugin(plugin_dir.resolve())
|
|
412
|
+
else:
|
|
413
|
+
log.info("synchronize_plugins: installing/reloading plugins for action=reload")
|
|
414
|
+
install_plugins()
|
|
415
|
+
load_plugins()
|
|
416
|
+
elif data["action"] == "unload" and plugin_name:
|
|
417
|
+
log.info(f'synchronize_plugins: uninstalling plugin "{plugin_name}"')
|
|
418
|
+
unload_plugin(plugin_name)
|
|
419
|
+
uninstall_plugin(plugin_name)
|
|
420
|
+
except Exception as e:
|
|
421
|
+
if isinstance(e, PluginInstallationError):
|
|
422
|
+
message = "install_plugins failed"
|
|
423
|
+
elif isinstance(e, PluginUninstallationError):
|
|
424
|
+
message = "uninstall_plugin failed"
|
|
425
|
+
else:
|
|
426
|
+
message = "load_plugins failed"
|
|
351
427
|
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
except Exception as e:
|
|
355
|
-
log.error(f"synchronize_plugins: install_plugins failed: {e}")
|
|
356
|
-
sentry_sdk.capture_exception(e)
|
|
428
|
+
if plugin_name:
|
|
429
|
+
message += f' for plugin "{plugin_name}"'
|
|
357
430
|
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
except Exception as e:
|
|
361
|
-
log.error(f"synchronize_plugins: load_plugins failed: {e}")
|
|
362
|
-
sentry_sdk.capture_exception(e)
|
|
431
|
+
log.error(f"synchronize_plugins: {message}: {e}")
|
|
432
|
+
sentry_sdk.capture_exception(e)
|
|
363
433
|
|
|
364
434
|
if run_once:
|
|
365
435
|
break
|
|
@@ -523,7 +593,7 @@ def load_or_reload_plugin(path: pathlib.Path) -> bool:
|
|
|
523
593
|
result = sandbox.execute()
|
|
524
594
|
|
|
525
595
|
if name_and_class in LOADED_PLUGINS:
|
|
526
|
-
log.info(f"Reloading
|
|
596
|
+
log.info(f"Reloading handler '{name_and_class}'")
|
|
527
597
|
|
|
528
598
|
LOADED_PLUGINS[name_and_class]["active"] = True
|
|
529
599
|
|
|
@@ -531,7 +601,7 @@ def load_or_reload_plugin(path: pathlib.Path) -> bool:
|
|
|
531
601
|
LOADED_PLUGINS[name_and_class]["sandbox"] = result
|
|
532
602
|
LOADED_PLUGINS[name_and_class]["secrets"] = secrets_json
|
|
533
603
|
else:
|
|
534
|
-
log.info(f
|
|
604
|
+
log.info(f'Loading handler "{name_and_class}"')
|
|
535
605
|
|
|
536
606
|
LOADED_PLUGINS[name_and_class] = {
|
|
537
607
|
"active": True,
|
|
@@ -553,6 +623,23 @@ def load_or_reload_plugin(path: pathlib.Path) -> bool:
|
|
|
553
623
|
return not any_failed
|
|
554
624
|
|
|
555
625
|
|
|
626
|
+
def unload_plugin(name: str) -> None:
|
|
627
|
+
"""Unload a plugin by its name."""
|
|
628
|
+
handlers_removed = False
|
|
629
|
+
|
|
630
|
+
for handler_name in LOADED_PLUGINS.copy():
|
|
631
|
+
if handler_name.startswith(f"{name}:"):
|
|
632
|
+
log.info(f'Unloading handler "{handler_name}"')
|
|
633
|
+
del LOADED_PLUGINS[handler_name]
|
|
634
|
+
handlers_removed = True
|
|
635
|
+
|
|
636
|
+
if handlers_removed:
|
|
637
|
+
# Refresh the event type map to remove any handlers for the unloaded plugin
|
|
638
|
+
refresh_event_type_map()
|
|
639
|
+
else:
|
|
640
|
+
log.warning(f"No handlers found for plugin '{name}' to unload.")
|
|
641
|
+
|
|
642
|
+
|
|
556
643
|
def refresh_event_type_map() -> None:
|
|
557
644
|
"""Ensure the event subscriptions are up to date."""
|
|
558
645
|
EVENT_HANDLER_MAP.clear()
|
|
@@ -608,6 +695,13 @@ def load_plugins(specified_plugin_paths: list[str] | None = None) -> None:
|
|
|
608
695
|
refresh_event_type_map()
|
|
609
696
|
|
|
610
697
|
|
|
698
|
+
@measured
|
|
699
|
+
def load_plugin(path: pathlib.Path) -> None:
|
|
700
|
+
"""Load a plugin from the specified path."""
|
|
701
|
+
load_or_reload_plugin(path)
|
|
702
|
+
refresh_event_type_map()
|
|
703
|
+
|
|
704
|
+
|
|
611
705
|
# NOTE: specified_plugin_paths powers the `canvas run-plugins` command
|
|
612
706
|
def main(specified_plugin_paths: list[str] | None = None) -> None:
|
|
613
707
|
"""Run the server and the synchronize_plugins loop."""
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
syntax = "proto3";
|
|
2
|
+
|
|
3
|
+
message ReloadPluginsRequest {
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
message ReloadPluginsResponse {
|
|
7
|
+
bool success = 1;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
message ReloadPluginRequest {
|
|
11
|
+
string plugin = 1;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
message ReloadPluginResponse {
|
|
15
|
+
bool success = 1;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
message UnloadPluginRequest {
|
|
19
|
+
string plugin = 1;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
message UnloadPluginResponse {
|
|
23
|
+
bool success = 1;
|
|
24
|
+
}
|
|
@@ -9,4 +9,8 @@ service PluginRunner {
|
|
|
9
9
|
rpc HandleEvent (Event) returns (stream EventResponse);
|
|
10
10
|
|
|
11
11
|
rpc ReloadPlugins (ReloadPluginsRequest) returns (stream ReloadPluginsResponse);
|
|
12
|
+
|
|
13
|
+
rpc ReloadPlugin (ReloadPluginRequest) returns (stream ReloadPluginResponse);
|
|
14
|
+
|
|
15
|
+
rpc UnloadPlugin (UnloadPluginRequest) returns (stream UnloadPluginResponse);
|
|
12
16
|
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
from google.protobuf import descriptor as _descriptor
|
|
2
|
-
from google.protobuf import message as _message
|
|
3
|
-
from typing import ClassVar as _ClassVar, Optional as _Optional
|
|
4
|
-
|
|
5
|
-
DESCRIPTOR: _descriptor.FileDescriptor
|
|
6
|
-
|
|
7
|
-
class ReloadPluginsRequest(_message.Message):
|
|
8
|
-
__slots__ = ()
|
|
9
|
-
def __init__(self) -> None: ...
|
|
10
|
-
|
|
11
|
-
class ReloadPluginsResponse(_message.Message):
|
|
12
|
-
__slots__ = ("success",)
|
|
13
|
-
SUCCESS_FIELD_NUMBER: _ClassVar[int]
|
|
14
|
-
success: bool
|
|
15
|
-
def __init__(self, success: bool = ...) -> None: ...
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CANCELED.ndjson
RENAMED
|
File without changes
|
{canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CHECKED_IN.ndjson
RENAMED
|
File without changes
|
{canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CREATED.ndjson
RENAMED
|
File without changes
|
{canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_NO_SHOWED.ndjson
RENAMED
|
File without changes
|
{canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_RESCHEDULED.ndjson
RENAMED
|
File without changes
|
{canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_RESTORED.ndjson
RENAMED
|
File without changes
|
{canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_UPDATED.ndjson
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/BILLING_LINE_ITEM_CREATED.ndjson
RENAMED
|
File without changes
|
{canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/BILLING_LINE_ITEM_UPDATED.ndjson
RENAMED
|
File without changes
|
{canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/CONDITION_ASSESSED.ndjson
RENAMED
|
File without changes
|
{canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/CONDITION_CREATED.ndjson
RENAMED
|
File without changes
|
{canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/CONDITION_UPDATED.ndjson
RENAMED
|
File without changes
|
|
File without changes
|
{canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/ENCOUNTER_CREATED.ndjson
RENAMED
|
File without changes
|
{canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/ENCOUNTER_UPDATED.ndjson
RENAMED
|
File without changes
|
{canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_CREATED.ndjson
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_UPDATED.ndjson
RENAMED
|
File without changes
|
{canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/INTERVIEW_CREATED.ndjson
RENAMED
|
File without changes
|
{canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/INTERVIEW_UPDATED.ndjson
RENAMED
|
File without changes
|
{canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/LAB_ORDER_CREATED.ndjson
RENAMED
|
File without changes
|
{canvas-0.53.1 → canvas-0.53.2}/canvas_cli/apps/emit/event_fixtures/LAB_ORDER_UPDATED.ndjson
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|