canvas 0.56.0__tar.gz → 0.57.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.
- {canvas-0.56.0 → canvas-0.57.1}/PKG-INFO +1 -1
- canvas-0.57.1/canvas_cli/apps/plugin/__init__.py +23 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/plugin/plugin.py +105 -8
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/main.py +10 -0
- {canvas-0.56.0 → canvas-0.57.1}/plugin_runner/plugin_runner.py +8 -1
- {canvas-0.56.0 → canvas-0.57.1}/pyproject.toml +4 -3
- canvas-0.56.0/canvas_cli/apps/plugin/__init__.py +0 -11
- {canvas-0.56.0 → canvas-0.57.1}/.gitignore +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/README.md +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/auth/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/auth/storage.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/auth/utils.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/emit.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/ALLERGY_INTOLERANCE_CREATED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/ALLERGY_INTOLERANCE_UPDATED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CANCELED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CHECKED_IN.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CREATED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_NO_SHOWED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_RESCHEDULED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_RESTORED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_UPDATED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__CONDITION_SELECTED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__POST_COMMIT.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__POST_ORIGINATE.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__POST_UPDATE.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__PRE_COMMIT.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__PRE_ORIGINATE.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/ASSESS_COMMAND__PRE_UPDATE.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/BILLING_LINE_ITEM_CREATED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/BILLING_LINE_ITEM_UPDATED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/CONDITION_ASSESSED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/CONDITION_CREATED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/CONDITION_UPDATED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/CRON.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/ENCOUNTER_CREATED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/ENCOUNTER_UPDATED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_CREATED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_STATEMENT_CREATED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_STATEMENT_UPDATED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_UPDATED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/INTERVIEW_CREATED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/INTERVIEW_UPDATED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/LAB_ORDER_CREATED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/LAB_ORDER_UPDATED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_LIST_ITEM_CREATED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_LIST_ITEM_UPDATED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__POST_COMMIT.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__POST_ORIGINATE.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__POST_UPDATE.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__PRE_COMMIT.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__PRE_ORIGINATE.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT_COMMAND__PRE_UPDATE.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/MEDICATION_STATEMENT__MEDICATION__POST_SEARCH.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/PATIENT_CREATED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/PATIENT_UPDATED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/PLAN_COMMAND__POST_ORIGINATE.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/PLAN_COMMAND__PRE_ORIGINATE.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__POST_COMMIT.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__POST_ORIGINATE.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__POST_UPDATE.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__PRE_COMMIT.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__PRE_ORIGINATE.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE_COMMAND__PRE_UPDATE.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/QUESTIONNAIRE__QUESTIONNAIRE__POST_SEARCH.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/SIMPLE_API_REQUEST.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/TASK_COMMENT_CREATED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/TASK_CREATED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/TASK_UPDATED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/VITAL_SIGN_CREATED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/VITAL_SIGN_UPDATED.ndjson +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/logs/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/logs/logs.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/run_plugins/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/run_plugins/run_plugins.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/templates/plugins/application/cookiecutter.json +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/CANVAS_MANIFEST.json +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/README.md +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/applications/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/applications/my_application.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/assets/python-logo.png +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/templates/plugins/default/cookiecutter.json +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/CANVAS_MANIFEST.json +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/README.md +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/protocols/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/protocols/my_protocol.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/utils/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/utils/context/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/utils/context/context.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/utils/print/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/utils/print/print.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/utils/urls/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/utils/urls/urls.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/utils/validators/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/utils/validators/manifest_schema.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_cli/utils/validators/validators.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_generated/messages/effects_pb2.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_generated/messages/effects_pb2.pyi +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_generated/messages/effects_pb2_grpc.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_generated/messages/events_pb2.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_generated/messages/events_pb2.pyi +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_generated/messages/events_pb2_grpc.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_generated/messages/plugins_pb2.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_generated/messages/plugins_pb2.pyi +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_generated/messages/plugins_pb2_grpc.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_generated/services/plugin_runner_pb2.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_generated/services/plugin_runner_pb2.pyi +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_generated/services/plugin_runner_pb2_grpc.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/base.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/caching/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/caching/base.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/caching/client.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/caching/exceptions.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/caching/plugins.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/caching/utils.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/base.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/adjust_prescription.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/allergy.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/assess.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/change_medication.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/chart_section_review.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/close_goal.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/diagnose.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/exam.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/family_history.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/follow_up.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/goal.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/history_present_illness.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/imaging_order.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/immunization_statement.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/instruct.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/lab_order.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/medical_history.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/medication_statement.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/past_surgical_history.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/perform.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/plan.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/prescribe.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/questionnaire/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/questionnaire/question.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/questionnaire/toggle_questions.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/reason_for_visit.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/refer.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/refill.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/remove_allergy.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/resolve_condition.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/review_of_systems.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/stop_medication.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/structured_assessment.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/task.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/update_diagnosis.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/update_goal.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/commands/vitals.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/commands/constants.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/banner_alert/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/banner_alert/add_banner_alert.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/banner_alert/remove_banner_alert.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/base.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/billing_line_item/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/billing_line_item/add_billing_line_item.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/billing_line_item/remove_billing_line_item.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/billing_line_item/update_billing_line_item.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/compound_medications/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/compound_medications/compound_medication.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/group.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/launch_modal.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/note/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/note/appointment.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/note/base.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/note/message.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/note/note.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/panel_configuration.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/patient/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/patient/base.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/patient/create_patient_external_identifier.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/patient_chart_group.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/patient_chart_summary_configuration.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/patient_metadata/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/patient_metadata/base.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/patient_metadata/patient_metadata_create_form.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/patient_portal/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/patient_portal/application_configuration.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/patient_portal/form_result.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/patient_portal_menu_configuration.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/patient_profile_configuration.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/payment_processor.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/protocol_card/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/protocol_card/protocol_card.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/questionnaire_result.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/send_invite.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/show_button.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/simple_api.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/surescripts/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/surescripts/surescripts_messages.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/task/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/task/task.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/update_user.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/widgets/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/effects/widgets/portal_widget.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/events/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/events/base.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/handlers/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/handlers/action_button.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/handlers/application.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/handlers/base.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/handlers/cron_task.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/handlers/payment_processors/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/handlers/payment_processors/base.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/handlers/payment_processors/card.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/handlers/simple_api/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/handlers/simple_api/api.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/handlers/simple_api/exceptions.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/handlers/simple_api/security.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/handlers/simple_api/tools.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/handlers/simple_api/websocket.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/protocols/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/protocols/base.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/protocols/clinical_quality_measure.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/protocols/timeframe.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/questionnaires/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/questionnaires/utils.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/templates/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/templates/utils.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/utils/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/utils/db.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/utils/http.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/utils/metrics.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/utils/plugins.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/apps.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/allergy_intolerance.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/appointment.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/assessment.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/banner_alert.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/base.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/billing.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/business_line.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/care_team.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/charge_description_master.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/claim.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/claim_line_item.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/command.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/common.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/compound_medication.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/condition.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/coverage.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/detected_issue.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/device.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/discount.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/fields.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/imaging.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/invoice.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/lab.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/line_item_transaction.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/medication.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/message.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/note.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/observation.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/organization.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/patient.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/patient_consent.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/payment_collection.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/payor_specific_charge.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/posting.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/practicelocation.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/protocol_override.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/questionnaire.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/reason_for_visit.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/referral.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/service_provider.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/staff.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/task.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/team.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/user.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/data/utils.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/v1/models.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/value_set/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/value_set/custom.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/value_set/hcc2018.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/value_set/v2022/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/value_set/v2022/adverse_event.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/value_set/v2022/allergy.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/value_set/v2022/assessment.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/value_set/v2022/communication.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/value_set/v2022/condition.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/value_set/v2022/device.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/value_set/v2022/diagnostic_study.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/value_set/v2022/encounter.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/value_set/v2022/immunization.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/value_set/v2022/individual_characteristic.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/value_set/v2022/intervention.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/value_set/v2022/laboratory_test.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/value_set/v2022/medication.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/value_set/v2022/physical_exam.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/value_set/v2022/procedure.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/value_set/v2022/symptom.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/value_set/value_set.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/canvas_sdk/views/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/logger/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/logger/logger.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/plugin_runner/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/plugin_runner/allowed-module-imports.json +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/plugin_runner/authentication.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/plugin_runner/aws_headers.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/plugin_runner/exceptions.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/plugin_runner/generate_allowed_imports.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/plugin_runner/installation.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/plugin_runner/load_all_plugins.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/plugin_runner/sandbox.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/protobufs/canvas_generated/messages/effects.proto +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/protobufs/canvas_generated/messages/events.proto +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/protobufs/canvas_generated/messages/plugins.proto +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/protobufs/canvas_generated/services/plugin_runner.proto +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/pubsub/__init__.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/pubsub/pubsub.py +0 -0
- {canvas-0.56.0 → canvas-0.57.1}/settings.py +0 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
from canvas_cli.apps.plugin.plugin import (
|
|
2
|
+
disable,
|
|
3
|
+
enable,
|
|
4
|
+
init,
|
|
5
|
+
install,
|
|
6
|
+
list,
|
|
7
|
+
list_secrets,
|
|
8
|
+
set_secrets,
|
|
9
|
+
uninstall,
|
|
10
|
+
validate_manifest,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
__all__ = (
|
|
14
|
+
"list_secrets",
|
|
15
|
+
"set_secrets",
|
|
16
|
+
"disable",
|
|
17
|
+
"enable",
|
|
18
|
+
"init",
|
|
19
|
+
"install",
|
|
20
|
+
"list",
|
|
21
|
+
"uninstall",
|
|
22
|
+
"validate_manifest",
|
|
23
|
+
)
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import ast
|
|
2
|
+
import base64
|
|
3
|
+
import builtins
|
|
2
4
|
import json
|
|
3
5
|
import tarfile
|
|
4
6
|
import tempfile
|
|
5
7
|
from collections.abc import Iterable
|
|
6
8
|
from pathlib import Path
|
|
9
|
+
from pprint import pprint
|
|
7
10
|
from typing import Any, cast
|
|
8
11
|
from urllib.parse import urljoin
|
|
9
12
|
|
|
@@ -160,17 +163,17 @@ def _get_meta_properties(protocol_path: Path, classname: str) -> dict[str, str]:
|
|
|
160
163
|
if isinstance(meta_b.value, ast.Constant):
|
|
161
164
|
value = meta_b.value.value
|
|
162
165
|
elif isinstance(meta_b.value, ast.List):
|
|
163
|
-
value = [cast(ast.Constant, e).value for e in meta_b.value.elts]
|
|
166
|
+
value = [cast(ast.Constant, e).value for e in meta_b.value.elts] # type: ignore[assignment]
|
|
164
167
|
elif isinstance(meta_b.value, ast.Dict):
|
|
165
168
|
keys = meta_b.value.keys
|
|
166
169
|
values = meta_b.value.values
|
|
167
|
-
value = {
|
|
170
|
+
value = { # type: ignore[assignment]
|
|
168
171
|
cast(ast.Constant, k).value: cast(ast.Constant, values[i]).value
|
|
169
172
|
for i, k in enumerate(keys)
|
|
170
173
|
}
|
|
171
174
|
else:
|
|
172
175
|
value = None
|
|
173
|
-
meta[target_id] = value
|
|
176
|
+
meta[target_id] = value # type: ignore[assignment]
|
|
174
177
|
|
|
175
178
|
return meta
|
|
176
179
|
|
|
@@ -204,6 +207,18 @@ def get_base_plugin_template_path(plugin_type: str) -> Path:
|
|
|
204
207
|
return context.plugin_template_dir / context.default_plugin_template_name
|
|
205
208
|
|
|
206
209
|
|
|
210
|
+
def parse_secrets(secrets: builtins.list[str]) -> builtins.list[str]:
|
|
211
|
+
"""Parse secrets from the command line, expecting them in the format Key=value."""
|
|
212
|
+
parsed_secrets = []
|
|
213
|
+
|
|
214
|
+
for secret in secrets:
|
|
215
|
+
if "=" not in secret:
|
|
216
|
+
raise typer.BadParameter(f"Invalid secret format: '{secret}'. Use key=value.")
|
|
217
|
+
parsed_secrets.append(secret)
|
|
218
|
+
|
|
219
|
+
return parsed_secrets
|
|
220
|
+
|
|
221
|
+
|
|
207
222
|
def init(
|
|
208
223
|
plugin_type: str = typer.Argument(
|
|
209
224
|
"protocol",
|
|
@@ -222,6 +237,9 @@ def init(
|
|
|
222
237
|
|
|
223
238
|
def install(
|
|
224
239
|
plugin_name: Path = typer.Argument(..., help="Path to plugin to install"),
|
|
240
|
+
secrets: builtins.list[str] = typer.Option(
|
|
241
|
+
[], "--secret", callback=parse_secrets, help="Secrets to set, e.g. Key=value"
|
|
242
|
+
),
|
|
225
243
|
host: str | None = typer.Option(
|
|
226
244
|
callback=get_default_host,
|
|
227
245
|
help="Canvas instance to connect to",
|
|
@@ -243,6 +261,11 @@ def install(
|
|
|
243
261
|
else:
|
|
244
262
|
raise typer.BadParameter(f"Plugin '{plugin_name}' needs to be a valid directory")
|
|
245
263
|
|
|
264
|
+
encoded_secrets = []
|
|
265
|
+
for pair in secrets:
|
|
266
|
+
encoded = base64.b64encode(pair.encode()).decode()
|
|
267
|
+
encoded_secrets.append(("secret", encoded))
|
|
268
|
+
|
|
246
269
|
print(f"Installing plugin: {built_package_path} into {host}")
|
|
247
270
|
|
|
248
271
|
url = plugin_url(host)
|
|
@@ -250,10 +273,11 @@ def install(
|
|
|
250
273
|
print(f"Posting {built_package_path.absolute()} to {url}")
|
|
251
274
|
|
|
252
275
|
try:
|
|
276
|
+
data = [("is_enabled", True)] + encoded_secrets
|
|
253
277
|
with open(built_package_path, "rb") as package:
|
|
254
278
|
r = requests.post(
|
|
255
279
|
url,
|
|
256
|
-
data=
|
|
280
|
+
data=data,
|
|
257
281
|
files={"package": package},
|
|
258
282
|
headers={"Authorization": f"Bearer {token}"},
|
|
259
283
|
)
|
|
@@ -270,7 +294,7 @@ def install(
|
|
|
270
294
|
package_name := _get_name_from_metadata(host, token, built_package_path)
|
|
271
295
|
):
|
|
272
296
|
print(f"Plugin {package_name} already exists, updating instead...")
|
|
273
|
-
update(package_name, built_package_path, is_enabled=True, host=host)
|
|
297
|
+
update(package_name, built_package_path, is_enabled=True, secrets=secrets, host=host)
|
|
274
298
|
else:
|
|
275
299
|
print(f"Status code {r.status_code}: {r.text}")
|
|
276
300
|
raise typer.Exit(1)
|
|
@@ -427,6 +451,58 @@ def list(
|
|
|
427
451
|
raise typer.Exit(1)
|
|
428
452
|
|
|
429
453
|
|
|
454
|
+
def list_secrets(
|
|
455
|
+
plugin: str = typer.Argument(..., help="Plugin name to list secrets for"),
|
|
456
|
+
host: str | None = typer.Option(
|
|
457
|
+
callback=get_default_host,
|
|
458
|
+
help="Canvas instance to connect to",
|
|
459
|
+
default=None,
|
|
460
|
+
),
|
|
461
|
+
) -> None:
|
|
462
|
+
"""List all secrets from a plugin on a Canvas instance."""
|
|
463
|
+
if not host:
|
|
464
|
+
raise typer.BadParameter("Please specify a host or add one to the configuration file")
|
|
465
|
+
|
|
466
|
+
url = plugin_url(host, plugin, "metadata")
|
|
467
|
+
|
|
468
|
+
token = get_or_request_api_token(host)
|
|
469
|
+
|
|
470
|
+
try:
|
|
471
|
+
r = requests.get(
|
|
472
|
+
url,
|
|
473
|
+
headers={"Authorization": f"Bearer {token}"},
|
|
474
|
+
)
|
|
475
|
+
except requests.exceptions.RequestException:
|
|
476
|
+
print(f"Failed to connect to {host}")
|
|
477
|
+
raise typer.Exit(1) from None
|
|
478
|
+
|
|
479
|
+
if r.status_code == requests.codes.ok:
|
|
480
|
+
secrets = r.json().get("secrets", [])
|
|
481
|
+
|
|
482
|
+
if secrets:
|
|
483
|
+
pprint(secrets)
|
|
484
|
+
else:
|
|
485
|
+
print("No secrets configured.")
|
|
486
|
+
else:
|
|
487
|
+
print(f"Status code {r.status_code}: {r.text}")
|
|
488
|
+
raise typer.Exit(1)
|
|
489
|
+
|
|
490
|
+
|
|
491
|
+
def set_secrets(
|
|
492
|
+
plugin: str = typer.Argument(..., help="Plugin name to configure"),
|
|
493
|
+
host: str | None = typer.Option(
|
|
494
|
+
callback=get_default_host,
|
|
495
|
+
help="Canvas instance to connect to",
|
|
496
|
+
default=None,
|
|
497
|
+
),
|
|
498
|
+
secrets: builtins.list[str] = typer.Argument(
|
|
499
|
+
..., callback=parse_secrets, help="Secrets to set, e.g. Key=value"
|
|
500
|
+
),
|
|
501
|
+
) -> None:
|
|
502
|
+
"""Configure plugin secrets on a Canvas instance."""
|
|
503
|
+
update(name=plugin, package_path=None, secrets=secrets, host=host, is_enabled=None)
|
|
504
|
+
|
|
505
|
+
|
|
430
506
|
def validate_manifest(
|
|
431
507
|
plugin_name: Path = typer.Argument(..., help="Path to plugin to validate"),
|
|
432
508
|
) -> None:
|
|
@@ -473,6 +549,9 @@ def update(
|
|
|
473
549
|
is_enabled: bool | None = typer.Option(
|
|
474
550
|
None, "--enable/--disable", show_default=False, help="Enable/disable the plugin"
|
|
475
551
|
),
|
|
552
|
+
secrets: builtins.list[str] = typer.Option(
|
|
553
|
+
[], "--secret", callback=parse_secrets, help="Secrets to set, e.g. Key=value"
|
|
554
|
+
),
|
|
476
555
|
host: str | None = typer.Option(
|
|
477
556
|
callback=get_default_host,
|
|
478
557
|
help="Canvas instance to connect to",
|
|
@@ -488,12 +567,27 @@ def update(
|
|
|
488
567
|
|
|
489
568
|
token = get_or_request_api_token(host)
|
|
490
569
|
|
|
491
|
-
|
|
570
|
+
encoded_secrets = []
|
|
571
|
+
for pair in secrets:
|
|
572
|
+
encoded = base64.b64encode(pair.encode()).decode()
|
|
573
|
+
encoded_secrets.append(("secret", encoded))
|
|
574
|
+
|
|
575
|
+
args = [
|
|
576
|
+
*((f"is_enabled={is_enabled}",) if is_enabled is not None else ()),
|
|
577
|
+
*((f"package_path={package_path}",) if package_path is not None else ()),
|
|
578
|
+
*((f"secrets={','.join([s.split('=')[0] for s in secrets])}",) if secrets else ()),
|
|
579
|
+
]
|
|
580
|
+
|
|
581
|
+
print(f"Updating plugin {name} from {host}" + (f" with {', '.join(args)}" if args else ""))
|
|
492
582
|
|
|
493
583
|
url = plugin_url(host, name)
|
|
494
584
|
|
|
495
585
|
try:
|
|
496
|
-
data =
|
|
586
|
+
data = (
|
|
587
|
+
[("is_enabled", is_enabled)] + encoded_secrets
|
|
588
|
+
if is_enabled is not None
|
|
589
|
+
else encoded_secrets
|
|
590
|
+
)
|
|
497
591
|
headers = {"Authorization": f"Bearer {token}"}
|
|
498
592
|
|
|
499
593
|
if package_path:
|
|
@@ -515,7 +609,10 @@ def update(
|
|
|
515
609
|
raise typer.Exit(1) from None
|
|
516
610
|
|
|
517
611
|
if r.status_code == requests.codes.ok:
|
|
518
|
-
|
|
612
|
+
if package_path:
|
|
613
|
+
print("New plugin version uploaded! Check logs for more details.")
|
|
614
|
+
elif secrets:
|
|
615
|
+
print("Plugin secrets successfully updated.")
|
|
519
616
|
|
|
520
617
|
else:
|
|
521
618
|
print(f"Status code {r.status_code}: {r.text}")
|
|
@@ -29,6 +29,16 @@ app.command(
|
|
|
29
29
|
app.command(short_help="Run the specified plugins for local development.")(run_plugins)
|
|
30
30
|
app.command(short_help="Run the specified plugin for local development.")(run_plugin)
|
|
31
31
|
|
|
32
|
+
# Config app
|
|
33
|
+
config_app = typer.Typer(help="Manage plugin secrets.", rich_markup_mode=None, add_completion=False)
|
|
34
|
+
app.add_typer(config_app, name="config")
|
|
35
|
+
config_app.command(name="list", short_help="List plugin secrets on a Canvas instance.")(
|
|
36
|
+
plugin.list_secrets
|
|
37
|
+
)
|
|
38
|
+
config_app.command(name="set", short_help="Set plugin secrets on a Canvas instance.")(
|
|
39
|
+
plugin.set_secrets
|
|
40
|
+
)
|
|
41
|
+
|
|
32
42
|
# Our current version
|
|
33
43
|
__version__ = importlib.metadata.version("canvas")
|
|
34
44
|
|
|
@@ -731,7 +731,14 @@ def main(specified_plugin_paths: list[str] | None = None) -> None:
|
|
|
731
731
|
port = "50051"
|
|
732
732
|
|
|
733
733
|
executor = ThreadPoolExecutor(max_workers=settings.PLUGIN_RUNNER_MAX_WORKERS)
|
|
734
|
-
server = grpc.server(
|
|
734
|
+
server = grpc.server(
|
|
735
|
+
thread_pool=executor,
|
|
736
|
+
options=(
|
|
737
|
+
# set max message lengths to 64mb
|
|
738
|
+
("grpc.max_receive_message_length", 64 * 1024 * 1024),
|
|
739
|
+
("grpc.max_send_message_length", 64 * 1024 * 1024),
|
|
740
|
+
),
|
|
741
|
+
)
|
|
735
742
|
server.add_insecure_port("127.0.0.1:" + port)
|
|
736
743
|
|
|
737
744
|
add_PluginRunnerServicer_to_server(PluginRunner(), server)
|
|
@@ -6,8 +6,8 @@ requires = ["hatchling"]
|
|
|
6
6
|
dev = [
|
|
7
7
|
"grpcio-tools>=1.60.1,<2",
|
|
8
8
|
"httpretty>=1.1.4",
|
|
9
|
-
"mypy",
|
|
10
|
-
"pre-commit",
|
|
9
|
+
"mypy>=1.17.0,<2",
|
|
10
|
+
"pre-commit>=4.3.0,<5",
|
|
11
11
|
"psutil>=7.0.0",
|
|
12
12
|
"pytest",
|
|
13
13
|
"pytest-cov",
|
|
@@ -57,7 +57,7 @@ license = "MIT"
|
|
|
57
57
|
name = "canvas"
|
|
58
58
|
readme = "README.md"
|
|
59
59
|
requires-python = ">=3.11,<3.13"
|
|
60
|
-
version = "0.
|
|
60
|
+
version = "0.57.1"
|
|
61
61
|
|
|
62
62
|
[project.scripts]
|
|
63
63
|
canvas = "canvas_cli.main:app"
|
|
@@ -181,6 +181,7 @@ version_source = "tag"
|
|
|
181
181
|
version_toml = ["pyproject.toml:project.version"]
|
|
182
182
|
|
|
183
183
|
[tool.uv]
|
|
184
|
+
required-version = "~=0.8.0"
|
|
184
185
|
|
|
185
186
|
[[tool.uv.index]]
|
|
186
187
|
default = true
|
|
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.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CANCELED.ndjson
RENAMED
|
File without changes
|
{canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CHECKED_IN.ndjson
RENAMED
|
File without changes
|
{canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_CREATED.ndjson
RENAMED
|
File without changes
|
{canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_NO_SHOWED.ndjson
RENAMED
|
File without changes
|
{canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_RESCHEDULED.ndjson
RENAMED
|
File without changes
|
{canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/APPOINTMENT_RESTORED.ndjson
RENAMED
|
File without changes
|
{canvas-0.56.0 → canvas-0.57.1}/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.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/BILLING_LINE_ITEM_CREATED.ndjson
RENAMED
|
File without changes
|
{canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/BILLING_LINE_ITEM_UPDATED.ndjson
RENAMED
|
File without changes
|
{canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/CONDITION_ASSESSED.ndjson
RENAMED
|
File without changes
|
{canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/CONDITION_CREATED.ndjson
RENAMED
|
File without changes
|
{canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/CONDITION_UPDATED.ndjson
RENAMED
|
File without changes
|
|
File without changes
|
{canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/ENCOUNTER_CREATED.ndjson
RENAMED
|
File without changes
|
{canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/ENCOUNTER_UPDATED.ndjson
RENAMED
|
File without changes
|
{canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_CREATED.ndjson
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/IMMUNIZATION_UPDATED.ndjson
RENAMED
|
File without changes
|
{canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/INTERVIEW_CREATED.ndjson
RENAMED
|
File without changes
|
{canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/INTERVIEW_UPDATED.ndjson
RENAMED
|
File without changes
|
{canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/LAB_ORDER_CREATED.ndjson
RENAMED
|
File without changes
|
{canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/LAB_ORDER_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
|
|
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
|
|
File without changes
|
|
File without changes
|
{canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/SIMPLE_API_REQUEST.ndjson
RENAMED
|
File without changes
|
{canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/TASK_COMMENT_CREATED.ndjson
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/VITAL_SIGN_CREATED.ndjson
RENAMED
|
File without changes
|
{canvas-0.56.0 → canvas-0.57.1}/canvas_cli/apps/emit/event_fixtures/VITAL_SIGN_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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|