Skip to content

Commit 1f6585a

Browse files
feat: add data attributes definition for learning subdomain
1 parent 8f1ad8c commit 1f6585a

File tree

8 files changed

+182
-3
lines changed

8 files changed

+182
-3
lines changed

CHANGELOG.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ Unreleased
1515
~~~~~~~~~~
1616
Added
1717
_____
18-
* Add tooling needed to create and trigger events in Open edX platform
18+
* Add tooling needed to create and trigger events in Open edX platform.
19+
* Add Data Attribute classes used as arguments by Open edX Events.
1920

2021

2122
[0.2.0] - 2021-07-28

openedx_events/learning/data.py

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
"""
2+
Data attributes for events within the architecture subdomain `learning`.
3+
4+
These attributes follow the form of attr objects specified in OEP-49 data
5+
pattern.
6+
"""
7+
from datetime import datetime
8+
9+
import attr
10+
from opaque_keys.edx.keys import CourseKey
11+
12+
13+
@attr.s(frozen=True)
14+
class UserNonPersonalData:
15+
"""
16+
Attributes defined for Open edX user object based on non-PII data.
17+
18+
Arguments:
19+
id (int): unique identifier for the Django User object.
20+
is_active (bool): indicates whether the user is active.
21+
"""
22+
23+
id = attr.ib(type=int)
24+
is_active = attr.ib(type=bool)
25+
26+
27+
@attr.s(frozen=True)
28+
class UserPersonalData:
29+
"""
30+
Attributes defined for Open edX user object based on PII data.
31+
32+
Arguments:
33+
username (str): username associated with the Open edX user.
34+
email (str): email associated with the Open edX user.
35+
name (str): email associated with the Open edX user's profile.
36+
"""
37+
38+
username = attr.ib(type=str)
39+
email = attr.ib(type=str)
40+
name = attr.ib(type=str, factory=str)
41+
42+
43+
@attr.s(frozen=True)
44+
class UserData(UserNonPersonalData):
45+
"""
46+
Attributes defined for Open edX user object.
47+
48+
This class extends UserNonPersonalData to include PII data completing the
49+
user object.
50+
51+
Arguments:
52+
pii (UserPersonalData): user's Personal Identifiable Information.
53+
"""
54+
55+
pii = attr.ib(type=UserPersonalData)
56+
57+
58+
@attr.s(frozen=True)
59+
class CourseData:
60+
"""
61+
Attributes defined for Open edX Course Overview object.
62+
63+
Arguments:
64+
course_key (str): identifier of the Course object.
65+
display_name (str): display name associated with the course.
66+
start (datetime): start date for the course.
67+
end (datetime): end date for the course.
68+
"""
69+
70+
course_key = attr.ib(type=CourseKey)
71+
display_name = attr.ib(type=str, factory=str)
72+
start = attr.ib(type=datetime, default=None)
73+
end = attr.ib(type=datetime, default=None)
74+
75+
76+
@attr.s(frozen=True)
77+
class CourseEnrollmentData:
78+
"""
79+
Attributes defined for Open edX Course Enrollment object.
80+
81+
Arguments:
82+
user (UserData): user associated with the Course Enrollment.
83+
course (CourseData): course where the user is enrolled in.
84+
mode (str): course mode associated with the course.
85+
is_active (bool): whether the enrollment is active.
86+
creation_date (datetime): creation date of the enrollment.
87+
created_by (UserData): if available, who created the enrollment.
88+
"""
89+
90+
user = attr.ib(type=UserData)
91+
course = attr.ib(type=CourseData)
92+
mode = attr.ib(type=str)
93+
is_active = attr.ib(type=bool)
94+
creation_date = attr.ib(type=datetime)
95+
created_by = attr.ib(type=UserData, default=None)
96+
97+
98+
@attr.s(frozen=True)
99+
class CertificateData:
100+
"""
101+
Attributes defined for Open edX Certificate data object.
102+
103+
Arguments:
104+
user (UserData): user associated with the Certificate.
105+
course (CourseData): course where the user obtained the certificate.
106+
mode (str): course mode associated with the course.
107+
grade (str): user's grade in this course run.
108+
current_status (str): current certificate status.
109+
previous_status (str): if available, pre-event certificate status.
110+
download_url (str): URL where the PDF version of the certificate.
111+
name (str): user's name.
112+
"""
113+
114+
user = attr.ib(type=UserData)
115+
course = attr.ib(type=CourseData)
116+
mode = attr.ib(type=str)
117+
grade = attr.ib(type=str)
118+
download_url = attr.ib(type=str)
119+
name = attr.ib(type=str)
120+
current_status = attr.ib(type=str)
121+
previous_status = attr.ib(type=str, factory=str)
122+
123+
124+
@attr.s(frozen=True)
125+
class CohortData:
126+
"""
127+
Attributes defined for Open edX Cohort Membership object.
128+
129+
Arguments:
130+
user (UserData): user assigned to the group.
131+
course (CourseData): course associated with the course group.
132+
name (str): name of the cohort group.
133+
"""
134+
135+
user = attr.ib(type=UserData)
136+
course = attr.ib(type=CourseData)
137+
name = attr.ib(type=str)

requirements/base.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33

44
django
55
attrs
6+
edx-opaque-keys[django]

requirements/base.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,15 @@ django==2.2.24
1010
# via
1111
# -c requirements/constraints.txt
1212
# -r requirements/base.in
13+
edx-opaque-keys[django]==2.2.2
14+
# via -r requirements/base.in
15+
pbr==5.6.0
16+
# via stevedore
17+
pymongo==3.11.4
18+
# via edx-opaque-keys
1319
pytz==2021.1
1420
# via django
1521
sqlparse==0.4.1
1622
# via django
23+
stevedore==3.3.0
24+
# via edx-opaque-keys

requirements/dev.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ docutils==0.17.1
8888
# readme-renderer
8989
edx-lint==5.0.0
9090
# via -r requirements/quality.txt
91+
edx-opaque-keys[django]==2.2.2
92+
# via -r requirements/quality.txt
9193
filelock==3.0.12
9294
# via
9395
# -r requirements/ci.txt
@@ -213,6 +215,10 @@ pylint-plugin-utils==0.6
213215
# -r requirements/quality.txt
214216
# pylint-celery
215217
# pylint-django
218+
pymongo==3.11.4
219+
# via
220+
# -r requirements/quality.txt
221+
# edx-opaque-keys
216222
pyparsing==2.4.7
217223
# via
218224
# -r requirements/ci.txt
@@ -283,6 +289,7 @@ stevedore==3.3.0
283289
# via
284290
# -r requirements/quality.txt
285291
# code-annotations
292+
# edx-opaque-keys
286293
text-unidecode==1.3
287294
# via
288295
# -r requirements/quality.txt

requirements/doc.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ docutils==0.17.1
4242
# readme-renderer
4343
# restructuredtext-lint
4444
# sphinx
45+
edx-opaque-keys[django]==2.2.2
46+
# via -r requirements/test.txt
4547
edx-sphinx-theme==3.0.0
4648
# via -r requirements/doc.in
4749
idna==3.2
@@ -84,6 +86,10 @@ pygments==2.9.0
8486
# doc8
8587
# readme-renderer
8688
# sphinx
89+
pymongo==3.11.4
90+
# via
91+
# -r requirements/test.txt
92+
# edx-opaque-keys
8793
pyparsing==2.4.7
8894
# via
8995
# -r requirements/test.txt
@@ -148,6 +154,7 @@ stevedore==3.3.0
148154
# -r requirements/test.txt
149155
# code-annotations
150156
# doc8
157+
# edx-opaque-keys
151158
text-unidecode==1.3
152159
# via
153160
# -r requirements/test.txt

requirements/quality.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ docutils==0.17.1
5151
# via readme-renderer
5252
edx-lint==5.0.0
5353
# via -r requirements/quality.in
54+
edx-opaque-keys[django]==2.2.2
55+
# via -r requirements/test.txt
5456
idna==3.2
5557
# via requests
5658
importlib-metadata==4.6.1
@@ -124,6 +126,10 @@ pylint-plugin-utils==0.6
124126
# via
125127
# pylint-celery
126128
# pylint-django
129+
pymongo==3.11.4
130+
# via
131+
# -r requirements/test.txt
132+
# edx-opaque-keys
127133
pyparsing==2.4.7
128134
# via
129135
# -r requirements/test.txt
@@ -176,6 +182,7 @@ stevedore==3.3.0
176182
# via
177183
# -r requirements/test.txt
178184
# code-annotations
185+
# edx-opaque-keys
179186
text-unidecode==1.3
180187
# via
181188
# -r requirements/test.txt

requirements/test.txt

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ django==2.2.24
2020
# via
2121
# -c requirements/constraints.txt
2222
# -r requirements/base.txt
23+
edx-opaque-keys[django]==2.2.2
24+
# via -r requirements/base.txt
2325
iniconfig==1.1.1
2426
# via pytest
2527
jinja2==3.0.1
@@ -29,11 +31,17 @@ markupsafe==2.0.1
2931
packaging==21.0
3032
# via pytest
3133
pbr==5.6.0
32-
# via stevedore
34+
# via
35+
# -r requirements/base.txt
36+
# stevedore
3337
pluggy==0.13.1
3438
# via pytest
3539
py==1.10.0
3640
# via pytest
41+
pymongo==3.11.4
42+
# via
43+
# -r requirements/base.txt
44+
# edx-opaque-keys
3745
pyparsing==2.4.7
3846
# via packaging
3947
pytest==6.2.4
@@ -57,7 +65,10 @@ sqlparse==0.4.1
5765
# -r requirements/base.txt
5866
# django
5967
stevedore==3.3.0
60-
# via code-annotations
68+
# via
69+
# -r requirements/base.txt
70+
# code-annotations
71+
# edx-opaque-keys
6172
text-unidecode==1.3
6273
# via python-slugify
6374
toml==0.10.2

0 commit comments

Comments
 (0)