canvas 0.19.0__py3-none-any.whl → 0.19.1__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.19.0
3
+ Version: 0.19.1
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
@@ -1,4 +1,4 @@
1
- settings.py,sha256=wtQMRHsbynzEjZb5WmUMV3q27oWc6prLS9ztnEAsqMg,2829
1
+ settings.py,sha256=Mk332hOSmNyLVRKLUhtc1Kll-P5Iun7vbkZ0chwnOAs,3176
2
2
  canvas_cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  canvas_cli/conftest.py,sha256=0mEjjU7_w9nq-HCvscxFJClw-EeyQYujNLLRPssksZQ,931
4
4
  canvas_cli/main.py,sha256=L6JQkt1yxy30cA3-M9v7JD8WMW4i0M5GPr9kZetAito,2728
@@ -110,7 +110,7 @@ canvas_generated/messages/plugins_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCN
110
110
  canvas_generated/services/plugin_runner_pb2.py,sha256=RfAo_imYoSuoexq-1IHhMhXZgQpzq91pqugxsigL8NU,1557
111
111
  canvas_generated/services/plugin_runner_pb2.pyi,sha256=1w-Pa4k7HtlmQAr7B6sgV64zdZplBKQKHN-S8bjwO3w,265
112
112
  canvas_generated/services/plugin_runner_pb2_grpc.py,sha256=EzJJVkP_AZ3dwBA7OxUito0NSalRmjjg8q9TZ_P18ww,4549
113
- canvas_sdk/__init__.py,sha256=d7V1Qsp4hSqp8opmvqp-0J33uibArUjwENMfzSDAdZg,102
113
+ canvas_sdk/__init__.py,sha256=7IuwjhqIaOO5BgCfXi-B1eV6XfK9Ku5PHPWuTGeDNgU,151
114
114
  canvas_sdk/base.py,sha256=aaWilIx70lsAE76x7QaJolyIvcFnXDGPw1UMv9t0FDw,2035
115
115
  canvas_sdk/commands/__init__.py,sha256=cNQy1Y_Ji3cPush2hbaoXC3pbIFmobv_Vm-UG0w0hlc,2696
116
116
  canvas_sdk/commands/base.py,sha256=ScfOo4QXTInhTf6OGLT5dEu81yhZAcgVT8qxwIKWbow,5155
@@ -190,7 +190,6 @@ canvas_sdk/templates/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
190
190
  canvas_sdk/templates/tests/test_utils.py,sha256=VRahmmVwXKcp1NMLoA3BZL4cFFXzFnD-i5IUpcEeXTg,1832
191
191
  canvas_sdk/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
192
192
  canvas_sdk/utils/__init__.py,sha256=nZEfYeU-qNZBOh39b8zAuEh0Wzh2PgXxs0NRKKe66Pg,184
193
- canvas_sdk/utils/db.py,sha256=0AO5bhu-k9OsAHpXe1RHzyDZnBGHUEzrv8-vYtTIoeA,592
194
193
  canvas_sdk/utils/http.py,sha256=McFtcrgdR2W8XguTaTF54O5Xf5r5buoYDldDM5H5ahY,5846
195
194
  canvas_sdk/utils/plugins.py,sha256=853MW2fiLpyG3o9ISEawAthQeRiZP73cai5Tngwu4MY,767
196
195
  canvas_sdk/utils/stats.py,sha256=sJhIW_IssUVefQN6rrUAt1P0KvVIUIYcnpZlMHLibNA,732
@@ -255,7 +254,7 @@ plugin_runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
255
254
  plugin_runner/authentication.py,sha256=SDPso2AogtLAV_H0LuMDp99IMZuF3oTq-Q_AXAvJ8uc,1116
256
255
  plugin_runner/aws_headers.py,sha256=DenX_nAMVhXMJZw88PLZbqJsi5_XriNtr3jE-eJqHY4,2773
257
256
  plugin_runner/exceptions.py,sha256=YnRZiQVzbU3HrVlmEXLje_np99009YnhTRVHHyBCtqc,433
258
- plugin_runner/plugin_installer.py,sha256=0gHMpI4CDkWljbU7HLhbPjl2E_oHxDZMlmPtTqCyS9o,7748
257
+ plugin_runner/plugin_installer.py,sha256=8hWllx7YciatEozFRwcp5Y_L_KyEi2e8CGienRWrZs0,7375
259
258
  plugin_runner/plugin_runner.py,sha256=h_FHStJrvRiG9DSf8uXHKFb4aby2wBzLAe10Ov4xnas,16437
260
259
  plugin_runner/sandbox.py,sha256=P64SKpKZdoJwk2NsirGRKq7xjygBtvdipIAVSD5roY8,14509
261
260
  plugin_runner/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -329,7 +328,7 @@ protobufs/canvas_generated/messages/plugins.proto,sha256=oNainUPWFYQjgCX7bJEPI9_
329
328
  protobufs/canvas_generated/services/plugin_runner.proto,sha256=doadBKn5k4xAtOgR-q_pEvW4yzxpUaHNOowMG6CL5GY,304
330
329
  pubsub/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
331
330
  pubsub/pubsub.py,sha256=pyTW0JU8mtaqiAV6g6xjZwel1CVy2EonPMU-_vkmhUM,1044
332
- canvas-0.19.0.dist-info/METADATA,sha256=9BEPGPmvmAz3MMnfXYJlCQ7mIWYBavowj7fLjb4emqQ,4375
333
- canvas-0.19.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
334
- canvas-0.19.0.dist-info/entry_points.txt,sha256=0Vs_9GmTVUNniH6eDBlRPgofmADMV4BES6Ao26M4AbM,47
335
- canvas-0.19.0.dist-info/RECORD,,
331
+ canvas-0.19.1.dist-info/METADATA,sha256=7w1TpwcKJ-BjC9HRzHYW4OW6LzUFr1gHFxlqRrIkX-U,4375
332
+ canvas-0.19.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
333
+ canvas-0.19.1.dist-info/entry_points.txt,sha256=0Vs_9GmTVUNniH6eDBlRPgofmADMV4BES6Ao26M4AbM,47
334
+ canvas-0.19.1.dist-info/RECORD,,
canvas_sdk/__init__.py CHANGED
@@ -1,7 +1,9 @@
1
1
  import os
2
+ import sys
2
3
 
3
4
  os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
4
5
 
5
- import django
6
+ if "mypy" not in sys.argv[0]:
7
+ import django
6
8
 
7
- django.setup()
9
+ django.setup()
@@ -6,7 +6,7 @@ import tempfile
6
6
  from collections.abc import Generator
7
7
  from contextlib import contextmanager
8
8
  from pathlib import Path
9
- from typing import Any, TypedDict
9
+ from typing import TypedDict, cast
10
10
  from urllib import parse
11
11
 
12
12
  import psycopg
@@ -30,41 +30,32 @@ from settings import (
30
30
  UPLOAD_TO_PREFIX = "plugins"
31
31
 
32
32
 
33
- def get_database_dict_from_url() -> dict[str, Any]:
34
- """Creates a psycopg ready dictionary from the home-app database URL."""
35
- parsed_url = parse.urlparse(os.getenv("DATABASE_URL"))
36
- db_name = parsed_url.path[1:]
37
- return {
38
- "dbname": db_name,
39
- "user": parsed_url.username,
40
- "password": parsed_url.password,
41
- "host": parsed_url.hostname,
42
- "port": parsed_url.port,
43
- }
33
+ def open_database_connection() -> Connection:
34
+ """Opens a psycopg connection to the home-app database.
44
35
 
36
+ When running within Aptible, use the database URL, otherwise pull from
37
+ the environment variables.
38
+ """
39
+ if os.getenv("DATABASE_URL"):
40
+ parsed_url = parse.urlparse(os.getenv("DATABASE_URL"))
41
+
42
+ return psycopg.connect(
43
+ dbname=cast(str, parsed_url.path[1:]),
44
+ user=cast(str, parsed_url.username),
45
+ password=cast(str, parsed_url.password),
46
+ host=cast(str, parsed_url.hostname),
47
+ port=parsed_url.port,
48
+ )
45
49
 
46
- def get_database_dict_from_env() -> dict[str, Any]:
47
- """Creates a psycopg ready dictionary from the environment variables."""
48
50
  APP_NAME = os.getenv("APP_NAME")
49
51
 
50
- return {
51
- "dbname": APP_NAME,
52
- "user": os.getenv("DB_USERNAME", "app"),
53
- "password": os.getenv("DB_PASSWORD", "app"),
54
- "host": os.getenv("DB_HOST", f"{APP_NAME}-db"),
55
- "port": os.getenv("DB_PORT", "5432"),
56
- }
57
-
58
-
59
- def open_database_connection() -> Connection:
60
- """Opens a psycopg connection to the home-app database."""
61
- # When running within Aptible, use the database URL, otherwise pull from the environment variables.
62
- if os.getenv("DATABASE_URL"):
63
- database_dict = get_database_dict_from_url()
64
- else:
65
- database_dict = get_database_dict_from_env()
66
- conn = psycopg.connect(**database_dict)
67
- return conn
52
+ return psycopg.connect(
53
+ dbname=APP_NAME,
54
+ user=os.getenv("DB_USERNAME", "app"),
55
+ password=os.getenv("DB_PASSWORD", "app"),
56
+ host=os.getenv("DB_HOST", f"{APP_NAME}-db"),
57
+ port=os.getenv("DB_PORT", "5432"),
58
+ )
68
59
 
69
60
 
70
61
  class PluginAttributes(TypedDict):
settings.py CHANGED
@@ -1,11 +1,10 @@
1
1
  import os
2
2
  import sys
3
+ from urllib import parse
3
4
 
4
5
  from dotenv import load_dotenv
5
6
  from env_tools import env_to_bool
6
7
 
7
- from canvas_sdk.utils.db import get_database_dict_from_url
8
-
9
8
  load_dotenv()
10
9
 
11
10
  ENV = os.getenv("ENV", "development")
@@ -40,19 +39,30 @@ CANVAS_SDK_DB_HOST = os.getenv("CANVAS_SDK_DB_HOST", "home-app-db")
40
39
  CANVAS_SDK_DB_PORT = os.getenv("CANVAS_SDK_DB_PORT", "5432")
41
40
 
42
41
  if os.getenv("DATABASE_URL"):
43
- database_dict = get_database_dict_from_url()
42
+ parsed_url = parse.urlparse(os.getenv("DATABASE_URL"))
43
+
44
+ DATABASES = {
45
+ "default": {
46
+ "ENGINE": "django.db.backends.postgresql",
47
+ "NAME": parsed_url.path[1:],
48
+ "USER": os.getenv("CANVAS_SDK_DATABASE_ROLE"),
49
+ "PASSWORD": os.getenv("CANVAS_SDK_DATABASE_ROLE_PASSWORD"),
50
+ "HOST": parsed_url.hostname,
51
+ "PORT": parsed_url.port,
52
+ }
53
+ }
44
54
  else:
45
- database_dict = {
46
- "ENGINE": "django.db.backends.postgresql",
47
- "NAME": CANVAS_SDK_DB_NAME,
48
- "USER": CANVAS_SDK_DB_USERNAME,
49
- "PASSWORD": CANVAS_SDK_DB_PASSWORD,
50
- "HOST": CANVAS_SDK_DB_HOST,
51
- "PORT": CANVAS_SDK_DB_PORT,
55
+ DATABASES = {
56
+ "default": {
57
+ "ENGINE": "django.db.backends.postgresql",
58
+ "NAME": CANVAS_SDK_DB_NAME,
59
+ "USER": CANVAS_SDK_DB_USERNAME,
60
+ "PASSWORD": CANVAS_SDK_DB_PASSWORD,
61
+ "HOST": CANVAS_SDK_DB_HOST,
62
+ "PORT": CANVAS_SDK_DB_PORT,
63
+ }
52
64
  }
53
65
 
54
- DATABASES = {"default": database_dict}
55
-
56
66
  AWS_ACCESS_KEY_ID = os.getenv("AWS_ACCESS_KEY_ID", "")
57
67
  AWS_SECRET_ACCESS_KEY = os.getenv("AWS_SECRET_ACCESS_KEY", "")
58
68
  AWS_REGION = os.getenv("AWS_REGION", "us-west-2")
canvas_sdk/utils/db.py DELETED
@@ -1,17 +0,0 @@
1
- import os
2
- from typing import Any
3
- from urllib import parse
4
-
5
-
6
- def get_database_dict_from_url() -> dict[str, Any]:
7
- """Retrieves the database URL for the data module connection formatted for Django settings."""
8
- parsed_url = parse.urlparse(os.getenv("DATABASE_URL"))
9
- db_name = parsed_url.path[1:]
10
- return {
11
- "ENGINE": "django.db.backends.postgresql",
12
- "NAME": db_name,
13
- "USER": os.getenv("CANVAS_SDK_DATABASE_ROLE"),
14
- "PASSWORD": os.getenv("CANVAS_SDK_DATABASE_ROLE_PASSWORD"),
15
- "HOST": parsed_url.hostname,
16
- "PORT": parsed_url.port,
17
- }