canvas 0.27.0__py3-none-any.whl → 0.28.0__py3-none-any.whl

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.

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: canvas
3
- Version: 0.27.0
3
+ Version: 0.28.0
4
4
  Summary: SDK to customize event-driven actions in your Canvas instance
5
5
  Author-email: Canvas Team <engineering@canvasmedical.com>
6
6
  License-Expression: MIT
@@ -74,7 +74,7 @@ canvas_cli/apps/plugin/tests.py,sha256=SsYeYY25ly9TMn-nkJEZjLaPCyFbT4vs1sN_FnQbJ
74
74
  canvas_cli/apps/run_plugins/__init__.py,sha256=iAMgX_6D3CdjQodGx_azwhSjouaxquOm8Z8QVXnlTFE,117
75
75
  canvas_cli/apps/run_plugins/run_plugins.py,sha256=qsf6-UhFAZpIL-1C50fzSoIwXMsZISxg2fxzM46UHTA,384
76
76
  canvas_cli/templates/plugins/application/cookiecutter.json,sha256=cI4Wpj68TkKeBP3P16PrjKacTHzsTIpl_rDdzyUpwz4,129
77
- canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/CANVAS_MANIFEST.json,sha256=rIB41kNzzRV9QyX1ssHNi4n4wXyuXeBy2gVG83hxsOA,908
77
+ canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/CANVAS_MANIFEST.json,sha256=-mfqhpljpF4eE8g05pIEnZMt_bDUdhgIBtuQd-devv8,945
78
78
  canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/README.md,sha256=3QKoJQq3YmdplGnDOBMsLCJ3Ya1_aKjoz-QiWc4QfjA,291
79
79
  canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/applications/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
80
  canvas_cli/templates/plugins/application/{{ cookiecutter.__project_slug }}/applications/my_application.py,sha256=rTUUycVOZEj5B4CoBqWMl9T4xPIyTqxsWGzXfAd6huY,584
@@ -95,7 +95,7 @@ canvas_cli/utils/urls/__init__.py,sha256=08hlrQhQ1pKBjlIRaC0j53IkgK723jfK8-j3djv
95
95
  canvas_cli/utils/urls/tests.py,sha256=opXDF2i3lXTdsKJ7ywIRzWDDzZ5KAO0JbGIR3hbJdoE,407
96
96
  canvas_cli/utils/urls/urls.py,sha256=KwWTh5ERrEsZEvdBrZpZB71xtyWkDuglpXUbycWmBOo,798
97
97
  canvas_cli/utils/validators/__init__.py,sha256=rBvSR2O1hWkNAnUBdcr-zUkmqT796_A61b9pnvEhwrM,113
98
- canvas_cli/utils/validators/manifest_schema.py,sha256=tFA2mrj82hyUQFX1Enoookg3t0bIIBXdbeos1A8pyjk,5296
98
+ canvas_cli/utils/validators/manifest_schema.py,sha256=Kk6mXXpFvDNsM4ad6e2TKiFI_XaGsS8ILQvr0pOC1ac,5465
99
99
  canvas_cli/utils/validators/tests.py,sha256=KhaOdbxGUK2QwL2KnycAJJkqclYQSXF7CKg-scSf0DU,1259
100
100
  canvas_cli/utils/validators/validators.py,sha256=lrUBQ0sF7seTe_pNGsNgASdr2BGp6g-Qui58V4H9qfQ,1598
101
101
  canvas_generated/messages/effects_pb2.py,sha256=Tj7e6cAf-00k7PuUcHD-MVD95s974rU0xGV1YJg9e7k,11449
@@ -132,7 +132,7 @@ canvas_sdk/commands/commands/lab_order.py,sha256=Qk79qlW85DEvJuy_r8al_UkpLMGAk-r
132
132
  canvas_sdk/commands/commands/medical_history.py,sha256=gedoC6gb56A13Rcw5vvCRSq_N8afAob-l1du6d6bMaI,593
133
133
  canvas_sdk/commands/commands/medication_statement.py,sha256=fXHNuBz8sTkJFET7-s_T_DXIcVlayUdQWdpxe_Cu7mA,853
134
134
  canvas_sdk/commands/commands/past_surgical_history.py,sha256=bnZVWqmUu9TA8qoe1_a7g_5F7Mm0-0oH9gStxsC89Mk,515
135
- canvas_sdk/commands/commands/perform.py,sha256=zRitfNYKoc6lTWUYow8cCHIF2xw6MQCf302dQ5SMLXs,311
135
+ canvas_sdk/commands/commands/perform.py,sha256=mxrH32zZKkJ3D8QBhs25hSEnyCxiN6I7y3iZ-i0snmM,325
136
136
  canvas_sdk/commands/commands/plan.py,sha256=KmTH0Jh4jDrkKz0PONveBgr3tGdCTjI9fAJp7WzkCs4,266
137
137
  canvas_sdk/commands/commands/prescribe.py,sha256=y16U4gIT2BgqS5DU-9usefOISGMESLxmSYpw93CGXpU,1752
138
138
  canvas_sdk/commands/commands/reason_for_visit.py,sha256=uXIXlDyg2VMFswIVwM5-YtCFUWgyi332tLRqxvxHcDk,1943
@@ -164,7 +164,7 @@ canvas_sdk/effects/patient_chart_summary_configuration.py,sha256=_Gx7UIp4NLaSYYL
164
164
  canvas_sdk/effects/patient_portal_menu_configuration.py,sha256=po3BlmDQGkGnQovZ8AS3yj13Fl1Fz-ZVIybhq7e0utM,966
165
165
  canvas_sdk/effects/patient_profile_configuration.py,sha256=ZXBx_PnJP-KKRIwuDI4tS1evuC3_dPoiMz5KfD-QGKw,1304
166
166
  canvas_sdk/effects/questionnaire_result.py,sha256=dXJE6la5aP5xLCnT9iMCOS6PiKu0Zz733Ku2lqa4CnM,816
167
- canvas_sdk/effects/show_button.py,sha256=JnW9nM8S_GUXIOufs-uef3pg0HPDxSbF0l51Wh1Xxgw,715
167
+ canvas_sdk/effects/show_button.py,sha256=nzrvrQBBN8XBwPdf2y489fLmrz8qy0hXypqRDUoRzVo,779
168
168
  canvas_sdk/effects/simple_api.py,sha256=1VmTe9PnlCeEdcY-WfCiV9Vi-rF2n41MLGy1GjAF8tM,2344
169
169
  canvas_sdk/effects/banner_alert/__init__.py,sha256=PcMmOjLHP_MOZiP8157JkTdcO4mZTn-kFcRylOB9AK0,209
170
170
  canvas_sdk/effects/banner_alert/add_banner_alert.py,sha256=W4Fv9IHGCWvVtFiH3s68JBRpUb8b3xsncGt2WfgMFc0,1681
@@ -188,7 +188,7 @@ canvas_sdk/effects/widgets/portal_widget.py,sha256=vH2HkFZfwIEHSKDoUpNnYLgVJ5nX9
188
188
  canvas_sdk/events/__init__.py,sha256=6Yr0Ot1yWzu_ce2ycOJJ9jdRxo0QOsSkPjNCTrjds8c,237
189
189
  canvas_sdk/events/base.py,sha256=MqrCF_Am-V7pGkNvtQwos6j94_vx7YvsRbNd0piO4xE,1325
190
190
  canvas_sdk/handlers/__init__.py,sha256=GeE8w0ev-ThuLJjcgb49OsXM58VmcB16ErU13tE_9tY,77
191
- canvas_sdk/handlers/action_button.py,sha256=lx2CFG_uMIOMm23Ua3H3q_mUToF5Xr6zHi04sH_1u68,3451
191
+ canvas_sdk/handlers/action_button.py,sha256=QCTMj-WufD51cXXicCX8N0eUfvx6VkfDaRUitBhZ90A,3581
192
192
  canvas_sdk/handlers/application.py,sha256=6Y18g65ae1ws7-llyKzyWipOg9Y8zVEoV7Y_0E2XcQo,919
193
193
  canvas_sdk/handlers/base.py,sha256=CpUIDtnZJCJTHytXuz_x43NU8Zy1ejorqfGf0e2H2oY,1422
194
194
  canvas_sdk/handlers/cron_task.py,sha256=zShv4qGUmpUjG3HrXVqzMir9kZyqo4nDT3ETqNP13sk,954
@@ -220,10 +220,11 @@ canvas_sdk/utils/tests.py,sha256=0Buh_7PvDU1D081_rSJoYSJwIHMOBbL0gtGS3bSKe7s,228
220
220
  canvas_sdk/v1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
221
221
  canvas_sdk/v1/apps.py,sha256=z5HVdICPLYrbWM8ZXK89Xu7RWaXuKU4AFRrPAZGz0C4,151
222
222
  canvas_sdk/v1/models.py,sha256=q9Sofiu9JDH5g04H8NHYIqAtBYxH4KjnwOldoKsY9Lk,206
223
- canvas_sdk/v1/data/__init__.py,sha256=hCBdaB5IrpIeswI-DehqXb-l72RqeI2aCfmbWskX9TI,3164
223
+ canvas_sdk/v1/data/__init__.py,sha256=ithLHfk97LqK7hZaz3noVGacP4N_ZKyGsvgY7BRn_Z4,3221
224
224
  canvas_sdk/v1/data/allergy_intolerance.py,sha256=cm29fCOFiHHHVyff9kreWFUPZM--Nydw3a0FSbWh5-w,2303
225
225
  canvas_sdk/v1/data/appointment.py,sha256=8ApeYiLo4OZHgF5LiTFpJYzwBa96fDyBj6qtKzeAdec,2606
226
226
  canvas_sdk/v1/data/assessment.py,sha256=MYUrE6xtOVYSRiMuQKMdHuWFvuGx62w4SZJpyFskQ2U,1485
227
+ canvas_sdk/v1/data/banner_alert.py,sha256=NMbFe8CZTqZ9A2sxJmWeS774p8YVrrnB0-wp4Tc8_Xw,782
227
228
  canvas_sdk/v1/data/base.py,sha256=_UnCf0SP_HC9FYEzB1BsJ3QcKqXNdCR90Dtx1Gggcf4,6328
228
229
  canvas_sdk/v1/data/billing.py,sha256=dPQb9vj2mIhlU5cSfmfTkXw0NRDMmueJojyRNrgx1no,2586
229
230
  canvas_sdk/v1/data/care_team.py,sha256=qy9x-FZ6LI_GrXnohS5izc6e-SANhV50eh_bilaVI4Y,1818
@@ -234,7 +235,7 @@ canvas_sdk/v1/data/coverage.py,sha256=buz0VwJvyKJcX-EallQweA-5P0UxSjt6QLg3f8sMHE
234
235
  canvas_sdk/v1/data/detected_issue.py,sha256=hvzUIjLx2unA_GNdW1oJcsLRx8jIEOKHWP8j_p88s4k,1685
235
236
  canvas_sdk/v1/data/device.py,sha256=RZ200OCaBRGwdERvx9eFOPTHg56r62Hqp9uJeS2giOo,1613
236
237
  canvas_sdk/v1/data/imaging.py,sha256=2caHmSQmt1zUx5q_AoydkuUqtkQo-tdMk5B_0suSlWw,4297
237
- canvas_sdk/v1/data/lab.py,sha256=OJuNoGQuUw2XgfblLr-FADiEubsqyUshPsCsP4UaR-g,12428
238
+ canvas_sdk/v1/data/lab.py,sha256=bn5EygcbTY3GSbT9TDnhHj4oWCc0xKz3kwBKzDBDPRw,12420
238
239
  canvas_sdk/v1/data/medication.py,sha256=o8w6PxIsitnM8EvaKX3dq99sMB43E8RBp_Y1kmaBtgE,2257
239
240
  canvas_sdk/v1/data/note.py,sha256=6uWBeUXmgWyPDVZUIg_vxllucmjwTR1rV3UhTazRfSA,6672
240
241
  canvas_sdk/v1/data/observation.py,sha256=0hS1F40CURuDGOY52J3oi5YOeTd9LlOKL4F7lH1XToE,3782
@@ -244,7 +245,7 @@ canvas_sdk/v1/data/practicelocation.py,sha256=6W2NzwiK0xXlzXfDom_Wm3ScERd8W6mw8o
244
245
  canvas_sdk/v1/data/protocol_override.py,sha256=o-GK7-HkOsyYDLxUyn9BwlZM-13QNuGGNrey5EF44QI,2105
245
246
  canvas_sdk/v1/data/questionnaire.py,sha256=1Vo5QUsOLYbZiQ64QFpgY7Mj6wY8vsV8f9uPiFl0wac,7031
246
247
  canvas_sdk/v1/data/reason_for_visit.py,sha256=9rCmvbJZ4dKUUDzqFX1uxlMa_qO57KcRntV3re8q_8g,608
247
- canvas_sdk/v1/data/staff.py,sha256=HnHM8LJGCJELt562JCcQ8-EECk6CVdP5wHjjS6GfaBY,3477
248
+ canvas_sdk/v1/data/staff.py,sha256=AlpjMv_l8chUox1l7TXJYPI-g0rQX2_8boGX3yIEKic,3407
248
249
  canvas_sdk/v1/data/task.py,sha256=5KNn88APPNOHEk4s1ZJRBBav8-AEQTUH039Vio_ZtAk,3471
249
250
  canvas_sdk/v1/data/team.py,sha256=FlkZsHSSHKtvmlB1XuGPUmC7wl8iMbOPi_fl9sYw-aU,2801
250
251
  canvas_sdk/v1/data/user.py,sha256=XwhYTBuPHWdDc9afaZKB2AA-nHtlT3p7TOvUQo0m20Q,276
@@ -355,7 +356,7 @@ protobufs/canvas_generated/messages/plugins.proto,sha256=oNainUPWFYQjgCX7bJEPI9_
355
356
  protobufs/canvas_generated/services/plugin_runner.proto,sha256=doadBKn5k4xAtOgR-q_pEvW4yzxpUaHNOowMG6CL5GY,304
356
357
  pubsub/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
357
358
  pubsub/pubsub.py,sha256=pyTW0JU8mtaqiAV6g6xjZwel1CVy2EonPMU-_vkmhUM,1044
358
- canvas-0.27.0.dist-info/METADATA,sha256=RKBaiUhbwwjO7UMz3ppAUutlsM42Ep8q9HxT6qEgxhM,4375
359
- canvas-0.27.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
360
- canvas-0.27.0.dist-info/entry_points.txt,sha256=0Vs_9GmTVUNniH6eDBlRPgofmADMV4BES6Ao26M4AbM,47
361
- canvas-0.27.0.dist-info/RECORD,,
359
+ canvas-0.28.0.dist-info/METADATA,sha256=ayj8ggJXgMarDIk-Mh0fGZYiNRYlioEp9vu5ZPevWVY,4375
360
+ canvas-0.28.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
361
+ canvas-0.28.0.dist-info/entry_points.txt,sha256=0Vs_9GmTVUNniH6eDBlRPgofmADMV4BES6Ao26M4AbM,47
362
+ canvas-0.28.0.dist-info/RECORD,,
@@ -3,10 +3,12 @@
3
3
  "plugin_version": "0.0.1",
4
4
  "name": "{{ cookiecutter.__project_slug }}",
5
5
  "description": "Edit the description in CANVAS_MANIFEST.json",
6
- "origins": {
7
- "urls": ["https://www.canvasmedical.com/extensions"],
8
- "scripts": []
9
- },
6
+ "url_permissions": [
7
+ {
8
+ "url": "https://www.canvasmedical.com/extensions",
9
+ "permissions": []
10
+ }
11
+ ],
10
12
  "components": {
11
13
  "applications": [
12
14
  {
@@ -57,6 +57,7 @@ manifest_schema = {
57
57
  "readme",
58
58
  ],
59
59
  "additionalProperties": False,
60
+ "allOf": [{"not": {"required": ["url_permissions", "origins"]}}],
60
61
  "$defs": {
61
62
  "origins": {
62
63
  "type": "object",
@@ -69,6 +70,7 @@ manifest_schema = {
69
70
  "type": "array",
70
71
  "items": {
71
72
  "type": "object",
73
+ "additionalProperties": False,
72
74
  "properties": {
73
75
  "url": {"type": "string"},
74
76
  "permissions": {
@@ -83,6 +85,7 @@ manifest_schema = {
83
85
  },
84
86
  },
85
87
  },
88
+ "required": ["url", "permissions"],
86
89
  },
87
90
  },
88
91
  "component": {
@@ -8,5 +8,5 @@ class PerformCommand(BaseCommand):
8
8
  key = "perform"
9
9
  commit_required_fields = ("cpt_code",)
10
10
 
11
- cpt_code: str
11
+ cpt_code: str | None = None
12
12
  notes: str | None = None
@@ -16,11 +16,12 @@ class ShowButtonEffect(_BaseEffect):
16
16
 
17
17
  key: str = Field(min_length=1)
18
18
  title: str = Field(min_length=1)
19
+ priority: int = Field(default=0)
19
20
 
20
21
  @property
21
22
  def values(self) -> dict[str, Any]:
22
23
  """The ShowButtonEffect's values."""
23
- return {"key": self.key, "title": self.title}
24
+ return {"key": self.key, "title": self.title, "priority": self.priority}
24
25
 
25
26
  @property
26
27
  def effect_payload(self) -> dict[str, Any]:
@@ -48,6 +48,7 @@ class ActionButton(BaseHandler):
48
48
  BUTTON_TITLE: str = ""
49
49
  BUTTON_KEY: str = ""
50
50
  BUTTON_LOCATION: ButtonLocation
51
+ PRIORITY: int = 0
51
52
 
52
53
  @abstractmethod
53
54
  def handle(self) -> list[Effect]:
@@ -68,7 +69,11 @@ class ActionButton(BaseHandler):
68
69
  if show_button_event_match:
69
70
  location = show_button_event_match.group(1)
70
71
  if self.ButtonLocation[location] == self.BUTTON_LOCATION and self.visible():
71
- return [ShowButtonEffect(key=self.BUTTON_KEY, title=self.BUTTON_TITLE).apply()]
72
+ return [
73
+ ShowButtonEffect(
74
+ key=self.BUTTON_KEY, title=self.BUTTON_TITLE, priority=self.PRIORITY
75
+ ).apply()
76
+ ]
72
77
  elif self.context["key"] == self.BUTTON_KEY:
73
78
  return self.handle()
74
79
 
@@ -1,6 +1,7 @@
1
1
  from .allergy_intolerance import AllergyIntolerance, AllergyIntoleranceCoding
2
2
  from .appointment import Appointment, AppointmentExternalIdentifier
3
3
  from .assessment import Assessment
4
+ from .banner_alert import BannerAlert
4
5
  from .billing import BillingLineItem, BillingLineItemModifier
5
6
  from .care_team import CareTeamMembership, CareTeamRole
6
7
  from .command import Command
@@ -59,6 +60,7 @@ __all__ = [
59
60
  "AllergyIntolerance",
60
61
  "AllergyIntoleranceCoding",
61
62
  "Assessment",
63
+ "BannerAlert",
62
64
  "BillingLineItem",
63
65
  "BillingLineItemModifier",
64
66
  "CanvasUser",
@@ -0,0 +1,27 @@
1
+ from django.contrib.postgres.fields import ArrayField
2
+ from django.db import models
3
+
4
+
5
+ class BannerAlert(models.Model):
6
+ """BannerAlert."""
7
+
8
+ class Meta:
9
+ managed = False
10
+ db_table = "canvas_sdk_data_api_banneralert_001"
11
+
12
+ dbid = models.BigIntegerField(db_column="dbid", primary_key=True)
13
+ created = models.DateTimeField()
14
+ modified = models.DateTimeField()
15
+ patient = models.ForeignKey(
16
+ "v1.Patient",
17
+ on_delete=models.DO_NOTHING,
18
+ related_name="banner_alerts",
19
+ null=True,
20
+ )
21
+ plugin_name = models.CharField()
22
+ key = models.CharField()
23
+ narrative = models.CharField()
24
+ placement = ArrayField(models.CharField())
25
+ intent = models.CharField()
26
+ href = models.CharField()
27
+ status = models.CharField()
canvas_sdk/v1/data/lab.py CHANGED
@@ -10,6 +10,7 @@ from canvas_sdk.v1.data.base import (
10
10
  TimeframeLookupQuerySetMixin,
11
11
  ValueSetLookupQuerySet,
12
12
  )
13
+ from canvas_sdk.v1.data.staff import Staff
13
14
 
14
15
 
15
16
  class LabReportQuerySet(BaseQuerySet, CommittableQuerySetMixin, ForPatientQuerySetMixin):
@@ -213,8 +214,7 @@ class LabOrder(models.Model):
213
214
  courtesy_copy_type = models.CharField(choices=CourtesyCopyType, null=True)
214
215
  courtesy_copy_number = models.CharField()
215
216
  courtesy_copy_text = models.CharField()
216
- # TODO - uncomment when Staff model is added
217
- # ordering_provider = models.ForeignKey(Staff, on_delete=models.DO_NOTHING, null=True)
217
+ ordering_provider = models.ForeignKey(Staff, on_delete=models.DO_NOTHING, null=True)
218
218
  parent_order = models.ForeignKey("LabOrder", on_delete=models.DO_NOTHING, null=True)
219
219
  healthgorilla_id = models.CharField()
220
220
  manual_processing_status = models.CharField(choices=ManualProcessingStatus)
@@ -46,10 +46,9 @@ class Staff(models.Model):
46
46
  cultural_ethnicity_terms = ArrayField(models.CharField())
47
47
  last_known_timezone = TimeZoneField(null=True)
48
48
  active = models.BooleanField()
49
- # TODO - uncomment when PracticeLocation field is developed
50
- # primary_practice_location = models.ForeignKey(
51
- # 'v1.PracticeLocation', on_delete=models.DO_NOTHING, null=True
52
- # )
49
+ primary_practice_location = models.ForeignKey(
50
+ "v1.PracticeLocation", on_delete=models.DO_NOTHING, null=True
51
+ )
53
52
  npi_number = models.CharField()
54
53
  nadean_number = models.CharField()
55
54
  group_npi_number = models.CharField()