canvas 0.45.0__py3-none-any.whl → 0.46.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.
- {canvas-0.45.0.dist-info → canvas-0.46.0.dist-info}/METADATA +3 -2
- {canvas-0.45.0.dist-info → canvas-0.46.0.dist-info}/RECORD +62 -57
- canvas_generated/messages/effects_pb2.py +2 -2
- canvas_generated/messages/effects_pb2.pyi +10 -0
- canvas_generated/messages/events_pb2.py +2 -2
- canvas_generated/messages/events_pb2.pyi +18 -0
- canvas_sdk/commands/commands/exam.py +2 -1
- canvas_sdk/commands/commands/immunization_statement.py +32 -0
- canvas_sdk/commands/commands/questionnaire/__init__.py +18 -3
- canvas_sdk/commands/commands/questionnaire/question.py +3 -2
- canvas_sdk/commands/commands/questionnaire/toggle_questions.py +68 -0
- canvas_sdk/commands/commands/review_of_systems.py +2 -1
- canvas_sdk/v1/data/__init__.py +17 -3
- canvas_sdk/v1/data/allergy_intolerance.py +16 -19
- canvas_sdk/v1/data/appointment.py +10 -14
- canvas_sdk/v1/data/assessment.py +9 -10
- canvas_sdk/v1/data/banner_alert.py +12 -12
- canvas_sdk/v1/data/base.py +45 -1
- canvas_sdk/v1/data/billing.py +13 -18
- canvas_sdk/v1/data/business_line.py +7 -8
- canvas_sdk/v1/data/care_team.py +14 -17
- canvas_sdk/v1/data/charge_description_master.py +29 -0
- canvas_sdk/v1/data/claim.py +87 -95
- canvas_sdk/v1/data/claim_line_item.py +17 -18
- canvas_sdk/v1/data/command.py +8 -9
- canvas_sdk/v1/data/condition.py +9 -12
- canvas_sdk/v1/data/coverage.py +47 -53
- canvas_sdk/v1/data/detected_issue.py +16 -20
- canvas_sdk/v1/data/device.py +20 -21
- canvas_sdk/v1/data/discount.py +8 -8
- canvas_sdk/v1/data/imaging.py +24 -30
- canvas_sdk/v1/data/invoice.py +3 -3
- canvas_sdk/v1/data/lab.py +65 -84
- canvas_sdk/v1/data/line_item_transaction.py +7 -9
- canvas_sdk/v1/data/medication.py +14 -17
- canvas_sdk/v1/data/message.py +10 -17
- canvas_sdk/v1/data/note.py +27 -36
- canvas_sdk/v1/data/observation.py +24 -33
- canvas_sdk/v1/data/organization.py +14 -15
- canvas_sdk/v1/data/patient.py +57 -68
- canvas_sdk/v1/data/patient_consent.py +14 -19
- canvas_sdk/v1/data/payment_collection.py +7 -8
- canvas_sdk/v1/data/payor_specific_charge.py +10 -12
- canvas_sdk/v1/data/posting.py +10 -18
- canvas_sdk/v1/data/practicelocation.py +17 -21
- canvas_sdk/v1/data/protocol_override.py +8 -10
- canvas_sdk/v1/data/questionnaire.py +56 -73
- canvas_sdk/v1/data/reason_for_visit.py +7 -9
- canvas_sdk/v1/data/staff.py +61 -57
- canvas_sdk/v1/data/task.py +21 -31
- canvas_sdk/v1/data/team.py +15 -18
- canvas_sdk/v1/data/user.py +3 -3
- canvas_sdk/v1/data/utils.py +6 -0
- plugin_runner/allowed-module-imports.json +1340 -0
- plugin_runner/generate_allowed_imports.py +97 -0
- plugin_runner/plugin_runner.py +9 -0
- plugin_runner/sandbox.py +50 -60
- protobufs/canvas_generated/messages/effects.proto +6 -0
- protobufs/canvas_generated/messages/events.proto +12 -1
- settings.py +56 -22
- {canvas-0.45.0.dist-info → canvas-0.46.0.dist-info}/WHEEL +0 -0
- {canvas-0.45.0.dist-info → canvas-0.46.0.dist-info}/entry_points.txt +0 -0
canvas_sdk/v1/data/staff.py
CHANGED
|
@@ -2,6 +2,7 @@ from django.contrib.postgres.fields import ArrayField
|
|
|
2
2
|
from django.db import models
|
|
3
3
|
from timezone_utils.fields import TimeZoneField
|
|
4
4
|
|
|
5
|
+
from canvas_sdk.v1.data.base import IdentifiableModel, Model
|
|
5
6
|
from canvas_sdk.v1.data.common import (
|
|
6
7
|
AddressState,
|
|
7
8
|
AddressType,
|
|
@@ -12,53 +13,58 @@ from canvas_sdk.v1.data.common import (
|
|
|
12
13
|
PersonSex,
|
|
13
14
|
TaxIDType,
|
|
14
15
|
)
|
|
16
|
+
from canvas_sdk.v1.data.utils import create_key
|
|
15
17
|
|
|
16
18
|
|
|
17
|
-
class Staff(
|
|
19
|
+
class Staff(Model):
|
|
18
20
|
"""Staff."""
|
|
19
21
|
|
|
20
22
|
class Meta:
|
|
21
|
-
managed = False
|
|
22
23
|
db_table = "canvas_sdk_data_api_staff_001"
|
|
23
24
|
|
|
24
25
|
def __str__(self) -> str:
|
|
25
26
|
return f"{self.first_name} {self.last_name}"
|
|
26
27
|
|
|
27
|
-
id = models.CharField(
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
28
|
+
id = models.CharField(
|
|
29
|
+
max_length=32,
|
|
30
|
+
db_column="key",
|
|
31
|
+
unique=True,
|
|
32
|
+
editable=False,
|
|
33
|
+
default=create_key,
|
|
34
|
+
)
|
|
35
|
+
created = models.DateTimeField(auto_now_add=True)
|
|
36
|
+
modified = models.DateTimeField(auto_now=True)
|
|
37
|
+
prefix = models.CharField(max_length=100)
|
|
38
|
+
suffix = models.CharField(max_length=100)
|
|
39
|
+
first_name = models.CharField(max_length=255)
|
|
40
|
+
middle_name = models.CharField(max_length=255)
|
|
41
|
+
last_name = models.CharField(max_length=255)
|
|
42
|
+
maiden_name = models.CharField(max_length=255)
|
|
43
|
+
nickname = models.CharField(max_length=255)
|
|
38
44
|
previous_names = models.JSONField()
|
|
39
45
|
birth_date = models.DateField(null=True)
|
|
40
|
-
sex_at_birth = models.CharField(choices=PersonSex.choices)
|
|
41
|
-
sexual_orientation_term = models.CharField()
|
|
42
|
-
sexual_orientation_code = models.CharField()
|
|
43
|
-
gender_identity_term = models.CharField()
|
|
44
|
-
gender_identity_code = models.CharField()
|
|
45
|
-
preferred_pronouns = models.CharField()
|
|
46
|
-
biological_race_codes = ArrayField(models.CharField())
|
|
47
|
-
biological_race_terms = ArrayField(models.CharField())
|
|
48
|
-
cultural_ethnicity_codes = ArrayField(models.CharField())
|
|
49
|
-
cultural_ethnicity_terms = ArrayField(models.CharField())
|
|
46
|
+
sex_at_birth = models.CharField(choices=PersonSex.choices, max_length=3)
|
|
47
|
+
sexual_orientation_term = models.CharField(max_length=255)
|
|
48
|
+
sexual_orientation_code = models.CharField(max_length=255)
|
|
49
|
+
gender_identity_term = models.CharField(max_length=255)
|
|
50
|
+
gender_identity_code = models.CharField(max_length=255)
|
|
51
|
+
preferred_pronouns = models.CharField(max_length=255)
|
|
52
|
+
biological_race_codes = ArrayField(models.CharField(max_length=100))
|
|
53
|
+
biological_race_terms = ArrayField(models.CharField(max_length=255))
|
|
54
|
+
cultural_ethnicity_codes = ArrayField(models.CharField(max_length=100))
|
|
55
|
+
cultural_ethnicity_terms = ArrayField(models.CharField(max_length=255))
|
|
50
56
|
last_known_timezone = TimeZoneField(null=True)
|
|
51
57
|
active = models.BooleanField()
|
|
52
58
|
primary_practice_location = models.ForeignKey(
|
|
53
59
|
"v1.PracticeLocation", on_delete=models.DO_NOTHING, null=True
|
|
54
60
|
)
|
|
55
|
-
npi_number = models.CharField()
|
|
56
|
-
nadean_number = models.CharField()
|
|
57
|
-
group_npi_number = models.CharField()
|
|
61
|
+
npi_number = models.CharField(max_length=10)
|
|
62
|
+
nadean_number = models.CharField(max_length=20)
|
|
63
|
+
group_npi_number = models.CharField(max_length=10)
|
|
58
64
|
bill_through_organization = models.BooleanField()
|
|
59
|
-
tax_id = models.CharField()
|
|
60
|
-
tax_id_type = models.CharField(choices=TaxIDType.choices)
|
|
61
|
-
spi_number = models.CharField()
|
|
65
|
+
tax_id = models.CharField(max_length=25)
|
|
66
|
+
tax_id_type = models.CharField(choices=TaxIDType.choices, max_length=1)
|
|
67
|
+
spi_number = models.CharField(max_length=50)
|
|
62
68
|
# TODO - uncomment when Language is developed
|
|
63
69
|
# language = models.ForeignKey('v1.Language', on_delete=models.DO_NOTHING, related_name="staff_speakers", null=True)
|
|
64
70
|
# language_secondary = models.ForeignKey('v1.Language', on_delete=models.DO_NOTHING, related_name="staff_secondary_speakers", null=True)
|
|
@@ -70,61 +76,59 @@ class Staff(models.Model):
|
|
|
70
76
|
"v1.Staff", on_delete=models.DO_NOTHING, related_name="supervising_team", null=True
|
|
71
77
|
)
|
|
72
78
|
|
|
79
|
+
@property
|
|
80
|
+
def photo_url(self) -> str:
|
|
81
|
+
"""Return the URL of the staff's first photo."""
|
|
82
|
+
photo = self.photos.first()
|
|
83
|
+
return photo.url if photo else "https://d3hn0m4rbsz438.cloudfront.net/avatar1.png"
|
|
84
|
+
|
|
73
85
|
|
|
74
|
-
class StaffContactPoint(
|
|
86
|
+
class StaffContactPoint(IdentifiableModel):
|
|
75
87
|
"""StaffContactPoint."""
|
|
76
88
|
|
|
77
89
|
class Meta:
|
|
78
|
-
managed = False
|
|
79
90
|
db_table = "canvas_sdk_data_api_staffcontactpoint_001"
|
|
80
91
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
use = models.CharField(choices=ContactPointUse.choices)
|
|
86
|
-
use_notes = models.CharField()
|
|
92
|
+
system = models.CharField(choices=ContactPointSystem.choices, max_length=20)
|
|
93
|
+
value = models.CharField(max_length=100)
|
|
94
|
+
use = models.CharField(choices=ContactPointUse.choices, max_length=20)
|
|
95
|
+
use_notes = models.CharField(max_length=255)
|
|
87
96
|
rank = models.IntegerField()
|
|
88
|
-
state = models.CharField(choices=ContactPointState.choices)
|
|
97
|
+
state = models.CharField(choices=ContactPointState.choices, max_length=20)
|
|
89
98
|
staff = models.ForeignKey(Staff, on_delete=models.DO_NOTHING, related_name="telecom")
|
|
90
99
|
|
|
91
100
|
|
|
92
|
-
class StaffAddress(
|
|
101
|
+
class StaffAddress(IdentifiableModel):
|
|
93
102
|
"""StaffAddress."""
|
|
94
103
|
|
|
95
104
|
class Meta:
|
|
96
|
-
managed = False
|
|
97
105
|
db_table = "canvas_sdk_data_api_staffaddress_001"
|
|
98
106
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
use = models.CharField(choices=AddressUse.choices)
|
|
108
|
-
type = models.CharField(choices=AddressType.choices)
|
|
107
|
+
line1 = models.CharField(max_length=255)
|
|
108
|
+
line2 = models.CharField(max_length=255)
|
|
109
|
+
city = models.CharField(max_length=255)
|
|
110
|
+
district = models.CharField(max_length=255)
|
|
111
|
+
state_code = models.CharField(max_length=2)
|
|
112
|
+
postal_code = models.CharField(max_length=255)
|
|
113
|
+
use = models.CharField(choices=AddressUse.choices, max_length=10)
|
|
114
|
+
type = models.CharField(choices=AddressType.choices, max_length=10)
|
|
109
115
|
longitude = models.FloatField()
|
|
110
116
|
latitude = models.FloatField()
|
|
111
117
|
start = models.DateField()
|
|
112
118
|
end = models.DateField()
|
|
113
|
-
country = models.CharField()
|
|
114
|
-
state = models.CharField(choices=AddressState.choices)
|
|
119
|
+
country = models.CharField(max_length=255)
|
|
120
|
+
state = models.CharField(choices=AddressState.choices, max_length=20)
|
|
115
121
|
staff = models.ForeignKey(Staff, on_delete=models.DO_NOTHING, related_name="addresses")
|
|
116
122
|
|
|
117
123
|
|
|
118
|
-
class StaffPhoto(
|
|
124
|
+
class StaffPhoto(Model):
|
|
119
125
|
"""StaffPhoto."""
|
|
120
126
|
|
|
121
127
|
class Meta:
|
|
122
|
-
managed = False
|
|
123
128
|
db_table = "canvas_sdk_data_api_staffphoto_001"
|
|
124
129
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
modified = models.DateTimeField()
|
|
130
|
+
created = models.DateTimeField(auto_now_add=True)
|
|
131
|
+
modified = models.DateTimeField(auto_now=True)
|
|
128
132
|
staff = models.ForeignKey(Staff, on_delete=models.CASCADE, related_name="photos")
|
|
129
133
|
url = models.CharField(
|
|
130
134
|
default="https://d3hn0m4rbsz438.cloudfront.net/avatar1.png", max_length=512
|
canvas_sdk/v1/data/task.py
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
from django.contrib.postgres.fields import ArrayField
|
|
2
2
|
from django.db import models
|
|
3
3
|
|
|
4
|
+
from canvas_sdk.v1.data.base import IdentifiableModel, Model
|
|
4
5
|
from canvas_sdk.v1.data.common import ColorEnum, Origin
|
|
5
6
|
|
|
6
7
|
|
|
7
8
|
class TaskType(models.TextChoices):
|
|
8
9
|
"""Choices for task types."""
|
|
9
10
|
|
|
10
|
-
TASK = "
|
|
11
|
-
REMINDER = "
|
|
11
|
+
TASK = "T", "Task"
|
|
12
|
+
REMINDER = "R", "Reminder"
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
class EventType(models.TextChoices):
|
|
15
16
|
"""Choices for event types."""
|
|
16
17
|
|
|
17
|
-
EVENT_CHART_OPEN = "
|
|
18
|
+
EVENT_CHART_OPEN = "CHART_OPEN", "Chart Open"
|
|
18
19
|
|
|
19
20
|
|
|
20
21
|
class TaskStatus(models.TextChoices):
|
|
@@ -32,17 +33,14 @@ class TaskLabelModule(models.TextChoices):
|
|
|
32
33
|
TASKS = "tasks", "Tasks"
|
|
33
34
|
|
|
34
35
|
|
|
35
|
-
class Task(
|
|
36
|
+
class Task(IdentifiableModel):
|
|
36
37
|
"""Task."""
|
|
37
38
|
|
|
38
39
|
class Meta:
|
|
39
|
-
managed = False
|
|
40
40
|
db_table = "canvas_sdk_data_api_task_001"
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
created = models.DateTimeField()
|
|
45
|
-
modified = models.DateTimeField()
|
|
42
|
+
created = models.DateTimeField(auto_now_add=True)
|
|
43
|
+
modified = models.DateTimeField(auto_now=True)
|
|
46
44
|
creator = models.ForeignKey(
|
|
47
45
|
"v1.Staff", on_delete=models.DO_NOTHING, related_name="creator_tasks", null=True
|
|
48
46
|
)
|
|
@@ -54,25 +52,22 @@ class Task(models.Model):
|
|
|
54
52
|
patient = models.ForeignKey(
|
|
55
53
|
"v1.Patient", on_delete=models.DO_NOTHING, blank=True, related_name="tasks", null=True
|
|
56
54
|
)
|
|
57
|
-
task_type = models.CharField(choices=TaskType.choices)
|
|
58
|
-
tag = models.CharField()
|
|
59
|
-
title = models.
|
|
55
|
+
task_type = models.CharField(choices=TaskType.choices, max_length=1)
|
|
56
|
+
tag = models.CharField(max_length=64)
|
|
57
|
+
title = models.TextField()
|
|
60
58
|
due = models.DateTimeField(null=True)
|
|
61
|
-
due_event = models.CharField(choices=EventType.choices, blank=True)
|
|
62
|
-
status = models.CharField(choices=TaskStatus.choices)
|
|
59
|
+
due_event = models.CharField(choices=EventType.choices, blank=True, max_length=16)
|
|
60
|
+
status = models.CharField(choices=TaskStatus.choices, max_length=9)
|
|
63
61
|
|
|
64
62
|
|
|
65
|
-
class TaskComment(
|
|
63
|
+
class TaskComment(IdentifiableModel):
|
|
66
64
|
"""TaskComment."""
|
|
67
65
|
|
|
68
66
|
class Meta:
|
|
69
|
-
managed = False
|
|
70
67
|
db_table = "canvas_sdk_data_api_taskcomment_001"
|
|
71
68
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
created = models.DateTimeField()
|
|
75
|
-
modified = models.DateTimeField()
|
|
69
|
+
created = models.DateTimeField(auto_now_add=True)
|
|
70
|
+
modified = models.DateTimeField(auto_now=True)
|
|
76
71
|
creator = models.ForeignKey(
|
|
77
72
|
"v1.Staff", on_delete=models.DO_NOTHING, related_name="comments", null=True
|
|
78
73
|
)
|
|
@@ -80,32 +75,27 @@ class TaskComment(models.Model):
|
|
|
80
75
|
body = models.TextField()
|
|
81
76
|
|
|
82
77
|
|
|
83
|
-
class TaskLabel(
|
|
78
|
+
class TaskLabel(IdentifiableModel):
|
|
84
79
|
"""TaskLabel."""
|
|
85
80
|
|
|
86
81
|
class Meta:
|
|
87
|
-
managed = False
|
|
88
82
|
db_table = "canvas_sdk_data_api_tasklabel_001"
|
|
89
83
|
|
|
90
|
-
id = models.UUIDField()
|
|
91
|
-
dbid = models.BigIntegerField(primary_key=True)
|
|
92
84
|
tasks = models.ManyToManyField(Task, related_name="labels", through="TaskTaskLabel") # type: ignore[var-annotated]
|
|
93
85
|
position = models.IntegerField()
|
|
94
|
-
color = models.CharField(choices=ColorEnum.choices)
|
|
95
|
-
task_association = ArrayField(models.CharField(choices=Origin.choices))
|
|
96
|
-
name = models.CharField()
|
|
86
|
+
color = models.CharField(choices=ColorEnum.choices, max_length=50)
|
|
87
|
+
task_association = ArrayField(models.CharField(choices=Origin.choices, max_length=32))
|
|
88
|
+
name = models.CharField(max_length=255)
|
|
97
89
|
active = models.BooleanField()
|
|
98
|
-
modules = ArrayField(models.CharField(choices=TaskLabelModule.choices))
|
|
90
|
+
modules = ArrayField(models.CharField(choices=TaskLabelModule.choices, max_length=32))
|
|
99
91
|
|
|
100
92
|
|
|
101
|
-
class TaskTaskLabel(
|
|
93
|
+
class TaskTaskLabel(Model):
|
|
102
94
|
"""M2M for Task -> TaskLabels."""
|
|
103
95
|
|
|
104
96
|
class Meta:
|
|
105
|
-
managed = False
|
|
106
97
|
db_table = "canvas_sdk_data_api_tasktasklabel_001"
|
|
107
98
|
|
|
108
|
-
dbid = models.BigIntegerField(primary_key=True)
|
|
109
99
|
task_label = models.ForeignKey(TaskLabel, on_delete=models.DO_NOTHING, null=True)
|
|
110
100
|
task = models.ForeignKey(Task, on_delete=models.DO_NOTHING, null=True)
|
|
111
101
|
|
canvas_sdk/v1/data/team.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from django.contrib.postgres.fields import ArrayField
|
|
2
2
|
from django.db import models
|
|
3
3
|
|
|
4
|
+
from canvas_sdk.v1.data.base import IdentifiableModel
|
|
4
5
|
from canvas_sdk.v1.data.common import ContactPointState, ContactPointSystem, ContactPointUse
|
|
5
6
|
|
|
6
7
|
|
|
@@ -38,41 +39,37 @@ class TeamResponsibility(models.TextChoices):
|
|
|
38
39
|
REVIEW_COVERAGES = "REVIEW_COVERAGES", "Review incomplete patient coverages"
|
|
39
40
|
|
|
40
41
|
|
|
41
|
-
class Team(
|
|
42
|
+
class Team(IdentifiableModel):
|
|
42
43
|
"""Team."""
|
|
43
44
|
|
|
44
45
|
class Meta:
|
|
45
|
-
managed = False
|
|
46
46
|
db_table = "canvas_sdk_data_api_team_001"
|
|
47
47
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
members = models.ManyToManyField(
|
|
48
|
+
created = models.DateTimeField(auto_now_add=True)
|
|
49
|
+
modified = models.DateTimeField(auto_now=True)
|
|
50
|
+
name = models.CharField(max_length=200)
|
|
51
|
+
responsibilities = ArrayField(
|
|
52
|
+
models.CharField(choices=TeamResponsibility.choices, max_length=64)
|
|
53
|
+
)
|
|
54
|
+
members = models.ManyToManyField(
|
|
55
55
|
"v1.Staff",
|
|
56
56
|
related_name="teams",
|
|
57
57
|
db_table="canvas_sdk_data_api_team_members_001",
|
|
58
58
|
)
|
|
59
59
|
|
|
60
60
|
|
|
61
|
-
class TeamContactPoint(
|
|
61
|
+
class TeamContactPoint(IdentifiableModel):
|
|
62
62
|
"""TeamContactPoint."""
|
|
63
63
|
|
|
64
64
|
class Meta:
|
|
65
|
-
managed = False
|
|
66
65
|
db_table = "canvas_sdk_data_api_teamcontactpoint_001"
|
|
67
66
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
use = models.CharField(choices=ContactPointUse.choices)
|
|
73
|
-
use_notes = models.CharField()
|
|
67
|
+
system = models.CharField(choices=ContactPointSystem.choices, max_length=20)
|
|
68
|
+
value = models.CharField(max_length=100)
|
|
69
|
+
use = models.CharField(choices=ContactPointUse.choices, max_length=20)
|
|
70
|
+
use_notes = models.CharField(max_length=255)
|
|
74
71
|
rank = models.IntegerField()
|
|
75
|
-
state = models.CharField(choices=ContactPointState.choices)
|
|
72
|
+
state = models.CharField(choices=ContactPointState.choices, max_length=20)
|
|
76
73
|
team = models.ForeignKey(Team, on_delete=models.DO_NOTHING, related_name="telecom")
|
|
77
74
|
|
|
78
75
|
|
canvas_sdk/v1/data/user.py
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
from django.db import models
|
|
2
2
|
|
|
3
|
+
from canvas_sdk.v1.data.base import Model
|
|
3
4
|
|
|
4
|
-
|
|
5
|
+
|
|
6
|
+
class CanvasUser(Model):
|
|
5
7
|
"""A class representing a Canvas User."""
|
|
6
8
|
|
|
7
9
|
class Meta:
|
|
8
|
-
managed = False
|
|
9
10
|
db_table = "canvas_sdk_data_api_auth_user_001"
|
|
10
11
|
|
|
11
|
-
dbid = models.BigIntegerField(db_column="dbid", primary_key=True)
|
|
12
12
|
email = models.EmailField(db_column="email")
|
|
13
13
|
phone_number = models.CharField(db_column="phone_number", max_length=255)
|
|
14
14
|
last_invite_date_time = models.DateTimeField()
|
canvas_sdk/v1/data/utils.py
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import uuid
|
|
1
2
|
from collections.abc import Sequence
|
|
2
3
|
from decimal import Decimal
|
|
3
4
|
|
|
@@ -7,4 +8,9 @@ def quantize(deci: Decimal | float | str | tuple[int, Sequence[int], int]) -> De
|
|
|
7
8
|
return Decimal(deci).quantize(Decimal(".01"))
|
|
8
9
|
|
|
9
10
|
|
|
11
|
+
def create_key() -> str:
|
|
12
|
+
"""Generates a unique key using UUID4."""
|
|
13
|
+
return uuid.uuid4().hex
|
|
14
|
+
|
|
15
|
+
|
|
10
16
|
__exports__ = ()
|