canvas 0.1.15__py3-none-any.whl → 0.2.5__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.
- {canvas-0.1.15.dist-info → canvas-0.2.5.dist-info}/METADATA +4 -1
- {canvas-0.1.15.dist-info → canvas-0.2.5.dist-info}/RECORD +12 -16
- canvas_generated/messages/effects_pb2.py +2 -2
- canvas_generated/messages/effects_pb2.pyi +2 -0
- canvas_generated/messages/events_pb2.py +2 -2
- canvas_generated/messages/events_pb2.pyi +2 -0
- canvas_sdk/data/client.py +82 -0
- canvas_sdk/data/patient.py +1 -21
- canvas_sdk/handlers/base.py +14 -1
- canvas_sdk/protocols/base.py +14 -0
- canvas_generated/data_access_layer/data_access_layer_pb2.py +0 -30
- canvas_generated/data_access_layer/data_access_layer_pb2.pyi +0 -23
- canvas_generated/data_access_layer/data_access_layer_pb2_grpc.py +0 -66
- canvas_sdk/data/data_access_layer_client.py +0 -95
- canvas_sdk/data/exceptions.py +0 -16
- {canvas-0.1.15.dist-info → canvas-0.2.5.dist-info}/WHEEL +0 -0
- {canvas-0.1.15.dist-info → canvas-0.2.5.dist-info}/entry_points.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: canvas
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.5
|
|
4
4
|
Summary: SDK to customize event-driven actions in your Canvas instance
|
|
5
5
|
License: MIT
|
|
6
6
|
Author: Canvas Team
|
|
@@ -12,11 +12,14 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
12
12
|
Classifier: Programming Language :: Python :: 3.12
|
|
13
13
|
Requires-Dist: cookiecutter
|
|
14
14
|
Requires-Dist: cron-converter (>=1.2.1,<2.0.0)
|
|
15
|
+
Requires-Dist: gql[all] (>=3.5.0,<4.0.0)
|
|
15
16
|
Requires-Dist: grpcio (>=1.60.1,<2.0.0)
|
|
16
17
|
Requires-Dist: ipython (>=8.21.0,<9.0.0)
|
|
17
18
|
Requires-Dist: jsonschema (>=4.21.1,<5.0.0)
|
|
18
19
|
Requires-Dist: keyring
|
|
20
|
+
Requires-Dist: protobuf (>=4.25.3,<5.0.0)
|
|
19
21
|
Requires-Dist: pydantic (>=2.6.1,<3.0.0)
|
|
22
|
+
Requires-Dist: pyjwt (==2.4.0)
|
|
20
23
|
Requires-Dist: python-dotenv (>=1.0.1,<2.0.0)
|
|
21
24
|
Requires-Dist: redis (>=5.0.4,<6.0.0)
|
|
22
25
|
Requires-Dist: requests
|
|
@@ -30,14 +30,11 @@ canvas_cli/utils/validators/__init__.py,sha256=rBvSR2O1hWkNAnUBdcr-zUkmqT796_A61
|
|
|
30
30
|
canvas_cli/utils/validators/manifest_schema.py,sha256=SIMpr_vTV8dtkO9cjsRnZZtRm5tgGkPR6QewTG8CztI,3117
|
|
31
31
|
canvas_cli/utils/validators/tests.py,sha256=cZHLSx7oteOfLOoU1tXGvw88n6itcvUT2B3ZBg-bmEY,1206
|
|
32
32
|
canvas_cli/utils/validators/validators.py,sha256=RKDKxIvZ1IuCPVuhQ1KHdpwu7aewAqT9ZX-nA-LZDdg,1614
|
|
33
|
-
canvas_generated/
|
|
34
|
-
canvas_generated/
|
|
35
|
-
canvas_generated/data_access_layer/data_access_layer_pb2_grpc.py,sha256=nmmH2hPYLcaAVOK_SMgX1ruZmiQGSJ3aRRnxiUVMftc,2828
|
|
36
|
-
canvas_generated/messages/effects_pb2.py,sha256=NX__XT0xZk3G2zchK-BW5huCVtoZ4jBW-F2hcYNK98Q,4376
|
|
37
|
-
canvas_generated/messages/effects_pb2.pyi,sha256=6YkzAOo6xnbWqxvv4gHdz1K6cz52JVQCRejpLVaX2y0,6640
|
|
33
|
+
canvas_generated/messages/effects_pb2.py,sha256=4CYV1H0S7XOrnz1HDwEjHP9HYmh-buxcx7lUlrf7a_k,4436
|
|
34
|
+
canvas_generated/messages/effects_pb2.pyi,sha256=BuOdk-s6c-OP-oAl-sVZFvHOf8vmRPpBSrx2pBrbIC0,6761
|
|
38
35
|
canvas_generated/messages/effects_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
|
39
|
-
canvas_generated/messages/events_pb2.py,sha256=
|
|
40
|
-
canvas_generated/messages/events_pb2.pyi,sha256=
|
|
36
|
+
canvas_generated/messages/events_pb2.py,sha256=NlX-ILX5wIqEThOGMsW5zAPKCBuqW0RH69qJbtqfH0s,13181
|
|
37
|
+
canvas_generated/messages/events_pb2.pyi,sha256=b6YmPkfh8HFGGMdMCnyQwggjizj5VbiJsXV308rBnQo,22246
|
|
41
38
|
canvas_generated/messages/events_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
|
42
39
|
canvas_generated/messages/plugins_pb2.py,sha256=rHXTVHly9zKsA8qoT4cFRGkRKvYt7rPftz4KNT7pEe0,1271
|
|
43
40
|
canvas_generated/messages/plugins_pb2.pyi,sha256=G1seqytP8GlJJh-AL2CJ0VyUNlReEvK61C-Oh8QuGiE,501
|
|
@@ -65,9 +62,8 @@ canvas_sdk/commands/tests/test_utils.py,sha256=008nUdp5UCTyyFXI58KSgIofMt9njEbpX
|
|
|
65
62
|
canvas_sdk/commands/tests/tests.py,sha256=lawX4BKlibIhc04mZJWNsWKSzyVr_fDSrAHIN89pmYo,15613
|
|
66
63
|
canvas_sdk/data/__init__.py,sha256=dmqlcw11-0DCbH2lOebwBCq6njSQ6BDhxygmncUgZRs,28
|
|
67
64
|
canvas_sdk/data/base.py,sha256=XbUctLoEdY8egrPzw_x2Ox41nurubh8sl4Kjbhu8rTE,795
|
|
68
|
-
canvas_sdk/data/
|
|
69
|
-
canvas_sdk/data/
|
|
70
|
-
canvas_sdk/data/patient.py,sha256=k0pmxkPUYYoHzWWtQf6h1__0cn1dy42NRcFsetMxs3M,742
|
|
65
|
+
canvas_sdk/data/client.py,sha256=ZG3vKfxjTWJz3LWgrlU2Cv3wmki2To3bIByQQK72zBs,2104
|
|
66
|
+
canvas_sdk/data/patient.py,sha256=IhJxZoQHJPK2O7d7v0UVUTZ_8FYAXZ_sl2BUVvgsztY,130
|
|
71
67
|
canvas_sdk/data/staff.py,sha256=zmwKZlndqFdwsE3j14DD79MSzM9doIkeqqzToGDBjTs,168
|
|
72
68
|
canvas_sdk/data/task.py,sha256=VeOh45M6tQ0IPwPr03yK6EYa8xox3iJhoRBzqUdcq2k,1756
|
|
73
69
|
canvas_sdk/effects/__init__.py,sha256=oChQi5y_8mK2zDiNMwWYp6CaQX1_zbmwXILPF7iSt-4,69
|
|
@@ -77,10 +73,10 @@ canvas_sdk/effects/banner_alert/remove_banner_alert.py,sha256=j_EvpHHyU5RgFHOxkd
|
|
|
77
73
|
canvas_sdk/effects/base.py,sha256=9Jo8hCCRMhlqSQ7PIBYPRj3M1o4sGcwpmZLBRg4_nUA,712
|
|
78
74
|
canvas_sdk/events/__init__.py,sha256=JGZ-3uf0Luzr4kg5UqduupD4w6B2WVEgQ9WlcoMaPwE,81
|
|
79
75
|
canvas_sdk/handlers/__init__.py,sha256=VVz2_Xyb9720R2MZmSbGPG0T8u2a5u6zSDkWlwiJZv4,49
|
|
80
|
-
canvas_sdk/handlers/base.py,sha256=
|
|
76
|
+
canvas_sdk/handlers/base.py,sha256=7kw95-nYOsphP2_dVoJxBvi2RsuUpwBo5RcKvo924Yw,599
|
|
81
77
|
canvas_sdk/handlers/cron_task.py,sha256=Q4_D3bDKE5hyEpCf0JnGSgZlnLh_g9RSP3oEfIuLJ9Y,945
|
|
82
78
|
canvas_sdk/protocols/__init__.py,sha256=GKtNMsJ5XaNOJUz9adE2_pONLeZqkZIrd9hXAU-jzvU,51
|
|
83
|
-
canvas_sdk/protocols/base.py,sha256=
|
|
79
|
+
canvas_sdk/protocols/base.py,sha256=Tn2PrQrP-idp8qGx6HAVhaal0FEKcf7x31zDPpBAl1s,571
|
|
84
80
|
canvas_sdk/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
85
81
|
canvas_sdk/utils/__init__.py,sha256=sFuhqcWvXb2-33FOuXZgWuUeC5jZL2MDoqjGoQZGwd8,60
|
|
86
82
|
canvas_sdk/utils/http.py,sha256=YOgUFp7FOFhbDwkGhCiD3JLZ342oNZR-qncMxv2qSjw,2159
|
|
@@ -89,7 +85,7 @@ canvas_sdk/utils/tests.py,sha256=t3MScbIfzXkQttMIvj0dRzJlFVS8LFU8WgWRrChM-H0,193
|
|
|
89
85
|
canvas_sdk/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
90
86
|
logger/__init__.py,sha256=sf54RfJ48tCbXm5jTHAea3WWuSH5-AXRHxTNNKVuxgA,60
|
|
91
87
|
logger/logger.py,sha256=u103k5-yP62ifK1Hcp-PDTRrw_vOfLGeC-5raxNmBC0,1428
|
|
92
|
-
canvas-0.
|
|
93
|
-
canvas-0.
|
|
94
|
-
canvas-0.
|
|
95
|
-
canvas-0.
|
|
88
|
+
canvas-0.2.5.dist-info/METADATA,sha256=mfAi7yb4TlXzWgmAAIBZ2HjhDlpxJ_oq4J8FvRokvu0,4366
|
|
89
|
+
canvas-0.2.5.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
90
|
+
canvas-0.2.5.dist-info/entry_points.txt,sha256=VSmSo1IZ3aEfL7enmLmlWSraS_IIkoXNVeyXzgRxFiY,46
|
|
91
|
+
canvas-0.2.5.dist-info/RECORD,,
|
|
@@ -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/effects.proto\x12\x06\x63\x61nvas\"P\n\x06\x45\x66\x66\x65\x63t\x12 \n\x04type\x18\x01 \x01(\x0e\x32\x12.canvas.EffectType\x12\x0f\n\x07payload\x18\x02 \x01(\t\x12\x13\n\x0bplugin_name\x18\x03 \x01(\t*\
|
|
17
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\'canvas_generated/messages/effects.proto\x12\x06\x63\x61nvas\"P\n\x06\x45\x66\x66\x65\x63t\x12 \n\x04type\x18\x01 \x01(\x0e\x32\x12.canvas.EffectType\x12\x0f\n\x07payload\x18\x02 \x01(\t\x12\x13\n\x0bplugin_name\x18\x03 \x01(\t*\x80\x10\n\nEffectType\x12\x12\n\x0eUNKNOWN_EFFECT\x10\x00\x12\x07\n\x03LOG\x10\x01\x12\x14\n\x10\x41\x44\x44_PLAN_COMMAND\x10\x02\x12\x1f\n\x1b\x41UTOCOMPLETE_SEARCH_RESULTS\x10\x03\x12\x14\n\x10\x41\x44\x44_BANNER_ALERT\x10\x04\x12\x17\n\x13REMOVE_BANNER_ALERT\x10\x05\x12\x1c\n\x18ORIGINATE_ASSESS_COMMAND\x10\x06\x12\x17\n\x13\x45\x44IT_ASSESS_COMMAND\x10\x07\x12\x19\n\x15\x44\x45LETE_ASSESS_COMMAND\x10\x08\x12\x19\n\x15\x43OMMIT_ASSESS_COMMAND\x10\t\x12!\n\x1d\x45NTER_IN_ERROR_ASSESS_COMMAND\x10\n\x12\x1e\n\x1aORIGINATE_DIAGNOSE_COMMAND\x10\x0b\x12\x19\n\x15\x45\x44IT_DIAGNOSE_COMMAND\x10\x0c\x12\x1b\n\x17\x44\x45LETE_DIAGNOSE_COMMAND\x10\r\x12\x1b\n\x17\x43OMMIT_DIAGNOSE_COMMAND\x10\x0e\x12#\n\x1f\x45NTER_IN_ERROR_DIAGNOSE_COMMAND\x10\x0f\x12\x1a\n\x16ORIGINATE_GOAL_COMMAND\x10\x10\x12\x15\n\x11\x45\x44IT_GOAL_COMMAND\x10\x11\x12\x17\n\x13\x44\x45LETE_GOAL_COMMAND\x10\x12\x12\x17\n\x13\x43OMMIT_GOAL_COMMAND\x10\x13\x12\x1f\n\x1b\x45NTER_IN_ERROR_GOAL_COMMAND\x10\x14\x12\x19\n\x15ORIGINATE_HPI_COMMAND\x10\x15\x12\x14\n\x10\x45\x44IT_HPI_COMMAND\x10\x16\x12\x16\n\x12\x44\x45LETE_HPI_COMMAND\x10\x17\x12\x16\n\x12\x43OMMIT_HPI_COMMAND\x10\x18\x12\x1e\n\x1a\x45NTER_IN_ERROR_HPI_COMMAND\x10\x19\x12*\n&ORIGINATE_MEDICATION_STATEMENT_COMMAND\x10\x1a\x12%\n!EDIT_MEDICATION_STATEMENT_COMMAND\x10\x1b\x12\'\n#DELETE_MEDICATION_STATEMENT_COMMAND\x10\x1c\x12\'\n#COMMIT_MEDICATION_STATEMENT_COMMAND\x10\x1d\x12/\n+ENTER_IN_ERROR_MEDICATION_STATEMENT_COMMAND\x10\x1e\x12\x1a\n\x16ORIGINATE_PLAN_COMMAND\x10\x1f\x12\x15\n\x11\x45\x44IT_PLAN_COMMAND\x10 \x12\x17\n\x13\x44\x45LETE_PLAN_COMMAND\x10!\x12\x17\n\x13\x43OMMIT_PLAN_COMMAND\x10\"\x12\x1f\n\x1b\x45NTER_IN_ERROR_PLAN_COMMAND\x10#\x12\x1f\n\x1bORIGINATE_PRESCRIBE_COMMAND\x10$\x12\x1a\n\x16\x45\x44IT_PRESCRIBE_COMMAND\x10%\x12\x1c\n\x18\x44\x45LETE_PRESCRIBE_COMMAND\x10&\x12\x1c\n\x18\x43OMMIT_PRESCRIBE_COMMAND\x10\'\x12$\n ENTER_IN_ERROR_PRESCRIBE_COMMAND\x10(\x12#\n\x1fORIGINATE_QUESTIONNAIRE_COMMAND\x10)\x12\x1e\n\x1a\x45\x44IT_QUESTIONNAIRE_COMMAND\x10*\x12 \n\x1c\x44\x45LETE_QUESTIONNAIRE_COMMAND\x10+\x12 \n\x1c\x43OMMIT_QUESTIONNAIRE_COMMAND\x10,\x12(\n$ENTER_IN_ERROR_QUESTIONNAIRE_COMMAND\x10-\x12&\n\"ORIGINATE_REASON_FOR_VISIT_COMMAND\x10.\x12!\n\x1d\x45\x44IT_REASON_FOR_VISIT_COMMAND\x10/\x12#\n\x1f\x44\x45LETE_REASON_FOR_VISIT_COMMAND\x10\x30\x12#\n\x1f\x43OMMIT_REASON_FOR_VISIT_COMMAND\x10\x31\x12+\n\'ENTER_IN_ERROR_REASON_FOR_VISIT_COMMAND\x10\x32\x12%\n!ORIGINATE_STOP_MEDICATION_COMMAND\x10\x33\x12 \n\x1c\x45\x44IT_STOP_MEDICATION_COMMAND\x10\x34\x12\"\n\x1e\x44\x45LETE_STOP_MEDICATION_COMMAND\x10\x35\x12\"\n\x1e\x43OMMIT_STOP_MEDICATION_COMMAND\x10\x36\x12*\n&ENTER_IN_ERROR_STOP_MEDICATION_COMMAND\x10\x37\x12!\n\x1dORIGINATE_UPDATE_GOAL_COMMAND\x10\x38\x12\x1c\n\x18\x45\x44IT_UPDATE_GOAL_COMMAND\x10\x39\x12\x1e\n\x1a\x44\x45LETE_UPDATE_GOAL_COMMAND\x10:\x12\x1e\n\x1a\x43OMMIT_UPDATE_GOAL_COMMAND\x10;\x12&\n\"ENTER_IN_ERROR_UPDATE_GOAL_COMMAND\x10<\x12\x0f\n\x0b\x43REATE_TASK\x10\x64\x12\x0f\n\x0bUPDATE_TASK\x10\x65\x12\x17\n\x13\x43REATE_TASK_COMMENT\x10\x66\x12-\n(ANNOTATE_PATIENT_CHART_CONDITION_RESULTS\x10\xc8\x01\x62\x06proto3')
|
|
18
18
|
|
|
19
19
|
_globals = globals()
|
|
20
20
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -22,7 +22,7 @@ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'canvas_generated.messages.e
|
|
|
22
22
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
23
23
|
DESCRIPTOR._options = None
|
|
24
24
|
_globals['_EFFECTTYPE']._serialized_start=134
|
|
25
|
-
_globals['_EFFECTTYPE']._serialized_end=
|
|
25
|
+
_globals['_EFFECTTYPE']._serialized_end=2182
|
|
26
26
|
_globals['_EFFECT']._serialized_start=51
|
|
27
27
|
_globals['_EFFECT']._serialized_end=131
|
|
28
28
|
# @@protoc_insertion_point(module_scope)
|
|
@@ -71,6 +71,7 @@ class EffectType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
|
|
71
71
|
CREATE_TASK: _ClassVar[EffectType]
|
|
72
72
|
UPDATE_TASK: _ClassVar[EffectType]
|
|
73
73
|
CREATE_TASK_COMMENT: _ClassVar[EffectType]
|
|
74
|
+
ANNOTATE_PATIENT_CHART_CONDITION_RESULTS: _ClassVar[EffectType]
|
|
74
75
|
UNKNOWN_EFFECT: EffectType
|
|
75
76
|
LOG: EffectType
|
|
76
77
|
ADD_PLAN_COMMAND: EffectType
|
|
@@ -135,6 +136,7 @@ ENTER_IN_ERROR_UPDATE_GOAL_COMMAND: EffectType
|
|
|
135
136
|
CREATE_TASK: EffectType
|
|
136
137
|
UPDATE_TASK: EffectType
|
|
137
138
|
CREATE_TASK_COMMENT: EffectType
|
|
139
|
+
ANNOTATE_PATIENT_CHART_CONDITION_RESULTS: EffectType
|
|
138
140
|
|
|
139
141
|
class Effect(_message.Message):
|
|
140
142
|
__slots__ = ("type", "payload", "plugin_name")
|
|
@@ -15,7 +15,7 @@ _sym_db = _symbol_database.Default()
|
|
|
15
15
|
from canvas_generated.messages import effects_pb2 as canvas__generated_dot_messages_dot_effects__pb2
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n&canvas_generated/messages/events.proto\x12\x06\x63\x61nvas\x1a\'canvas_generated/messages/effects.proto\"I\n\x05\x45vent\x12\x1f\n\x04type\x18\x01 \x01(\x0e\x32\x11.canvas.EventType\x12\x0e\n\x06target\x18\x02 \x01(\t\x12\x0f\n\x07\x63ontext\x18\x03 \x01(\t\"A\n\rEventResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1f\n\x07\x65\x66\x66\x65\x63ts\x18\x02 \x03(\x0b\x32\x0e.canvas.Effect*\xc5=\n\tEventType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x1f\n\x1b\x41LLERGY_INTOLERANCE_CREATED\x10\x01\x12\x1f\n\x1b\x41LLERGY_INTOLERANCE_UPDATED\x10\x02\x12\x18\n\x14\x41PPOINTMENT_CANCELED\x10\x04\x12\x1a\n\x16\x41PPOINTMENT_CHECKED_IN\x10\x05\x12\x17\n\x13\x41PPOINTMENT_CREATED\x10\x06\x12\x19\n\x15\x41PPOINTMENT_NO_SHOWED\x10\x07\x12\x1b\n\x17\x41PPOINTMENT_RESCHEDULED\x10\x08\x12\x18\n\x14\x41PPOINTMENT_RESTORED\x10\t\x12\x17\n\x13\x41PPOINTMENT_UPDATED\x10\n\x12\x1d\n\x19\x42ILLING_LINE_ITEM_CREATED\x10\x0b\x12\x1d\n\x19\x42ILLING_LINE_ITEM_UPDATED\x10\x0c\x12\x16\n\x12\x43ONDITION_ASSESSED\x10\r\x12\x15\n\x11\x43ONDITION_CREATED\x10\x0e\x12\x16\n\x12\x43ONDITION_RESOLVED\x10\x0f\x12\x15\n\x11\x43ONDITION_UPDATED\x10\x10\x12\x13\n\x0f\x43ONSENT_CREATED\x10\x11\x12\x13\n\x0f\x43ONSENT_DELETED\x10\x12\x12\x13\n\x0f\x43ONSENT_UPDATED\x10\x13\x12\x14\n\x10\x43OVERAGE_CREATED\x10\x14\x12\x14\n\x10\x43OVERAGE_UPDATED\x10\x15\x12\x15\n\x11\x45NCOUNTER_CREATED\x10\x16\x12\x15\n\x11\x45NCOUNTER_UPDATED\x10\x17\x12\x1a\n\x16IMAGING_REPORT_CREATED\x10\x1a\x12\x1a\n\x16IMAGING_REPORT_UPDATED\x10\x1b\x12\x18\n\x14IMMUNIZATION_CREATED\x10\x1c\x12\"\n\x1eIMMUNIZATION_STATEMENT_CREATED\x10\x1d\x12\"\n\x1eIMMUNIZATION_STATEMENT_UPDATED\x10\x1e\x12\x18\n\x14IMMUNIZATION_UPDATED\x10\x1f\x12\x17\n\x13INSTRUCTION_CREATED\x10 \x12\x17\n\x13INSTRUCTION_UPDATED\x10!\x12\x15\n\x11INTERVIEW_CREATED\x10\"\x12\x15\n\x11INTERVIEW_UPDATED\x10#\x12\x15\n\x11LAB_ORDER_CREATED\x10$\x12\x15\n\x11LAB_ORDER_UPDATED\x10%\x12\x16\n\x12LAB_REPORT_CREATED\x10&\x12\x16\n\x12LAB_REPORT_UPDATED\x10\'\x12 \n\x1cMEDICATION_LIST_ITEM_CREATED\x10(\x12 \n\x1cMEDICATION_LIST_ITEM_UPDATED\x10)\x12\x13\n\x0fMESSAGE_CREATED\x10*\x12\x13\n\x0fPATIENT_CREATED\x10+\x12\x13\n\x0fPATIENT_UPDATED\x10,\x12\x18\n\x14PRESCRIPTION_CREATED\x10-\x12\x18\n\x14PRESCRIPTION_UPDATED\x10.\x12\x1b\n\x17REFERRAL_REPORT_CREATED\x10/\x12\x1b\n\x17REFERRAL_REPORT_UPDATED\x10\x30\x12\x18\n\x14TASK_COMMENT_CREATED\x10\x33\x12\x10\n\x0cTASK_CREATED\x10\x36\x12\x18\n\x14TASK_LABELS_ADJUSTED\x10\x37\x12\x10\n\x0cTASK_UPDATED\x10\x39\x12\x16\n\x12VITAL_SIGN_CREATED\x10:\x12\x16\n\x12VITAL_SIGN_UPDATED\x10;\x12\x08\n\x04\x43RON\x10<\x12\x19\n\x15PRE_COMMAND_ORIGINATE\x10\x64\x12\x1a\n\x16POST_COMMAND_ORIGINATE\x10\x65\x12\x16\n\x12PRE_COMMAND_UPDATE\x10\x66\x12\x17\n\x13POST_COMMAND_UPDATE\x10g\x12\x16\n\x12PRE_COMMAND_COMMIT\x10h\x12\x17\n\x13POST_COMMAND_COMMIT\x10i\x12\x16\n\x12PRE_COMMAND_DELETE\x10j\x12\x17\n\x13POST_COMMAND_DELETE\x10k\x12\x1e\n\x1aPRE_COMMAND_ENTER_IN_ERROR\x10l\x12\x1f\n\x1bPOST_COMMAND_ENTER_IN_ERROR\x10m\x12\x1e\n\x1aPRE_COMMAND_EXECUTE_ACTION\x10n\x12\x1f\n\x1bPOST_COMMAND_EXECUTE_ACTION\x10o\x12\'\n\"ASSESS_COMMAND__CONDITION_SELECTED\x10\xc8\x01\x12\x31\n,MEDICATION_STATEMENT__MEDICATION__PRE_SEARCH\x10\xc9\x01\x12\x32\n-MEDICATION_STATEMENT__MEDICATION__POST_SEARCH\x10\xca\x01\x12/\n*MEDICATION_STATEMENT__MEDICATION__SELECTED\x10\xcb\x01\x12\"\n\x1d\x41SSESS_COMMAND__PRE_ORIGINATE\x10\xd8\x36\x12#\n\x1e\x41SSESS_COMMAND__POST_ORIGINATE\x10\xd9\x36\x12\x1f\n\x1a\x41SSESS_COMMAND__PRE_UPDATE\x10\xda\x36\x12 \n\x1b\x41SSESS_COMMAND__POST_UPDATE\x10\xdb\x36\x12\x1f\n\x1a\x41SSESS_COMMAND__PRE_COMMIT\x10\xdc\x36\x12 \n\x1b\x41SSESS_COMMAND__POST_COMMIT\x10\xdd\x36\x12\x1f\n\x1a\x41SSESS_COMMAND__PRE_DELETE\x10\xde\x36\x12 \n\x1b\x41SSESS_COMMAND__POST_DELETE\x10\xdf\x36\x12\'\n\"ASSESS_COMMAND__PRE_ENTER_IN_ERROR\x10\xe0\x36\x12(\n#ASSESS_COMMAND__POST_ENTER_IN_ERROR\x10\xe1\x36\x12\'\n\"ASSESS_COMMAND__PRE_EXECUTE_ACTION\x10\xe2\x36\x12(\n#ASSESS_COMMAND__POST_EXECUTE_ACTION\x10\xe3\x36\x12#\n\x1e\x41SSESS__CONDITION__POST_SEARCH\x10\xe4\x36\x12$\n\x1f\x44IAGNOSE__DIAGNOSE__POST_SEARCH\x10\xbcm\x12!\n\x1bGOAL_COMMAND__PRE_ORIGINATE\x10\xd0\x8c\x01\x12\"\n\x1cGOAL_COMMAND__POST_ORIGINATE\x10\xd1\x8c\x01\x12\x1e\n\x18GOAL_COMMAND__PRE_UPDATE\x10\xd2\x8c\x01\x12\x1f\n\x19GOAL_COMMAND__POST_UPDATE\x10\xd3\x8c\x01\x12\x1e\n\x18GOAL_COMMAND__PRE_COMMIT\x10\xd4\x8c\x01\x12\x1f\n\x19GOAL_COMMAND__POST_COMMIT\x10\xd5\x8c\x01\x12\x1e\n\x18GOAL_COMMAND__PRE_DELETE\x10\xd6\x8c\x01\x12\x1f\n\x19GOAL_COMMAND__POST_DELETE\x10\xd7\x8c\x01\x12&\n GOAL_COMMAND__PRE_ENTER_IN_ERROR\x10\xd8\x8c\x01\x12\'\n!GOAL_COMMAND__POST_ENTER_IN_ERROR\x10\xd9\x8c\x01\x12&\n GOAL_COMMAND__PRE_EXECUTE_ACTION\x10\xda\x8c\x01\x12\'\n!GOAL_COMMAND__POST_EXECUTE_ACTION\x10\xdb\x8c\x01\x12\x37\n1HISTORY_OF_PRESENT_ILLNESS_COMMAND__PRE_ORIGINATE\x10\xb8\x94\x01\x12\x38\n2HISTORY_OF_PRESENT_ILLNESS_COMMAND__POST_ORIGINATE\x10\xb9\x94\x01\x12\x34\n.HISTORY_OF_PRESENT_ILLNESS_COMMAND__PRE_UPDATE\x10\xba\x94\x01\x12\x35\n/HISTORY_OF_PRESENT_ILLNESS_COMMAND__POST_UPDATE\x10\xbb\x94\x01\x12\x34\n.HISTORY_OF_PRESENT_ILLNESS_COMMAND__PRE_COMMIT\x10\xbc\x94\x01\x12\x35\n/HISTORY_OF_PRESENT_ILLNESS_COMMAND__POST_COMMIT\x10\xbd\x94\x01\x12\x34\n.HISTORY_OF_PRESENT_ILLNESS_COMMAND__PRE_DELETE\x10\xbe\x94\x01\x12\x35\n/HISTORY_OF_PRESENT_ILLNESS_COMMAND__POST_DELETE\x10\xbf\x94\x01\x12<\n6HISTORY_OF_PRESENT_ILLNESS_COMMAND__PRE_ENTER_IN_ERROR\x10\xc0\x94\x01\x12=\n7HISTORY_OF_PRESENT_ILLNESS_COMMAND__POST_ENTER_IN_ERROR\x10\xc1\x94\x01\x12<\n6HISTORY_OF_PRESENT_ILLNESS_COMMAND__PRE_EXECUTE_ACTION\x10\xc2\x94\x01\x12=\n7HISTORY_OF_PRESENT_ILLNESS_COMMAND__POST_EXECUTE_ACTION\x10\xc3\x94\x01\x12\x31\n+MEDICATION_STATEMENT_COMMAND__PRE_ORIGINATE\x10\xe0\xda\x01\x12\x32\n,MEDICATION_STATEMENT_COMMAND__POST_ORIGINATE\x10\xe1\xda\x01\x12.\n(MEDICATION_STATEMENT_COMMAND__PRE_UPDATE\x10\xe2\xda\x01\x12/\n)MEDICATION_STATEMENT_COMMAND__POST_UPDATE\x10\xe3\xda\x01\x12.\n(MEDICATION_STATEMENT_COMMAND__PRE_COMMIT\x10\xe4\xda\x01\x12/\n)MEDICATION_STATEMENT_COMMAND__POST_COMMIT\x10\xe5\xda\x01\x12.\n(MEDICATION_STATEMENT_COMMAND__PRE_DELETE\x10\xe6\xda\x01\x12/\n)MEDICATION_STATEMENT_COMMAND__POST_DELETE\x10\xe7\xda\x01\x12\x36\n0MEDICATION_STATEMENT_COMMAND__PRE_ENTER_IN_ERROR\x10\xe8\xda\x01\x12\x37\n1MEDICATION_STATEMENT_COMMAND__POST_ENTER_IN_ERROR\x10\xe9\xda\x01\x12\x36\n0MEDICATION_STATEMENT_COMMAND__PRE_EXECUTE_ACTION\x10\xea\xda\x01\x12\x37\n1MEDICATION_STATEMENT_COMMAND__POST_EXECUTE_ACTION\x10\xeb\xda\x01\x12!\n\x1bPLAN_COMMAND__PRE_ORIGINATE\x10\x98\xf2\x01\x12\"\n\x1cPLAN_COMMAND__POST_ORIGINATE\x10\x99\xf2\x01\x12\x1e\n\x18PLAN_COMMAND__PRE_UPDATE\x10\x9a\xf2\x01\x12\x1f\n\x19PLAN_COMMAND__POST_UPDATE\x10\x9b\xf2\x01\x12\x1e\n\x18PLAN_COMMAND__PRE_COMMIT\x10\x9c\xf2\x01\x12\x1f\n\x19PLAN_COMMAND__POST_COMMIT\x10\x9d\xf2\x01\x12\x1e\n\x18PLAN_COMMAND__PRE_DELETE\x10\x9e\xf2\x01\x12\x1f\n\x19PLAN_COMMAND__POST_DELETE\x10\x9f\xf2\x01\x12&\n PLAN_COMMAND__PRE_ENTER_IN_ERROR\x10\xa0\xf2\x01\x12\'\n!PLAN_COMMAND__POST_ENTER_IN_ERROR\x10\xa1\xf2\x01\x12&\n PLAN_COMMAND__PRE_EXECUTE_ACTION\x10\xa2\xf2\x01\x12\'\n!PLAN_COMMAND__POST_EXECUTE_ACTION\x10\xa3\xf2\x01\x12&\n PRESCRIBE_COMMAND__PRE_ORIGINATE\x10\xe8\x81\x02\x12\'\n!PRESCRIBE_COMMAND__POST_ORIGINATE\x10\xe9\x81\x02\x12#\n\x1dPRESCRIBE_COMMAND__PRE_UPDATE\x10\xea\x81\x02\x12$\n\x1ePRESCRIBE_COMMAND__POST_UPDATE\x10\xeb\x81\x02\x12#\n\x1dPRESCRIBE_COMMAND__PRE_COMMIT\x10\xec\x81\x02\x12$\n\x1ePRESCRIBE_COMMAND__POST_COMMIT\x10\xed\x81\x02\x12#\n\x1dPRESCRIBE_COMMAND__PRE_DELETE\x10\xee\x81\x02\x12$\n\x1ePRESCRIBE_COMMAND__POST_DELETE\x10\xef\x81\x02\x12+\n%PRESCRIBE_COMMAND__PRE_ENTER_IN_ERROR\x10\xf0\x81\x02\x12,\n&PRESCRIBE_COMMAND__POST_ENTER_IN_ERROR\x10\xf1\x81\x02\x12+\n%PRESCRIBE_COMMAND__PRE_EXECUTE_ACTION\x10\xf2\x81\x02\x12,\n&PRESCRIBE_COMMAND__POST_EXECUTE_ACTION\x10\xf3\x81\x02\x12\'\n!PRESCRIBE__PRESCRIBE__POST_SEARCH\x10\xf4\x81\x02\x12*\n$QUESTIONNAIRE_COMMAND__PRE_ORIGINATE\x10\xd0\x89\x02\x12+\n%QUESTIONNAIRE_COMMAND__POST_ORIGINATE\x10\xd1\x89\x02\x12\'\n!QUESTIONNAIRE_COMMAND__PRE_UPDATE\x10\xd2\x89\x02\x12(\n\"QUESTIONNAIRE_COMMAND__POST_UPDATE\x10\xd3\x89\x02\x12\'\n!QUESTIONNAIRE_COMMAND__PRE_COMMIT\x10\xd4\x89\x02\x12(\n\"QUESTIONNAIRE_COMMAND__POST_COMMIT\x10\xd5\x89\x02\x12\'\n!QUESTIONNAIRE_COMMAND__PRE_DELETE\x10\xd6\x89\x02\x12(\n\"QUESTIONNAIRE_COMMAND__POST_DELETE\x10\xd7\x89\x02\x12/\n)QUESTIONNAIRE_COMMAND__PRE_ENTER_IN_ERROR\x10\xd8\x89\x02\x12\x30\n*QUESTIONNAIRE_COMMAND__POST_ENTER_IN_ERROR\x10\xd9\x89\x02\x12/\n)QUESTIONNAIRE_COMMAND__PRE_EXECUTE_ACTION\x10\xda\x89\x02\x12\x30\n*QUESTIONNAIRE_COMMAND__POST_EXECUTE_ACTION\x10\xdb\x89\x02\x12/\n)QUESTIONNAIRE__QUESTIONNAIRE__POST_SEARCH\x10\xdc\x89\x02\x12-\n\'REASON_FOR_VISIT_COMMAND__PRE_ORIGINATE\x10\xb8\x91\x02\x12.\n(REASON_FOR_VISIT_COMMAND__POST_ORIGINATE\x10\xb9\x91\x02\x12*\n$REASON_FOR_VISIT_COMMAND__PRE_UPDATE\x10\xba\x91\x02\x12+\n%REASON_FOR_VISIT_COMMAND__POST_UPDATE\x10\xbb\x91\x02\x12*\n$REASON_FOR_VISIT_COMMAND__PRE_COMMIT\x10\xbc\x91\x02\x12+\n%REASON_FOR_VISIT_COMMAND__POST_COMMIT\x10\xbd\x91\x02\x12*\n$REASON_FOR_VISIT_COMMAND__PRE_DELETE\x10\xbe\x91\x02\x12+\n%REASON_FOR_VISIT_COMMAND__POST_DELETE\x10\xbf\x91\x02\x12\x32\n,REASON_FOR_VISIT_COMMAND__PRE_ENTER_IN_ERROR\x10\xc0\x91\x02\x12\x33\n-REASON_FOR_VISIT_COMMAND__POST_ENTER_IN_ERROR\x10\xc1\x91\x02\x12\x32\n,REASON_FOR_VISIT_COMMAND__PRE_EXECUTE_ACTION\x10\xc2\x91\x02\x12\x33\n-REASON_FOR_VISIT_COMMAND__POST_EXECUTE_ACTION\x10\xc3\x91\x02\x12+\n%REASON_FOR_VISIT__CODING__POST_SEARCH\x10\xc4\x91\x02\x12,\n&STOP_MEDICATION_COMMAND__PRE_ORIGINATE\x10\xe0\xd7\x02\x12-\n\'STOP_MEDICATION_COMMAND__POST_ORIGINATE\x10\xe1\xd7\x02\x12)\n#STOP_MEDICATION_COMMAND__PRE_UPDATE\x10\xe2\xd7\x02\x12*\n$STOP_MEDICATION_COMMAND__POST_UPDATE\x10\xe3\xd7\x02\x12)\n#STOP_MEDICATION_COMMAND__PRE_COMMIT\x10\xe4\xd7\x02\x12*\n$STOP_MEDICATION_COMMAND__POST_COMMIT\x10\xe5\xd7\x02\x12)\n#STOP_MEDICATION_COMMAND__PRE_DELETE\x10\xe6\xd7\x02\x12*\n$STOP_MEDICATION_COMMAND__POST_DELETE\x10\xe7\xd7\x02\x12\x31\n+STOP_MEDICATION_COMMAND__PRE_ENTER_IN_ERROR\x10\xe8\xd7\x02\x12\x32\n,STOP_MEDICATION_COMMAND__POST_ENTER_IN_ERROR\x10\xe9\xd7\x02\x12\x31\n+STOP_MEDICATION_COMMAND__PRE_EXECUTE_ACTION\x10\xea\xd7\x02\x12\x32\n,STOP_MEDICATION_COMMAND__POST_EXECUTE_ACTION\x10\xeb\xd7\x02\x12.\n(STOP_MEDICATION__MEDICATION__POST_SEARCH\x10\xec\xd7\x02\x12!\n\x1bTASK_COMMAND__PRE_ORIGINATE\x10\x98\xef\x02\x12\"\n\x1cTASK_COMMAND__POST_ORIGINATE\x10\x99\xef\x02\x12\x1e\n\x18TASK_COMMAND__PRE_UPDATE\x10\x9a\xef\x02\x12\x1f\n\x19TASK_COMMAND__POST_UPDATE\x10\x9b\xef\x02\x12\x1e\n\x18TASK_COMMAND__PRE_COMMIT\x10\x9c\xef\x02\x12\x1f\n\x19TASK_COMMAND__POST_COMMIT\x10\x9d\xef\x02\x12\x1e\n\x18TASK_COMMAND__PRE_DELETE\x10\x9e\xef\x02\x12\x1f\n\x19TASK_COMMAND__POST_DELETE\x10\x9f\xef\x02\x12&\n TASK_COMMAND__PRE_ENTER_IN_ERROR\x10\xa0\xef\x02\x12\'\n!TASK_COMMAND__POST_ENTER_IN_ERROR\x10\xa1\xef\x02\x12&\n TASK_COMMAND__PRE_EXECUTE_ACTION\x10\xa2\xef\x02\x12\'\n!TASK_COMMAND__POST_EXECUTE_ACTION\x10\xa3\xef\x02\x12(\n\"UPDATE_GOAL_COMMAND__PRE_ORIGINATE\x10\xd0\x86\x03\x12)\n#UPDATE_GOAL_COMMAND__POST_ORIGINATE\x10\xd1\x86\x03\x12%\n\x1fUPDATE_GOAL_COMMAND__PRE_UPDATE\x10\xd2\x86\x03\x12&\n UPDATE_GOAL_COMMAND__POST_UPDATE\x10\xd3\x86\x03\x12%\n\x1fUPDATE_GOAL_COMMAND__PRE_COMMIT\x10\xd4\x86\x03\x12&\n UPDATE_GOAL_COMMAND__POST_COMMIT\x10\xd5\x86\x03\x12%\n\x1fUPDATE_GOAL_COMMAND__PRE_DELETE\x10\xd6\x86\x03\x12&\n UPDATE_GOAL_COMMAND__POST_DELETE\x10\xd7\x86\x03\x12-\n\'UPDATE_GOAL_COMMAND__PRE_ENTER_IN_ERROR\x10\xd8\x86\x03\x12.\n(UPDATE_GOAL_COMMAND__POST_ENTER_IN_ERROR\x10\xd9\x86\x03\x12-\n\'UPDATE_GOAL_COMMAND__PRE_EXECUTE_ACTION\x10\xda\x86\x03\x12.\n(UPDATE_GOAL_COMMAND__POST_EXECUTE_ACTION\x10\xdb\x86\x03\x12.\n(UPDATE_GOAL__GOAL_STATEMENT__POST_SEARCH\x10\xdc\x86\x03\x62\x06proto3')
|
|
18
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n&canvas_generated/messages/events.proto\x12\x06\x63\x61nvas\x1a\'canvas_generated/messages/effects.proto\"I\n\x05\x45vent\x12\x1f\n\x04type\x18\x01 \x01(\x0e\x32\x11.canvas.EventType\x12\x0e\n\x06target\x18\x02 \x01(\t\x12\x0f\n\x07\x63ontext\x18\x03 \x01(\t\"A\n\rEventResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x1f\n\x07\x65\x66\x66\x65\x63ts\x18\x02 \x03(\x0b\x32\x0e.canvas.Effect*\xe6=\n\tEventType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x1f\n\x1b\x41LLERGY_INTOLERANCE_CREATED\x10\x01\x12\x1f\n\x1b\x41LLERGY_INTOLERANCE_UPDATED\x10\x02\x12\x18\n\x14\x41PPOINTMENT_CANCELED\x10\x04\x12\x1a\n\x16\x41PPOINTMENT_CHECKED_IN\x10\x05\x12\x17\n\x13\x41PPOINTMENT_CREATED\x10\x06\x12\x19\n\x15\x41PPOINTMENT_NO_SHOWED\x10\x07\x12\x1b\n\x17\x41PPOINTMENT_RESCHEDULED\x10\x08\x12\x18\n\x14\x41PPOINTMENT_RESTORED\x10\t\x12\x17\n\x13\x41PPOINTMENT_UPDATED\x10\n\x12\x1d\n\x19\x42ILLING_LINE_ITEM_CREATED\x10\x0b\x12\x1d\n\x19\x42ILLING_LINE_ITEM_UPDATED\x10\x0c\x12\x16\n\x12\x43ONDITION_ASSESSED\x10\r\x12\x15\n\x11\x43ONDITION_CREATED\x10\x0e\x12\x16\n\x12\x43ONDITION_RESOLVED\x10\x0f\x12\x15\n\x11\x43ONDITION_UPDATED\x10\x10\x12\x13\n\x0f\x43ONSENT_CREATED\x10\x11\x12\x13\n\x0f\x43ONSENT_DELETED\x10\x12\x12\x13\n\x0f\x43ONSENT_UPDATED\x10\x13\x12\x14\n\x10\x43OVERAGE_CREATED\x10\x14\x12\x14\n\x10\x43OVERAGE_UPDATED\x10\x15\x12\x15\n\x11\x45NCOUNTER_CREATED\x10\x16\x12\x15\n\x11\x45NCOUNTER_UPDATED\x10\x17\x12\x1a\n\x16IMAGING_REPORT_CREATED\x10\x1a\x12\x1a\n\x16IMAGING_REPORT_UPDATED\x10\x1b\x12\x18\n\x14IMMUNIZATION_CREATED\x10\x1c\x12\"\n\x1eIMMUNIZATION_STATEMENT_CREATED\x10\x1d\x12\"\n\x1eIMMUNIZATION_STATEMENT_UPDATED\x10\x1e\x12\x18\n\x14IMMUNIZATION_UPDATED\x10\x1f\x12\x17\n\x13INSTRUCTION_CREATED\x10 \x12\x17\n\x13INSTRUCTION_UPDATED\x10!\x12\x15\n\x11INTERVIEW_CREATED\x10\"\x12\x15\n\x11INTERVIEW_UPDATED\x10#\x12\x15\n\x11LAB_ORDER_CREATED\x10$\x12\x15\n\x11LAB_ORDER_UPDATED\x10%\x12\x16\n\x12LAB_REPORT_CREATED\x10&\x12\x16\n\x12LAB_REPORT_UPDATED\x10\'\x12 \n\x1cMEDICATION_LIST_ITEM_CREATED\x10(\x12 \n\x1cMEDICATION_LIST_ITEM_UPDATED\x10)\x12\x13\n\x0fMESSAGE_CREATED\x10*\x12\x13\n\x0fPATIENT_CREATED\x10+\x12\x13\n\x0fPATIENT_UPDATED\x10,\x12\x18\n\x14PRESCRIPTION_CREATED\x10-\x12\x18\n\x14PRESCRIPTION_UPDATED\x10.\x12\x1b\n\x17REFERRAL_REPORT_CREATED\x10/\x12\x1b\n\x17REFERRAL_REPORT_UPDATED\x10\x30\x12\x18\n\x14TASK_COMMENT_CREATED\x10\x33\x12\x10\n\x0cTASK_CREATED\x10\x36\x12\x18\n\x14TASK_LABELS_ADJUSTED\x10\x37\x12\x10\n\x0cTASK_UPDATED\x10\x39\x12\x16\n\x12VITAL_SIGN_CREATED\x10:\x12\x16\n\x12VITAL_SIGN_UPDATED\x10;\x12\x08\n\x04\x43RON\x10<\x12\x19\n\x15PRE_COMMAND_ORIGINATE\x10\x64\x12\x1a\n\x16POST_COMMAND_ORIGINATE\x10\x65\x12\x16\n\x12PRE_COMMAND_UPDATE\x10\x66\x12\x17\n\x13POST_COMMAND_UPDATE\x10g\x12\x16\n\x12PRE_COMMAND_COMMIT\x10h\x12\x17\n\x13POST_COMMAND_COMMIT\x10i\x12\x16\n\x12PRE_COMMAND_DELETE\x10j\x12\x17\n\x13POST_COMMAND_DELETE\x10k\x12\x1e\n\x1aPRE_COMMAND_ENTER_IN_ERROR\x10l\x12\x1f\n\x1bPOST_COMMAND_ENTER_IN_ERROR\x10m\x12\x1e\n\x1aPRE_COMMAND_EXECUTE_ACTION\x10n\x12\x1f\n\x1bPOST_COMMAND_EXECUTE_ACTION\x10o\x12\'\n\"ASSESS_COMMAND__CONDITION_SELECTED\x10\xc8\x01\x12\x31\n,MEDICATION_STATEMENT__MEDICATION__PRE_SEARCH\x10\xc9\x01\x12\x32\n-MEDICATION_STATEMENT__MEDICATION__POST_SEARCH\x10\xca\x01\x12/\n*MEDICATION_STATEMENT__MEDICATION__SELECTED\x10\xcb\x01\x12\"\n\x1d\x41SSESS_COMMAND__PRE_ORIGINATE\x10\xd8\x36\x12#\n\x1e\x41SSESS_COMMAND__POST_ORIGINATE\x10\xd9\x36\x12\x1f\n\x1a\x41SSESS_COMMAND__PRE_UPDATE\x10\xda\x36\x12 \n\x1b\x41SSESS_COMMAND__POST_UPDATE\x10\xdb\x36\x12\x1f\n\x1a\x41SSESS_COMMAND__PRE_COMMIT\x10\xdc\x36\x12 \n\x1b\x41SSESS_COMMAND__POST_COMMIT\x10\xdd\x36\x12\x1f\n\x1a\x41SSESS_COMMAND__PRE_DELETE\x10\xde\x36\x12 \n\x1b\x41SSESS_COMMAND__POST_DELETE\x10\xdf\x36\x12\'\n\"ASSESS_COMMAND__PRE_ENTER_IN_ERROR\x10\xe0\x36\x12(\n#ASSESS_COMMAND__POST_ENTER_IN_ERROR\x10\xe1\x36\x12\'\n\"ASSESS_COMMAND__PRE_EXECUTE_ACTION\x10\xe2\x36\x12(\n#ASSESS_COMMAND__POST_EXECUTE_ACTION\x10\xe3\x36\x12#\n\x1e\x41SSESS__CONDITION__POST_SEARCH\x10\xe4\x36\x12$\n\x1f\x44IAGNOSE__DIAGNOSE__POST_SEARCH\x10\xbcm\x12!\n\x1bGOAL_COMMAND__PRE_ORIGINATE\x10\xd0\x8c\x01\x12\"\n\x1cGOAL_COMMAND__POST_ORIGINATE\x10\xd1\x8c\x01\x12\x1e\n\x18GOAL_COMMAND__PRE_UPDATE\x10\xd2\x8c\x01\x12\x1f\n\x19GOAL_COMMAND__POST_UPDATE\x10\xd3\x8c\x01\x12\x1e\n\x18GOAL_COMMAND__PRE_COMMIT\x10\xd4\x8c\x01\x12\x1f\n\x19GOAL_COMMAND__POST_COMMIT\x10\xd5\x8c\x01\x12\x1e\n\x18GOAL_COMMAND__PRE_DELETE\x10\xd6\x8c\x01\x12\x1f\n\x19GOAL_COMMAND__POST_DELETE\x10\xd7\x8c\x01\x12&\n GOAL_COMMAND__PRE_ENTER_IN_ERROR\x10\xd8\x8c\x01\x12\'\n!GOAL_COMMAND__POST_ENTER_IN_ERROR\x10\xd9\x8c\x01\x12&\n GOAL_COMMAND__PRE_EXECUTE_ACTION\x10\xda\x8c\x01\x12\'\n!GOAL_COMMAND__POST_EXECUTE_ACTION\x10\xdb\x8c\x01\x12\x37\n1HISTORY_OF_PRESENT_ILLNESS_COMMAND__PRE_ORIGINATE\x10\xb8\x94\x01\x12\x38\n2HISTORY_OF_PRESENT_ILLNESS_COMMAND__POST_ORIGINATE\x10\xb9\x94\x01\x12\x34\n.HISTORY_OF_PRESENT_ILLNESS_COMMAND__PRE_UPDATE\x10\xba\x94\x01\x12\x35\n/HISTORY_OF_PRESENT_ILLNESS_COMMAND__POST_UPDATE\x10\xbb\x94\x01\x12\x34\n.HISTORY_OF_PRESENT_ILLNESS_COMMAND__PRE_COMMIT\x10\xbc\x94\x01\x12\x35\n/HISTORY_OF_PRESENT_ILLNESS_COMMAND__POST_COMMIT\x10\xbd\x94\x01\x12\x34\n.HISTORY_OF_PRESENT_ILLNESS_COMMAND__PRE_DELETE\x10\xbe\x94\x01\x12\x35\n/HISTORY_OF_PRESENT_ILLNESS_COMMAND__POST_DELETE\x10\xbf\x94\x01\x12<\n6HISTORY_OF_PRESENT_ILLNESS_COMMAND__PRE_ENTER_IN_ERROR\x10\xc0\x94\x01\x12=\n7HISTORY_OF_PRESENT_ILLNESS_COMMAND__POST_ENTER_IN_ERROR\x10\xc1\x94\x01\x12<\n6HISTORY_OF_PRESENT_ILLNESS_COMMAND__PRE_EXECUTE_ACTION\x10\xc2\x94\x01\x12=\n7HISTORY_OF_PRESENT_ILLNESS_COMMAND__POST_EXECUTE_ACTION\x10\xc3\x94\x01\x12\x31\n+MEDICATION_STATEMENT_COMMAND__PRE_ORIGINATE\x10\xe0\xda\x01\x12\x32\n,MEDICATION_STATEMENT_COMMAND__POST_ORIGINATE\x10\xe1\xda\x01\x12.\n(MEDICATION_STATEMENT_COMMAND__PRE_UPDATE\x10\xe2\xda\x01\x12/\n)MEDICATION_STATEMENT_COMMAND__POST_UPDATE\x10\xe3\xda\x01\x12.\n(MEDICATION_STATEMENT_COMMAND__PRE_COMMIT\x10\xe4\xda\x01\x12/\n)MEDICATION_STATEMENT_COMMAND__POST_COMMIT\x10\xe5\xda\x01\x12.\n(MEDICATION_STATEMENT_COMMAND__PRE_DELETE\x10\xe6\xda\x01\x12/\n)MEDICATION_STATEMENT_COMMAND__POST_DELETE\x10\xe7\xda\x01\x12\x36\n0MEDICATION_STATEMENT_COMMAND__PRE_ENTER_IN_ERROR\x10\xe8\xda\x01\x12\x37\n1MEDICATION_STATEMENT_COMMAND__POST_ENTER_IN_ERROR\x10\xe9\xda\x01\x12\x36\n0MEDICATION_STATEMENT_COMMAND__PRE_EXECUTE_ACTION\x10\xea\xda\x01\x12\x37\n1MEDICATION_STATEMENT_COMMAND__POST_EXECUTE_ACTION\x10\xeb\xda\x01\x12!\n\x1bPLAN_COMMAND__PRE_ORIGINATE\x10\x98\xf2\x01\x12\"\n\x1cPLAN_COMMAND__POST_ORIGINATE\x10\x99\xf2\x01\x12\x1e\n\x18PLAN_COMMAND__PRE_UPDATE\x10\x9a\xf2\x01\x12\x1f\n\x19PLAN_COMMAND__POST_UPDATE\x10\x9b\xf2\x01\x12\x1e\n\x18PLAN_COMMAND__PRE_COMMIT\x10\x9c\xf2\x01\x12\x1f\n\x19PLAN_COMMAND__POST_COMMIT\x10\x9d\xf2\x01\x12\x1e\n\x18PLAN_COMMAND__PRE_DELETE\x10\x9e\xf2\x01\x12\x1f\n\x19PLAN_COMMAND__POST_DELETE\x10\x9f\xf2\x01\x12&\n PLAN_COMMAND__PRE_ENTER_IN_ERROR\x10\xa0\xf2\x01\x12\'\n!PLAN_COMMAND__POST_ENTER_IN_ERROR\x10\xa1\xf2\x01\x12&\n PLAN_COMMAND__PRE_EXECUTE_ACTION\x10\xa2\xf2\x01\x12\'\n!PLAN_COMMAND__POST_EXECUTE_ACTION\x10\xa3\xf2\x01\x12&\n PRESCRIBE_COMMAND__PRE_ORIGINATE\x10\xe8\x81\x02\x12\'\n!PRESCRIBE_COMMAND__POST_ORIGINATE\x10\xe9\x81\x02\x12#\n\x1dPRESCRIBE_COMMAND__PRE_UPDATE\x10\xea\x81\x02\x12$\n\x1ePRESCRIBE_COMMAND__POST_UPDATE\x10\xeb\x81\x02\x12#\n\x1dPRESCRIBE_COMMAND__PRE_COMMIT\x10\xec\x81\x02\x12$\n\x1ePRESCRIBE_COMMAND__POST_COMMIT\x10\xed\x81\x02\x12#\n\x1dPRESCRIBE_COMMAND__PRE_DELETE\x10\xee\x81\x02\x12$\n\x1ePRESCRIBE_COMMAND__POST_DELETE\x10\xef\x81\x02\x12+\n%PRESCRIBE_COMMAND__PRE_ENTER_IN_ERROR\x10\xf0\x81\x02\x12,\n&PRESCRIBE_COMMAND__POST_ENTER_IN_ERROR\x10\xf1\x81\x02\x12+\n%PRESCRIBE_COMMAND__PRE_EXECUTE_ACTION\x10\xf2\x81\x02\x12,\n&PRESCRIBE_COMMAND__POST_EXECUTE_ACTION\x10\xf3\x81\x02\x12\'\n!PRESCRIBE__PRESCRIBE__POST_SEARCH\x10\xf4\x81\x02\x12*\n$QUESTIONNAIRE_COMMAND__PRE_ORIGINATE\x10\xd0\x89\x02\x12+\n%QUESTIONNAIRE_COMMAND__POST_ORIGINATE\x10\xd1\x89\x02\x12\'\n!QUESTIONNAIRE_COMMAND__PRE_UPDATE\x10\xd2\x89\x02\x12(\n\"QUESTIONNAIRE_COMMAND__POST_UPDATE\x10\xd3\x89\x02\x12\'\n!QUESTIONNAIRE_COMMAND__PRE_COMMIT\x10\xd4\x89\x02\x12(\n\"QUESTIONNAIRE_COMMAND__POST_COMMIT\x10\xd5\x89\x02\x12\'\n!QUESTIONNAIRE_COMMAND__PRE_DELETE\x10\xd6\x89\x02\x12(\n\"QUESTIONNAIRE_COMMAND__POST_DELETE\x10\xd7\x89\x02\x12/\n)QUESTIONNAIRE_COMMAND__PRE_ENTER_IN_ERROR\x10\xd8\x89\x02\x12\x30\n*QUESTIONNAIRE_COMMAND__POST_ENTER_IN_ERROR\x10\xd9\x89\x02\x12/\n)QUESTIONNAIRE_COMMAND__PRE_EXECUTE_ACTION\x10\xda\x89\x02\x12\x30\n*QUESTIONNAIRE_COMMAND__POST_EXECUTE_ACTION\x10\xdb\x89\x02\x12/\n)QUESTIONNAIRE__QUESTIONNAIRE__POST_SEARCH\x10\xdc\x89\x02\x12-\n\'REASON_FOR_VISIT_COMMAND__PRE_ORIGINATE\x10\xb8\x91\x02\x12.\n(REASON_FOR_VISIT_COMMAND__POST_ORIGINATE\x10\xb9\x91\x02\x12*\n$REASON_FOR_VISIT_COMMAND__PRE_UPDATE\x10\xba\x91\x02\x12+\n%REASON_FOR_VISIT_COMMAND__POST_UPDATE\x10\xbb\x91\x02\x12*\n$REASON_FOR_VISIT_COMMAND__PRE_COMMIT\x10\xbc\x91\x02\x12+\n%REASON_FOR_VISIT_COMMAND__POST_COMMIT\x10\xbd\x91\x02\x12*\n$REASON_FOR_VISIT_COMMAND__PRE_DELETE\x10\xbe\x91\x02\x12+\n%REASON_FOR_VISIT_COMMAND__POST_DELETE\x10\xbf\x91\x02\x12\x32\n,REASON_FOR_VISIT_COMMAND__PRE_ENTER_IN_ERROR\x10\xc0\x91\x02\x12\x33\n-REASON_FOR_VISIT_COMMAND__POST_ENTER_IN_ERROR\x10\xc1\x91\x02\x12\x32\n,REASON_FOR_VISIT_COMMAND__PRE_EXECUTE_ACTION\x10\xc2\x91\x02\x12\x33\n-REASON_FOR_VISIT_COMMAND__POST_EXECUTE_ACTION\x10\xc3\x91\x02\x12+\n%REASON_FOR_VISIT__CODING__POST_SEARCH\x10\xc4\x91\x02\x12,\n&STOP_MEDICATION_COMMAND__PRE_ORIGINATE\x10\xe0\xd7\x02\x12-\n\'STOP_MEDICATION_COMMAND__POST_ORIGINATE\x10\xe1\xd7\x02\x12)\n#STOP_MEDICATION_COMMAND__PRE_UPDATE\x10\xe2\xd7\x02\x12*\n$STOP_MEDICATION_COMMAND__POST_UPDATE\x10\xe3\xd7\x02\x12)\n#STOP_MEDICATION_COMMAND__PRE_COMMIT\x10\xe4\xd7\x02\x12*\n$STOP_MEDICATION_COMMAND__POST_COMMIT\x10\xe5\xd7\x02\x12)\n#STOP_MEDICATION_COMMAND__PRE_DELETE\x10\xe6\xd7\x02\x12*\n$STOP_MEDICATION_COMMAND__POST_DELETE\x10\xe7\xd7\x02\x12\x31\n+STOP_MEDICATION_COMMAND__PRE_ENTER_IN_ERROR\x10\xe8\xd7\x02\x12\x32\n,STOP_MEDICATION_COMMAND__POST_ENTER_IN_ERROR\x10\xe9\xd7\x02\x12\x31\n+STOP_MEDICATION_COMMAND__PRE_EXECUTE_ACTION\x10\xea\xd7\x02\x12\x32\n,STOP_MEDICATION_COMMAND__POST_EXECUTE_ACTION\x10\xeb\xd7\x02\x12.\n(STOP_MEDICATION__MEDICATION__POST_SEARCH\x10\xec\xd7\x02\x12!\n\x1bTASK_COMMAND__PRE_ORIGINATE\x10\x98\xef\x02\x12\"\n\x1cTASK_COMMAND__POST_ORIGINATE\x10\x99\xef\x02\x12\x1e\n\x18TASK_COMMAND__PRE_UPDATE\x10\x9a\xef\x02\x12\x1f\n\x19TASK_COMMAND__POST_UPDATE\x10\x9b\xef\x02\x12\x1e\n\x18TASK_COMMAND__PRE_COMMIT\x10\x9c\xef\x02\x12\x1f\n\x19TASK_COMMAND__POST_COMMIT\x10\x9d\xef\x02\x12\x1e\n\x18TASK_COMMAND__PRE_DELETE\x10\x9e\xef\x02\x12\x1f\n\x19TASK_COMMAND__POST_DELETE\x10\x9f\xef\x02\x12&\n TASK_COMMAND__PRE_ENTER_IN_ERROR\x10\xa0\xef\x02\x12\'\n!TASK_COMMAND__POST_ENTER_IN_ERROR\x10\xa1\xef\x02\x12&\n TASK_COMMAND__PRE_EXECUTE_ACTION\x10\xa2\xef\x02\x12\'\n!TASK_COMMAND__POST_EXECUTE_ACTION\x10\xa3\xef\x02\x12(\n\"UPDATE_GOAL_COMMAND__PRE_ORIGINATE\x10\xd0\x86\x03\x12)\n#UPDATE_GOAL_COMMAND__POST_ORIGINATE\x10\xd1\x86\x03\x12%\n\x1fUPDATE_GOAL_COMMAND__PRE_UPDATE\x10\xd2\x86\x03\x12&\n UPDATE_GOAL_COMMAND__POST_UPDATE\x10\xd3\x86\x03\x12%\n\x1fUPDATE_GOAL_COMMAND__PRE_COMMIT\x10\xd4\x86\x03\x12&\n UPDATE_GOAL_COMMAND__POST_COMMIT\x10\xd5\x86\x03\x12%\n\x1fUPDATE_GOAL_COMMAND__PRE_DELETE\x10\xd6\x86\x03\x12&\n UPDATE_GOAL_COMMAND__POST_DELETE\x10\xd7\x86\x03\x12-\n\'UPDATE_GOAL_COMMAND__PRE_ENTER_IN_ERROR\x10\xd8\x86\x03\x12.\n(UPDATE_GOAL_COMMAND__POST_ENTER_IN_ERROR\x10\xd9\x86\x03\x12-\n\'UPDATE_GOAL_COMMAND__PRE_EXECUTE_ACTION\x10\xda\x86\x03\x12.\n(UPDATE_GOAL_COMMAND__POST_EXECUTE_ACTION\x10\xdb\x86\x03\x12.\n(UPDATE_GOAL__GOAL_STATEMENT__POST_SEARCH\x10\xdc\x86\x03\x12\x1f\n\x19PATIENT_CHART__CONDITIONS\x10\xa0\x8d\x06\x62\x06proto3')
|
|
19
19
|
|
|
20
20
|
_globals = globals()
|
|
21
21
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -23,7 +23,7 @@ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'canvas_generated.messages.e
|
|
|
23
23
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
24
24
|
DESCRIPTOR._options = None
|
|
25
25
|
_globals['_EVENTTYPE']._serialized_start=234
|
|
26
|
-
_globals['_EVENTTYPE']._serialized_end=
|
|
26
|
+
_globals['_EVENTTYPE']._serialized_end=8144
|
|
27
27
|
_globals['_EVENT']._serialized_start=91
|
|
28
28
|
_globals['_EVENT']._serialized_end=164
|
|
29
29
|
_globals['_EVENTRESPONSE']._serialized_start=166
|
|
@@ -217,6 +217,7 @@ class EventType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
|
|
|
217
217
|
UPDATE_GOAL_COMMAND__PRE_EXECUTE_ACTION: _ClassVar[EventType]
|
|
218
218
|
UPDATE_GOAL_COMMAND__POST_EXECUTE_ACTION: _ClassVar[EventType]
|
|
219
219
|
UPDATE_GOAL__GOAL_STATEMENT__POST_SEARCH: _ClassVar[EventType]
|
|
220
|
+
PATIENT_CHART__CONDITIONS: _ClassVar[EventType]
|
|
220
221
|
UNKNOWN: EventType
|
|
221
222
|
ALLERGY_INTOLERANCE_CREATED: EventType
|
|
222
223
|
ALLERGY_INTOLERANCE_UPDATED: EventType
|
|
@@ -425,6 +426,7 @@ UPDATE_GOAL_COMMAND__POST_ENTER_IN_ERROR: EventType
|
|
|
425
426
|
UPDATE_GOAL_COMMAND__PRE_EXECUTE_ACTION: EventType
|
|
426
427
|
UPDATE_GOAL_COMMAND__POST_EXECUTE_ACTION: EventType
|
|
427
428
|
UPDATE_GOAL__GOAL_STATEMENT__POST_SEARCH: EventType
|
|
429
|
+
PATIENT_CHART__CONDITIONS: EventType
|
|
428
430
|
|
|
429
431
|
class Event(_message.Message):
|
|
430
432
|
__slots__ = ("type", "target", "context")
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
from typing import Any, cast
|
|
2
|
+
|
|
3
|
+
from gql import Client, gql
|
|
4
|
+
from gql.transport.aiohttp import AIOHTTPTransport
|
|
5
|
+
|
|
6
|
+
from settings import GRAPHQL_ENDPOINT
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class _CanvasGQLClient:
|
|
10
|
+
"""
|
|
11
|
+
This is a GraphQL client that can be used to query home-app in order to fetch data for use in plugins.
|
|
12
|
+
|
|
13
|
+
Usage Examples:
|
|
14
|
+
|
|
15
|
+
A query with no parameters:
|
|
16
|
+
|
|
17
|
+
TEST_QUERY_NO_PARAMS = '''
|
|
18
|
+
query PatientsAll {
|
|
19
|
+
patients {
|
|
20
|
+
edges {
|
|
21
|
+
node {
|
|
22
|
+
firstName
|
|
23
|
+
lastName
|
|
24
|
+
birthDate
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
'''
|
|
30
|
+
|
|
31
|
+
client = _CanvasGQLClient()
|
|
32
|
+
result = client.query(TEST_QUERY_NO_PARAMS)
|
|
33
|
+
print(result) # returns dictionary
|
|
34
|
+
|
|
35
|
+
A query with parameters:
|
|
36
|
+
|
|
37
|
+
TEST_QUERY_WITH_PARAMS = '''
|
|
38
|
+
query PatientGet($patientKey: String!) {
|
|
39
|
+
patient(patientKey: $patientKey) {
|
|
40
|
+
firstName
|
|
41
|
+
lastName
|
|
42
|
+
birthDate
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
'''
|
|
46
|
+
|
|
47
|
+
client = _CanvasGQLClient()
|
|
48
|
+
result = client.query(TEST_QUERY_NO_PARAMS)
|
|
49
|
+
print(result)
|
|
50
|
+
|
|
51
|
+
For use in plugins, it is included in the instantiation of Protocol class. This means
|
|
52
|
+
it can simply be referred to as self.client in plugin code.
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
def __init__(self) -> None:
|
|
56
|
+
self.client = Client(
|
|
57
|
+
transport=AIOHTTPTransport(url=cast(str, GRAPHQL_ENDPOINT)),
|
|
58
|
+
# TODO: follow the documentation in the link below to specify a
|
|
59
|
+
# cached copy of the schema
|
|
60
|
+
# https://gql.readthedocs.io/en/stable/usage/validation.html#using-a-provided-schema
|
|
61
|
+
fetch_schema_from_transport=False,
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
def query(
|
|
65
|
+
self,
|
|
66
|
+
gql_query: str,
|
|
67
|
+
variables: dict[str, Any] | None = None,
|
|
68
|
+
extra_args: dict[str, Any] | None = None
|
|
69
|
+
) -> dict[str, Any]:
|
|
70
|
+
if variables is None:
|
|
71
|
+
query_variables = {}
|
|
72
|
+
else:
|
|
73
|
+
query_variables = variables
|
|
74
|
+
|
|
75
|
+
return self.client.execute(
|
|
76
|
+
gql(gql_query),
|
|
77
|
+
variable_values=query_variables,
|
|
78
|
+
extra_args=extra_args,
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
GQL_CLIENT = _CanvasGQLClient()
|
canvas_sdk/data/patient.py
CHANGED
|
@@ -1,26 +1,6 @@
|
|
|
1
|
-
from datetime import date
|
|
2
|
-
from typing import Self
|
|
3
|
-
|
|
4
1
|
from canvas_sdk.data import DataModel
|
|
5
2
|
|
|
6
|
-
from .data_access_layer_client import DAL_CLIENT
|
|
7
|
-
|
|
8
3
|
|
|
9
4
|
class Patient(DataModel):
|
|
10
|
-
"""Patient model."""
|
|
11
|
-
|
|
12
5
|
id: str | None = None
|
|
13
|
-
|
|
14
|
-
last_name: str | None = None
|
|
15
|
-
birth_date: date | None = None
|
|
16
|
-
|
|
17
|
-
@classmethod
|
|
18
|
-
def get(cls, id: str) -> Self:
|
|
19
|
-
"""Given an ID, get the Patient from the Data Access Layer."""
|
|
20
|
-
patient = DAL_CLIENT.get_patient(id)
|
|
21
|
-
return cls(
|
|
22
|
-
id=patient.id,
|
|
23
|
-
first_name=patient.first_name or None,
|
|
24
|
-
last_name=patient.last_name or None,
|
|
25
|
-
birth_date=date.fromisoformat(patient.birth_date) if patient.birth_date else None,
|
|
26
|
-
)
|
|
6
|
+
# TODO - populate more attributes
|
canvas_sdk/handlers/base.py
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import json
|
|
2
|
+
from typing import TYPE_CHECKING, Any
|
|
3
|
+
|
|
4
|
+
if TYPE_CHECKING:
|
|
5
|
+
from canvas_generated.messages.events_pb2 import Event
|
|
2
6
|
|
|
3
7
|
|
|
4
8
|
class BaseHandler:
|
|
@@ -6,11 +10,20 @@ class BaseHandler:
|
|
|
6
10
|
The class that all handlers inherit from.
|
|
7
11
|
"""
|
|
8
12
|
|
|
9
|
-
|
|
13
|
+
secrets: dict[str, Any]
|
|
14
|
+
target: str
|
|
15
|
+
|
|
16
|
+
def __init__(
|
|
17
|
+
self,
|
|
18
|
+
event: "Event",
|
|
19
|
+
secrets: dict[str, Any] | None = None,
|
|
20
|
+
) -> None:
|
|
10
21
|
self.event = event
|
|
22
|
+
|
|
11
23
|
try:
|
|
12
24
|
self.context = json.loads(event.context)
|
|
13
25
|
except ValueError:
|
|
14
26
|
self.context = {}
|
|
27
|
+
|
|
15
28
|
self.target = event.target
|
|
16
29
|
self.secrets = secrets or {}
|
canvas_sdk/protocols/base.py
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
from typing import Any
|
|
2
|
+
|
|
3
|
+
from canvas_sdk.data.client import GQL_CLIENT
|
|
1
4
|
from canvas_sdk.handlers.base import BaseHandler
|
|
2
5
|
|
|
3
6
|
|
|
@@ -5,3 +8,14 @@ class BaseProtocol(BaseHandler):
|
|
|
5
8
|
"""
|
|
6
9
|
The class that protocols inherit from.
|
|
7
10
|
"""
|
|
11
|
+
|
|
12
|
+
def _beta_run_gql_query(self, query: str, variables: dict | None = None) -> dict[str, Any]:
|
|
13
|
+
return GQL_CLIENT.query(
|
|
14
|
+
query,
|
|
15
|
+
variables=variables,
|
|
16
|
+
extra_args={
|
|
17
|
+
"headers": {
|
|
18
|
+
"Authorization": f'Bearer {self.secrets["graphql_jwt"]}',
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
)
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
-
# source: canvas_generated/data_access_layer/data_access_layer.proto
|
|
4
|
-
# Protobuf Python Version: 4.25.0
|
|
5
|
-
"""Generated protocol buffer code."""
|
|
6
|
-
from google.protobuf import descriptor as _descriptor
|
|
7
|
-
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
8
|
-
from google.protobuf import symbol_database as _symbol_database
|
|
9
|
-
from google.protobuf.internal import builder as _builder
|
|
10
|
-
# @@protoc_insertion_point(imports)
|
|
11
|
-
|
|
12
|
-
_sym_db = _symbol_database.Default()
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n:canvas_generated/data_access_layer/data_access_layer.proto\"\x10\n\x02ID\x12\n\n\x02id\x18\x01 \x01(\t\"\x8b\x01\n\x07Patient\x12\n\n\x02id\x18\x01 \x01(\t\x12\x17\n\nfirst_name\x18\x02 \x01(\tH\x00\x88\x01\x01\x12\x16\n\tlast_name\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nbirth_date\x18\x04 \x01(\tH\x02\x88\x01\x01\x42\r\n\x0b_first_nameB\x0c\n\n_last_nameB\r\n\x0b_birth_date20\n\x0f\x44\x61taAccessLayer\x12\x1d\n\nGetPatient\x12\x03.ID\x1a\x08.Patient\"\x00\x62\x06proto3')
|
|
18
|
-
|
|
19
|
-
_globals = globals()
|
|
20
|
-
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
21
|
-
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'canvas_generated.data_access_layer.data_access_layer_pb2', _globals)
|
|
22
|
-
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
23
|
-
DESCRIPTOR._options = None
|
|
24
|
-
_globals['_ID']._serialized_start=62
|
|
25
|
-
_globals['_ID']._serialized_end=78
|
|
26
|
-
_globals['_PATIENT']._serialized_start=81
|
|
27
|
-
_globals['_PATIENT']._serialized_end=220
|
|
28
|
-
_globals['_DATAACCESSLAYER']._serialized_start=222
|
|
29
|
-
_globals['_DATAACCESSLAYER']._serialized_end=270
|
|
30
|
-
# @@protoc_insertion_point(module_scope)
|
|
@@ -1,23 +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 ID(_message.Message):
|
|
8
|
-
__slots__ = ("id",)
|
|
9
|
-
ID_FIELD_NUMBER: _ClassVar[int]
|
|
10
|
-
id: str
|
|
11
|
-
def __init__(self, id: _Optional[str] = ...) -> None: ...
|
|
12
|
-
|
|
13
|
-
class Patient(_message.Message):
|
|
14
|
-
__slots__ = ("id", "first_name", "last_name", "birth_date")
|
|
15
|
-
ID_FIELD_NUMBER: _ClassVar[int]
|
|
16
|
-
FIRST_NAME_FIELD_NUMBER: _ClassVar[int]
|
|
17
|
-
LAST_NAME_FIELD_NUMBER: _ClassVar[int]
|
|
18
|
-
BIRTH_DATE_FIELD_NUMBER: _ClassVar[int]
|
|
19
|
-
id: str
|
|
20
|
-
first_name: str
|
|
21
|
-
last_name: str
|
|
22
|
-
birth_date: str
|
|
23
|
-
def __init__(self, id: _Optional[str] = ..., first_name: _Optional[str] = ..., last_name: _Optional[str] = ..., birth_date: _Optional[str] = ...) -> None: ...
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
|
|
2
|
-
"""Client and server classes corresponding to protobuf-defined services."""
|
|
3
|
-
import grpc
|
|
4
|
-
|
|
5
|
-
from canvas_generated.data_access_layer import data_access_layer_pb2 as canvas__generated_dot_data__access__layer_dot_data__access__layer__pb2
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
class DataAccessLayerStub(object):
|
|
9
|
-
"""Missing associated documentation comment in .proto file."""
|
|
10
|
-
|
|
11
|
-
def __init__(self, channel):
|
|
12
|
-
"""Constructor.
|
|
13
|
-
|
|
14
|
-
Args:
|
|
15
|
-
channel: A grpc.Channel.
|
|
16
|
-
"""
|
|
17
|
-
self.GetPatient = channel.unary_unary(
|
|
18
|
-
'/DataAccessLayer/GetPatient',
|
|
19
|
-
request_serializer=canvas__generated_dot_data__access__layer_dot_data__access__layer__pb2.ID.SerializeToString,
|
|
20
|
-
response_deserializer=canvas__generated_dot_data__access__layer_dot_data__access__layer__pb2.Patient.FromString,
|
|
21
|
-
)
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
class DataAccessLayerServicer(object):
|
|
25
|
-
"""Missing associated documentation comment in .proto file."""
|
|
26
|
-
|
|
27
|
-
def GetPatient(self, request, context):
|
|
28
|
-
"""Missing associated documentation comment in .proto file."""
|
|
29
|
-
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
30
|
-
context.set_details('Method not implemented!')
|
|
31
|
-
raise NotImplementedError('Method not implemented!')
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
def add_DataAccessLayerServicer_to_server(servicer, server):
|
|
35
|
-
rpc_method_handlers = {
|
|
36
|
-
'GetPatient': grpc.unary_unary_rpc_method_handler(
|
|
37
|
-
servicer.GetPatient,
|
|
38
|
-
request_deserializer=canvas__generated_dot_data__access__layer_dot_data__access__layer__pb2.ID.FromString,
|
|
39
|
-
response_serializer=canvas__generated_dot_data__access__layer_dot_data__access__layer__pb2.Patient.SerializeToString,
|
|
40
|
-
),
|
|
41
|
-
}
|
|
42
|
-
generic_handler = grpc.method_handlers_generic_handler(
|
|
43
|
-
'DataAccessLayer', rpc_method_handlers)
|
|
44
|
-
server.add_generic_rpc_handlers((generic_handler,))
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
# This class is part of an EXPERIMENTAL API.
|
|
48
|
-
class DataAccessLayer(object):
|
|
49
|
-
"""Missing associated documentation comment in .proto file."""
|
|
50
|
-
|
|
51
|
-
@staticmethod
|
|
52
|
-
def GetPatient(request,
|
|
53
|
-
target,
|
|
54
|
-
options=(),
|
|
55
|
-
channel_credentials=None,
|
|
56
|
-
call_credentials=None,
|
|
57
|
-
insecure=False,
|
|
58
|
-
compression=None,
|
|
59
|
-
wait_for_ready=None,
|
|
60
|
-
timeout=None,
|
|
61
|
-
metadata=None):
|
|
62
|
-
return grpc.experimental.unary_unary(request, target, '/DataAccessLayer/GetPatient',
|
|
63
|
-
canvas__generated_dot_data__access__layer_dot_data__access__layer__pb2.ID.SerializeToString,
|
|
64
|
-
canvas__generated_dot_data__access__layer_dot_data__access__layer__pb2.Patient.FromString,
|
|
65
|
-
options, channel_credentials,
|
|
66
|
-
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Data Access Layer client.
|
|
3
|
-
|
|
4
|
-
This module is primarily responsible for executing calls to the gRPC service so that such details
|
|
5
|
-
are abstracted away from callers. The return values of the methods on the client class are protobufs
|
|
6
|
-
which must be mapped to user-facing objects.
|
|
7
|
-
"""
|
|
8
|
-
|
|
9
|
-
import functools
|
|
10
|
-
from collections.abc import Callable
|
|
11
|
-
from types import FunctionType
|
|
12
|
-
from typing import Any
|
|
13
|
-
|
|
14
|
-
import grpc
|
|
15
|
-
from grpc import StatusCode
|
|
16
|
-
|
|
17
|
-
from canvas_generated.data_access_layer.data_access_layer_pb2 import ID, Patient
|
|
18
|
-
from canvas_generated.data_access_layer.data_access_layer_pb2_grpc import (
|
|
19
|
-
DataAccessLayerStub,
|
|
20
|
-
)
|
|
21
|
-
from settings import DAL_TARGET
|
|
22
|
-
|
|
23
|
-
from . import exceptions
|
|
24
|
-
from .exceptions import DataModuleError
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
class _DataAccessLayerClientMeta(type):
|
|
28
|
-
"""
|
|
29
|
-
Metaclass for the Data Access Layer client class.
|
|
30
|
-
|
|
31
|
-
Wraps all methods of a class with a gRPC error handler.
|
|
32
|
-
"""
|
|
33
|
-
|
|
34
|
-
def __new__(cls, name: str, bases: tuple, attrs: dict) -> type:
|
|
35
|
-
for attr_name, attr_value in attrs.items():
|
|
36
|
-
if isinstance(attr_value, FunctionType):
|
|
37
|
-
attrs[attr_name] = cls.handle_grpc_errors(attr_value)
|
|
38
|
-
return super().__new__(cls, name, bases, attrs)
|
|
39
|
-
|
|
40
|
-
@classmethod
|
|
41
|
-
def handle_grpc_errors(cls, func: Callable[..., Any]) -> Callable[..., Any]:
|
|
42
|
-
"""
|
|
43
|
-
Decorator that wraps a try-except block around all class methods. gRPC errors are mapped to
|
|
44
|
-
a defined set of exceptions from a Data Access Layer exception hierarchy.
|
|
45
|
-
"""
|
|
46
|
-
|
|
47
|
-
@functools.wraps(func)
|
|
48
|
-
def wrapper(*args: Any, **kwargs: Any) -> Any:
|
|
49
|
-
try:
|
|
50
|
-
return func(*args, **kwargs)
|
|
51
|
-
except grpc.RpcError as error:
|
|
52
|
-
# gRPC exceptions aren't tightly defined, so we'll try to get a status code and
|
|
53
|
-
# error details, and handle it if we can't
|
|
54
|
-
try:
|
|
55
|
-
status_code = error.code()
|
|
56
|
-
except Exception:
|
|
57
|
-
status_code = None
|
|
58
|
-
|
|
59
|
-
try:
|
|
60
|
-
error_details = error.details()
|
|
61
|
-
except Exception:
|
|
62
|
-
error_details = ""
|
|
63
|
-
|
|
64
|
-
# Map more gRPC status codes to exception types as needed
|
|
65
|
-
match status_code:
|
|
66
|
-
case StatusCode.NOT_FOUND:
|
|
67
|
-
raise exceptions.DataModuleNotFoundError(error_details) from error
|
|
68
|
-
case _:
|
|
69
|
-
raise exceptions.DataModuleError from error
|
|
70
|
-
except Exception as exception:
|
|
71
|
-
raise DataModuleError from exception
|
|
72
|
-
|
|
73
|
-
return wrapper
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
class _DataAccessLayerClient(metaclass=_DataAccessLayerClientMeta):
|
|
77
|
-
"""
|
|
78
|
-
Data Access Layer client.
|
|
79
|
-
|
|
80
|
-
Do not instantiate -- just import the global variable DAL_CLIENT.
|
|
81
|
-
"""
|
|
82
|
-
|
|
83
|
-
def __init__(self) -> None:
|
|
84
|
-
self._channel = grpc.insecure_channel(DAL_TARGET)
|
|
85
|
-
self._stub = DataAccessLayerStub(self._channel)
|
|
86
|
-
|
|
87
|
-
def get_patient(self, id: str) -> Patient:
|
|
88
|
-
"""Given an ID, get the Patient from the Data Access Layer."""
|
|
89
|
-
return self._stub.GetPatient(ID(id=id))
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
# There should only be one instantiation of the client, so this global will act as a singleton in a
|
|
93
|
-
# way. This is the value that should be imported; no one should be instantiating the DAL client
|
|
94
|
-
# (hence the underscore notation indicating that the class is "private").
|
|
95
|
-
DAL_CLIENT = _DataAccessLayerClient()
|
canvas_sdk/data/exceptions.py
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"""Data Access Layer exceptions."""
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class DataModuleError(RuntimeError):
|
|
5
|
-
"""
|
|
6
|
-
General Data Access Layer error; base class and also used to represent errors of indeterminate
|
|
7
|
-
cause.
|
|
8
|
-
"""
|
|
9
|
-
|
|
10
|
-
pass
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
class DataModuleNotFoundError(DataModuleError):
|
|
14
|
-
"""Object not found error."""
|
|
15
|
-
|
|
16
|
-
pass
|
|
File without changes
|
|
File without changes
|