Skip to content

Commit 8707785

Browse files
feat: add data attributes definition for learning subdomain
1 parent 071c741 commit 8707785

File tree

7 files changed

+184
-3
lines changed

7 files changed

+184
-3
lines changed

openedx_events/learning/data.py

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
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, default=True)
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:
45+
"""
46+
Attributes defined for Open edX user object.
47+
48+
Arguments:
49+
user_non_pii (UserNonPersonalData): user's Personal Identifiable
50+
Information.
51+
user_pii (UserPersonalData): user's Non Personal Identifiable
52+
Information.
53+
"""
54+
55+
user_non_pii = attr.ib(type=UserNonPersonalData)
56+
user_pii = attr.ib(type=UserPersonalData)
57+
58+
59+
@attr.s(frozen=True)
60+
class CourseData:
61+
"""
62+
Attributes defined for Open edX Course Overview object.
63+
64+
Arguments:
65+
course_key (str): identifier of the Course object.
66+
display_name (str): display name associated with the course.
67+
start (datetime): start date for the course.
68+
end (datetime): end date for the course.
69+
"""
70+
71+
course_key = attr.ib(type=CourseKey)
72+
display_name = attr.ib(type=str, factory=str)
73+
start = attr.ib(type=datetime, default=None)
74+
end = attr.ib(type=datetime, default=None)
75+
76+
77+
@attr.s(frozen=True)
78+
class CourseEnrollmentData:
79+
"""
80+
Attributes defined for Open edX Course Enrollment object.
81+
82+
Arguments:
83+
user (UserData): user associated with the Course Enrollment.
84+
course (CourseData): course where the user is enrolled in.
85+
mode (str): course mode associated with the course.
86+
is_active (bool): whether the enrollment is active.
87+
creation_date (datetime): creation date of the enrollment.
88+
created_by (UserData): if available, who created the enrollment.
89+
"""
90+
91+
user = attr.ib(type=UserData)
92+
course = attr.ib(type=CourseData)
93+
mode = attr.ib(type=str)
94+
is_active = attr.ib(type=bool)
95+
creation_date = attr.ib(type=datetime)
96+
created_by = attr.ib(type=UserData, default=None)
97+
98+
99+
@attr.s(frozen=True)
100+
class CertificateData:
101+
"""
102+
Attributes defined for Open edX Certificate data object.
103+
104+
Arguments:
105+
user (UserData): user associated with the Certificate.
106+
course (CourseData): course where the user obtained the certificate.
107+
mode (str): course mode associated with the course.
108+
grade (str): user's grade in this course run.
109+
current_status (str): current certificate status.
110+
previous_status (str): if available, pre-event certificate status.
111+
download_url (str): URL where the PDF version of the certificate.
112+
name (str): user's name.
113+
"""
114+
115+
user = attr.ib(type=UserData)
116+
course = attr.ib(type=CourseData)
117+
mode = attr.ib(type=str)
118+
grade = attr.ib(type=str)
119+
download_url = attr.ib(type=str)
120+
name = attr.ib(type=str)
121+
current_status = attr.ib(type=str)
122+
previous_status = attr.ib(type=str, factory=str)
123+
124+
125+
@attr.s(frozen=True)
126+
class CohortData:
127+
"""
128+
Attributes defined for Open edX Cohort Membership object.
129+
130+
Arguments:
131+
user (UserData): user assigned to the group.
132+
course (CourseData): course associated with the course group.
133+
name (str): name of the cohort group.
134+
"""
135+
136+
user = attr.ib(type=UserData)
137+
course = attr.ib(type=CourseData)
138+
name = attr.ib(type=str)

requirements/base.in

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Core requirements for using this application
22
-c constraints.txt
33

4-
django
54
attrs
5+
django
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: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ django==2.2.24
2020
# via
2121
# -c requirements/constraints.txt
2222
# -r requirements/base.txt
23+
ddt==1.4.2
24+
# via -r requirements/test.in
25+
edx-opaque-keys[django]==2.2.2
26+
# via -r requirements/base.txt
2327
iniconfig==1.1.1
2428
# via pytest
2529
jinja2==3.0.1
@@ -29,11 +33,17 @@ markupsafe==2.0.1
2933
packaging==21.0
3034
# via pytest
3135
pbr==5.6.0
32-
# via stevedore
36+
# via
37+
# -r requirements/base.txt
38+
# stevedore
3339
pluggy==0.13.1
3440
# via pytest
3541
py==1.10.0
3642
# via pytest
43+
pymongo==3.11.4
44+
# via
45+
# -r requirements/base.txt
46+
# edx-opaque-keys
3747
pyparsing==2.4.7
3848
# via packaging
3949
pytest==6.2.4
@@ -57,7 +67,10 @@ sqlparse==0.4.1
5767
# -r requirements/base.txt
5868
# django
5969
stevedore==3.3.0
60-
# via code-annotations
70+
# via
71+
# -r requirements/base.txt
72+
# code-annotations
73+
# edx-opaque-keys
6174
text-unidecode==1.3
6275
# via python-slugify
6376
toml==0.10.2

0 commit comments

Comments
 (0)