canvas 0.1.12__py3-none-any.whl → 0.1.14__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.12.dist-info → canvas-0.1.14.dist-info}/METADATA +42 -1
- canvas-0.1.14.dist-info/RECORD +90 -0
- canvas_cli/apps/plugin/__init__.py +3 -1
- canvas_cli/apps/plugin/plugin.py +74 -0
- canvas_cli/main.py +5 -3
- canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/protocols/my_protocol.py +3 -0
- canvas_generated/messages/effects_pb2.py +28 -0
- canvas_generated/messages/effects_pb2.pyi +147 -0
- canvas_generated/messages/effects_pb2_grpc.py +4 -0
- canvas_generated/messages/events_pb2.py +31 -0
- canvas_generated/messages/events_pb2.pyi +445 -0
- canvas_generated/messages/events_pb2_grpc.py +4 -0
- canvas_generated/messages/plugins_pb2.py +28 -0
- canvas_generated/messages/plugins_pb2.pyi +15 -0
- canvas_generated/messages/plugins_pb2_grpc.py +4 -0
- canvas_generated/services/plugin_runner_pb2.py +28 -0
- canvas_generated/services/plugin_runner_pb2.pyi +6 -0
- canvas_generated/services/plugin_runner_pb2_grpc.py +100 -0
- canvas_sdk/base.py +45 -0
- canvas_sdk/commands/base.py +61 -41
- canvas_sdk/commands/commands/assess.py +6 -2
- canvas_sdk/commands/commands/diagnose.py +4 -14
- canvas_sdk/commands/commands/goal.py +3 -2
- canvas_sdk/commands/commands/history_present_illness.py +2 -1
- canvas_sdk/commands/commands/medication_statement.py +6 -2
- canvas_sdk/commands/commands/plan.py +2 -1
- canvas_sdk/commands/commands/prescribe.py +24 -11
- canvas_sdk/commands/commands/questionnaire.py +6 -2
- canvas_sdk/commands/commands/reason_for_visit.py +13 -6
- canvas_sdk/commands/commands/stop_medication.py +6 -2
- canvas_sdk/commands/commands/update_goal.py +4 -1
- canvas_sdk/commands/tests/test_utils.py +31 -64
- canvas_sdk/commands/tests/tests.py +116 -65
- canvas_sdk/data/__init__.py +1 -0
- canvas_sdk/data/base.py +22 -0
- canvas_sdk/data/patient.py +6 -0
- canvas_sdk/data/staff.py +6 -0
- canvas_sdk/data/task.py +60 -0
- canvas_sdk/effects/__init__.py +1 -1
- canvas_sdk/effects/banner_alert/__init__.py +2 -0
- canvas_sdk/effects/banner_alert/add_banner_alert.py +49 -0
- canvas_sdk/effects/banner_alert/remove_banner_alert.py +20 -0
- canvas_sdk/effects/base.py +4 -6
- canvas_sdk/events/__init__.py +1 -1
- canvas_sdk/handlers/__init__.py +1 -0
- canvas_sdk/handlers/base.py +16 -0
- canvas_sdk/handlers/cron_task.py +35 -0
- canvas_sdk/protocols/base.py +2 -11
- canvas_sdk/utils/stats.py +27 -0
- logger/__init__.py +2 -0
- logger/logger.py +48 -0
- canvas-0.1.12.dist-info/RECORD +0 -66
- canvas_sdk/effects/banner_alert/banner_alert.py +0 -37
- canvas_sdk/effects/banner_alert/constants.py +0 -19
- {canvas-0.1.12.dist-info → canvas-0.1.14.dist-info}/WHEEL +0 -0
- {canvas-0.1.12.dist-info → canvas-0.1.14.dist-info}/entry_points.txt +0 -0
logger/logger.py
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
from pubsub.pubsub import Publisher
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class PubSubLogHandler(logging.Handler):
|
|
8
|
+
def __init__(self) -> None:
|
|
9
|
+
self.publisher = Publisher()
|
|
10
|
+
logging.Handler.__init__(self=self)
|
|
11
|
+
|
|
12
|
+
def emit(self, record) -> None:
|
|
13
|
+
message = self.format(record)
|
|
14
|
+
self.publisher.publish(message)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class PluginLogger:
|
|
18
|
+
def __init__(self) -> None:
|
|
19
|
+
self.logger = logging.getLogger("plugin_runner_logger")
|
|
20
|
+
self.logger.setLevel(logging.INFO)
|
|
21
|
+
log_prefix = os.getenv("HOSTNAME", "")
|
|
22
|
+
if log_prefix != "":
|
|
23
|
+
log_prefix = f"[{log_prefix}] "
|
|
24
|
+
formatter = logging.Formatter(f"{log_prefix}%(levelname)s %(asctime)s %(message)s")
|
|
25
|
+
|
|
26
|
+
streaming_handler = logging.StreamHandler()
|
|
27
|
+
streaming_handler.setFormatter(formatter)
|
|
28
|
+
self.logger.addHandler(streaming_handler)
|
|
29
|
+
|
|
30
|
+
if os.getenv("REDIS_ENDPOINT"):
|
|
31
|
+
pubsub_handler = PubSubLogHandler()
|
|
32
|
+
pubsub_handler.setFormatter(formatter)
|
|
33
|
+
self.logger.addHandler(pubsub_handler)
|
|
34
|
+
|
|
35
|
+
def debug(self, message) -> None:
|
|
36
|
+
self.logger.debug(message)
|
|
37
|
+
|
|
38
|
+
def info(self, message) -> None:
|
|
39
|
+
self.logger.info(message)
|
|
40
|
+
|
|
41
|
+
def warning(self, message) -> None:
|
|
42
|
+
self.logger.warning(message)
|
|
43
|
+
|
|
44
|
+
def error(self, message) -> None:
|
|
45
|
+
self.logger.error(message)
|
|
46
|
+
|
|
47
|
+
def critical(self, message) -> None:
|
|
48
|
+
self.logger.critical(message)
|
canvas-0.1.12.dist-info/RECORD
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
canvas_cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
canvas_cli/apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
-
canvas_cli/apps/auth/__init__.py,sha256=gIwJ2qWvRlLqbiRkudrGqTKV-orlb8OTkG487qoRda4,105
|
|
4
|
-
canvas_cli/apps/auth/tests.py,sha256=WK7hSLTK95gEweMRaj3RdPC-qSwjnuulxMUg6D0bY_k,4528
|
|
5
|
-
canvas_cli/apps/auth/utils.py,sha256=IH5oZB3pdlb4_FRfCZKkNTncx_kdKagpiBqlhtM8h2U,5434
|
|
6
|
-
canvas_cli/apps/logs/__init__.py,sha256=ehY9SRb6nBw81xZF50yyBlUZJtNR2VeVSNI5sFuWJ7o,64
|
|
7
|
-
canvas_cli/apps/logs/logs.py,sha256=Ixue8Z1wgxABunVIx6TzmsH6oZ0FPf2H51Sd3nFUnAI,1969
|
|
8
|
-
canvas_cli/apps/plugin/__init__.py,sha256=72Gcu2T9GsRLPbBApS9V0ZKSzehEE3hqgU_pie2T50Y,190
|
|
9
|
-
canvas_cli/apps/plugin/plugin.py,sha256=03Xq7Xhvu6GszGPtIDWB3iMr1i_AZ9UPc6est2qoUK4,9362
|
|
10
|
-
canvas_cli/apps/plugin/tests.py,sha256=_8fHTGlQermt4AVs20nsTYcs2bDRNEqr9CGE29pD6YQ,1035
|
|
11
|
-
canvas_cli/conftest.py,sha256=pGvVS6VT0Zll_Lp3ezLh2jykOk-2HTBVH8RP5FwLUVw,930
|
|
12
|
-
canvas_cli/main.py,sha256=RbGZtIBmm81GUkN_80u_VB-CL7kxwID_GoDbkSgo7LQ,3607
|
|
13
|
-
canvas_cli/templates/plugins/default/cookiecutter.json,sha256=dWEB3wJ8U4bko8jX26PgLLg_jgWlafLTNqsGnY1PUcg,124
|
|
14
|
-
canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/CANVAS_MANIFEST.json,sha256=9N0u5hN0GqjPvUh_B3YHtvyntEvxUGbInbQeprU0TS0,787
|
|
15
|
-
canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/README.md,sha256=7QdF2JWlWwq6Us9LzkO9XWJU4IU7Q6RD_w8ImcS-hrI,347
|
|
16
|
-
canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/protocols/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
|
-
canvas_cli/templates/plugins/default/{{ cookiecutter.__project_slug }}/protocols/my_protocol.py,sha256=rWil6oyKCULwCwKJDC_7j9gyOrShU8BxMV1RvlVsh0o,2189
|
|
18
|
-
canvas_cli/tests.py,sha256=LgiHeVHF5lxlH_pNT962uk-5D-JqNhhuu1LhSz90nK8,285
|
|
19
|
-
canvas_cli/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
|
-
canvas_cli/utils/context/__init__.py,sha256=HhYvI-hydP0mV18nJiU7uo5gk0yN7EYNgouxieoGDOE,102
|
|
21
|
-
canvas_cli/utils/context/context.py,sha256=Q-MniBuvzDKhLODOOrOVdaRTLz9Lp0m7cAz-i6YRRpA,5138
|
|
22
|
-
canvas_cli/utils/context/tests.py,sha256=aNmAggwvjKV-1WrgIvp66M46EX2QCbbHmity3bSCBTg,4211
|
|
23
|
-
canvas_cli/utils/print/__init__.py,sha256=zkRiQCUhPIB3wNGeJ1Hwfd12zJyvbRRiWqequJORvdE,88
|
|
24
|
-
canvas_cli/utils/print/print.py,sha256=GejLUtC5hfWuKHUBapyEwVHNIaIILxW60_xBQchiGpI,1420
|
|
25
|
-
canvas_cli/utils/print/tests.py,sha256=4kqp_uMpUUjSXokD_Hxs2aMyx50_JzGABAQoNC4XTrM,2376
|
|
26
|
-
canvas_cli/utils/urls/__init__.py,sha256=08hlrQhQ1pKBjlIRaC0j53IkgK723jfK8-j3djvR0ko,81
|
|
27
|
-
canvas_cli/utils/urls/tests.py,sha256=opXDF2i3lXTdsKJ7ywIRzWDDzZ5KAO0JbGIR3hbJdoE,407
|
|
28
|
-
canvas_cli/utils/urls/urls.py,sha256=KwWTh5ERrEsZEvdBrZpZB71xtyWkDuglpXUbycWmBOo,798
|
|
29
|
-
canvas_cli/utils/validators/__init__.py,sha256=rBvSR2O1hWkNAnUBdcr-zUkmqT796_A61b9pnvEhwrM,113
|
|
30
|
-
canvas_cli/utils/validators/manifest_schema.py,sha256=SIMpr_vTV8dtkO9cjsRnZZtRm5tgGkPR6QewTG8CztI,3117
|
|
31
|
-
canvas_cli/utils/validators/tests.py,sha256=cZHLSx7oteOfLOoU1tXGvw88n6itcvUT2B3ZBg-bmEY,1206
|
|
32
|
-
canvas_cli/utils/validators/validators.py,sha256=RKDKxIvZ1IuCPVuhQ1KHdpwu7aewAqT9ZX-nA-LZDdg,1614
|
|
33
|
-
canvas_sdk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
34
|
-
canvas_sdk/commands/__init__.py,sha256=4JTiljkBJ2Da2mU3_VAJ5dcpxg0X3QAocYJBBMJRpGc,1116
|
|
35
|
-
canvas_sdk/commands/base.py,sha256=qVgZMBFwdHw6Y66TN68QNlrewr2RqYSpiD1RIPUqUyk,4141
|
|
36
|
-
canvas_sdk/commands/commands/assess.py,sha256=uQgLwDp_9I8fjy3reA4g2RSvGY0Ee8UijfwpsvrMRS4,1636
|
|
37
|
-
canvas_sdk/commands/commands/diagnose.py,sha256=3bg4ScNzTKJa7sXv3xH9VKQSF_srX_G3m-Xpe-VKzzQ,1382
|
|
38
|
-
canvas_sdk/commands/commands/goal.py,sha256=WE5q8oFRtQmclqdCydG4WYW4hoodOvd9dEiSGkJfGqs,1527
|
|
39
|
-
canvas_sdk/commands/commands/history_present_illness.py,sha256=TQ-upptwYy-EKAegqT5jyU7csQpOZeqzp8VfBZTO0mw,366
|
|
40
|
-
canvas_sdk/commands/commands/medication_statement.py,sha256=Ww-WuMbvosfY7Uv8sTFUjPaBGxUoA-ptdcw6Q569DeY,937
|
|
41
|
-
canvas_sdk/commands/commands/plan.py,sha256=Q-e4wqTL6zafG7tOk_9R0mi5pDGqVXKxgbFjsB8CS4Q,350
|
|
42
|
-
canvas_sdk/commands/commands/prescribe.py,sha256=4EQHRhTtW_FHJDOaUgMu8lSgK8JKtUcNrOUs8hbTSdw,1574
|
|
43
|
-
canvas_sdk/commands/commands/questionnaire.py,sha256=XmwpANCHRV_kV2B_X7xqAJ39yX7bn9iT8XHuVoFfLFk,553
|
|
44
|
-
canvas_sdk/commands/commands/reason_for_visit.py,sha256=Zs2WKybbMWvimoZc4ehGxqXNWvX7c0snAe34adP2A4E,1252
|
|
45
|
-
canvas_sdk/commands/commands/stop_medication.py,sha256=5AIPEBBqT1mhpQOcCPh3FJfVq487Qtq3fNrWXqNxqhM,627
|
|
46
|
-
canvas_sdk/commands/commands/update_goal.py,sha256=yiOiHiSwfOzFUAz61C7i6WIJ2o-OUmjmXzm33GcIC3E,1499
|
|
47
|
-
canvas_sdk/commands/constants.py,sha256=LVAuWvxDuDzsW74JUWIzy_lMLvte0_Grlldr-YCjgBw,176
|
|
48
|
-
canvas_sdk/commands/tests/test_utils.py,sha256=gdW9e82-Z9Xm3LyYVa7Pd7sGreL-gtP854iC1UIhOEc,6287
|
|
49
|
-
canvas_sdk/commands/tests/tests.py,sha256=3ZIsIi0GmXV3jm8QmEhLn_FwL8qpW6yt5jjq9FQwHPA,13863
|
|
50
|
-
canvas_sdk/data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
51
|
-
canvas_sdk/effects/__init__.py,sha256=w3-PimW34Li9b8l_aWCyM7X8-jxMIM3e0ttXg44CV2k,62
|
|
52
|
-
canvas_sdk/effects/banner_alert/banner_alert.py,sha256=Vb23JpwAvfH5GoZpGcHzuWyNQ68cfLXOJjRgbPBaB_M,1013
|
|
53
|
-
canvas_sdk/effects/banner_alert/constants.py,sha256=kfd113dGYDm-g_B5iZb47VNpJjioGqQZSNRoR_rsktw,436
|
|
54
|
-
canvas_sdk/effects/base.py,sha256=h67VmsgMq_Dvr01w8UEf204UqiGjomYrMf_InHzibm4,688
|
|
55
|
-
canvas_sdk/events/__init__.py,sha256=oh1hgaoXbWmPBUUvMb_F0n0Chf5L42ZkKIvvLf-Olzk,74
|
|
56
|
-
canvas_sdk/protocols/__init__.py,sha256=GKtNMsJ5XaNOJUz9adE2_pONLeZqkZIrd9hXAU-jzvU,51
|
|
57
|
-
canvas_sdk/protocols/base.py,sha256=Xh5ZcyCJ3MQJKjWHs2ZdSnAjhO_ak8aUXIxfBLvunmc,369
|
|
58
|
-
canvas_sdk/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
59
|
-
canvas_sdk/utils/__init__.py,sha256=sFuhqcWvXb2-33FOuXZgWuUeC5jZL2MDoqjGoQZGwd8,60
|
|
60
|
-
canvas_sdk/utils/http.py,sha256=YOgUFp7FOFhbDwkGhCiD3JLZ342oNZR-qncMxv2qSjw,2159
|
|
61
|
-
canvas_sdk/utils/tests.py,sha256=t3MScbIfzXkQttMIvj0dRzJlFVS8LFU8WgWRrChM-H0,1931
|
|
62
|
-
canvas_sdk/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
63
|
-
canvas-0.1.12.dist-info/METADATA,sha256=vKcG04sZrNpBolVNTuwv_15r0QV26NFb_S9quv4qzbM,3532
|
|
64
|
-
canvas-0.1.12.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
|
65
|
-
canvas-0.1.12.dist-info/entry_points.txt,sha256=VSmSo1IZ3aEfL7enmLmlWSraS_IIkoXNVeyXzgRxFiY,46
|
|
66
|
-
canvas-0.1.12.dist-info/RECORD,,
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
from typing import Any
|
|
2
|
-
|
|
3
|
-
from pydantic import Field
|
|
4
|
-
|
|
5
|
-
from canvas_sdk.effects.banner_alert.constants import (
|
|
6
|
-
BannerAlertIntent,
|
|
7
|
-
BannerAlertPlacement,
|
|
8
|
-
)
|
|
9
|
-
from canvas_sdk.effects.base import _BaseEffect
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class BannerAlert(_BaseEffect):
|
|
13
|
-
"""
|
|
14
|
-
An Effect that will result in a banner alert in Canvas.
|
|
15
|
-
"""
|
|
16
|
-
|
|
17
|
-
class Meta:
|
|
18
|
-
effect_type = "SHOW_BANNER_ALERT"
|
|
19
|
-
|
|
20
|
-
patient_key: str
|
|
21
|
-
narrative: str = Field(max_length=90)
|
|
22
|
-
placements: list[BannerAlertPlacement] = Field(min_length=1)
|
|
23
|
-
intents: list[BannerAlertIntent] = Field(min_length=1)
|
|
24
|
-
|
|
25
|
-
@property
|
|
26
|
-
def values(self) -> dict[str, Any]:
|
|
27
|
-
"""The BannerAlert's values."""
|
|
28
|
-
return {
|
|
29
|
-
"narrative": self.narrative,
|
|
30
|
-
"placement": [p.value for p in self.placements],
|
|
31
|
-
"intent": [i.value for i in self.intents],
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
@property
|
|
35
|
-
def effect_payload(self) -> dict[str, Any]:
|
|
36
|
-
"""The payload of the effect."""
|
|
37
|
-
return {"patient": self.patient_key, "data": self.values}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
from enum import Enum
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class BannerAlertPlacement(Enum):
|
|
5
|
-
"""Where the BannerAlert should appear in the Canvas UI."""
|
|
6
|
-
|
|
7
|
-
CHART = "chart"
|
|
8
|
-
TIMELINE = "timeline"
|
|
9
|
-
APPOINTMENT_CARD = "appointment_card"
|
|
10
|
-
SCHEDULING_CARD = "scheduling_card"
|
|
11
|
-
PROFILE = "profile"
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class BannerAlertIntent(Enum):
|
|
15
|
-
"""The intent that should be conveyed in the BannerAlert."""
|
|
16
|
-
|
|
17
|
-
INFO = "info"
|
|
18
|
-
WARNING = "warning"
|
|
19
|
-
ALERT = "alert"
|
|
File without changes
|
|
File without changes
|