learning-paths-plugin 0.3.4rc3__tar.gz → 0.3.4rc5__tar.gz
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.
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/CHANGELOG.rst +5 -0
- {learning_paths_plugin-0.3.4rc3/learning_paths_plugin.egg-info → learning_paths_plugin-0.3.4rc5}/PKG-INFO +6 -1
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/__init__.py +1 -1
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/api/v1/serializers.py +1 -1
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/compat.py +4 -6
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/models.py +3 -3
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/receivers.py +12 -3
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5/learning_paths_plugin.egg-info}/PKG-INFO +6 -1
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/LICENSE.txt +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/MANIFEST.in +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/README.rst +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/admin.py +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/api/__init__.py +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/api/urls.py +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/api/v1/__init__.py +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/api/v1/filters.py +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/api/v1/permissions.py +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/api/v1/urls.py +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/api/v1/utils.py +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/api/v1/views.py +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/apps.py +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/conftest.py +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/keys.py +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/migrations/0001_initial.py +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/migrations/0002_learningpath_uuid.py +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/migrations/0003_learningpath_subtitle.py +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/migrations/0004_auto_20240207_1633.py +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/migrations/0005_learningpathstep_weight_learningpathgradingcriteria.py +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/migrations/0006_enrollment_models.py +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/migrations/0007_replace_uuid_with_learningpathkey.py +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/migrations/0008_remove_learningpathstep_relative_due_date_in_days.py +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/migrations/0009_remove_learningpath_slug.py +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/migrations/0010_learningpath_invite_only.py +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/migrations/0011_replace_learningpath_image_url_with_image.py +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/migrations/0012_alter_learningpath_subtitle.py +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/migrations/0013_enrollment_audit.py +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/migrations/__init__.py +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/settings.py +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/templates/learning_paths/base.html +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/urls.py +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths_plugin.egg-info/SOURCES.txt +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths_plugin.egg-info/dependency_links.txt +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths_plugin.egg-info/entry_points.txt +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths_plugin.egg-info/not-zip-safe +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths_plugin.egg-info/requires.txt +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths_plugin.egg-info/top_level.txt +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/pyproject.toml +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/requirements/base.in +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/requirements/constraints.txt +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/setup.cfg +0 -0
- {learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/setup.py +0 -0
|
@@ -25,6 +25,11 @@ Added
|
|
|
25
25
|
* Bulk unenrollment API.
|
|
26
26
|
* Enrollment audit model that tracks the enrollment state transitions.
|
|
27
27
|
|
|
28
|
+
Changed
|
|
29
|
+
=======
|
|
30
|
+
|
|
31
|
+
* The Learning Paths API includes start and end dates for its steps.
|
|
32
|
+
|
|
28
33
|
0.3.3 - 2025-05-23
|
|
29
34
|
******************
|
|
30
35
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: learning-paths-plugin
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.4rc5
|
|
4
4
|
Summary: Learning Paths plugin
|
|
5
5
|
Home-page: https://github.com/open-craft/learning-paths-plugin
|
|
6
6
|
Author: OpenCraft
|
|
@@ -129,6 +129,11 @@ Added
|
|
|
129
129
|
* Bulk unenrollment API.
|
|
130
130
|
* Enrollment audit model that tracks the enrollment state transitions.
|
|
131
131
|
|
|
132
|
+
Changed
|
|
133
|
+
=======
|
|
134
|
+
|
|
135
|
+
* The Learning Paths API includes start and end dates for its steps.
|
|
136
|
+
|
|
132
137
|
0.3.3 - 2025-05-23
|
|
133
138
|
******************
|
|
134
139
|
|
|
@@ -97,7 +97,7 @@ class LearningPathGradeSerializer(serializers.Serializer):
|
|
|
97
97
|
class LearningPathStepSerializer(serializers.ModelSerializer):
|
|
98
98
|
class Meta:
|
|
99
99
|
model = LearningPathStep
|
|
100
|
-
fields = ["order", "course_key", "
|
|
100
|
+
fields = ["order", "course_key", "course_dates", "weight"]
|
|
101
101
|
|
|
102
102
|
|
|
103
103
|
class LearningPathListSerializer(serializers.ModelSerializer):
|
|
@@ -46,18 +46,16 @@ def get_course_keys_with_outlines() -> list[CourseKey]:
|
|
|
46
46
|
return course_keys_with_outlines()
|
|
47
47
|
|
|
48
48
|
|
|
49
|
-
def
|
|
50
|
-
"""
|
|
51
|
-
Retrieve course end date.
|
|
52
|
-
"""
|
|
49
|
+
def get_course_dates(course_key: CourseKey) -> tuple[datetime | None, datetime | None]:
|
|
50
|
+
"""Retrieve course start and end dates."""
|
|
53
51
|
# pylint: disable=import-outside-toplevel, import-error
|
|
54
52
|
from openedx.core.djangoapps.content.course_overviews.models import CourseOverview
|
|
55
53
|
|
|
56
54
|
try:
|
|
57
55
|
overview = CourseOverview.objects.get(id=course_key)
|
|
58
|
-
return overview.end
|
|
56
|
+
return overview.start, overview.end
|
|
59
57
|
except CourseOverview.DoesNotExist:
|
|
60
|
-
return None
|
|
58
|
+
return None, None
|
|
61
59
|
|
|
62
60
|
|
|
63
61
|
def enroll_user_in_course(user: AbstractBaseUser, course_key: CourseKey) -> bool:
|
|
@@ -19,7 +19,7 @@ from model_utils.models import TimeStampedModel
|
|
|
19
19
|
from opaque_keys.edx.django.models import CourseKeyField
|
|
20
20
|
from slugify import slugify
|
|
21
21
|
|
|
22
|
-
from .compat import
|
|
22
|
+
from .compat import get_course_dates, get_user_course_grade
|
|
23
23
|
from .keys import LearningPathKeyField
|
|
24
24
|
|
|
25
25
|
log = logging.getLogger(__name__)
|
|
@@ -203,9 +203,9 @@ class LearningPathStep(TimeStampedModel):
|
|
|
203
203
|
)
|
|
204
204
|
|
|
205
205
|
@property
|
|
206
|
-
def
|
|
206
|
+
def course_dates(self) -> tuple[datetime | None, datetime | None]:
|
|
207
207
|
"""Retrieve the due date for this course."""
|
|
208
|
-
return
|
|
208
|
+
return get_course_dates(self.course_key)
|
|
209
209
|
|
|
210
210
|
def __str__(self):
|
|
211
211
|
"""User-friendly string representation of this model."""
|
{learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/receivers.py
RENAMED
|
@@ -44,16 +44,25 @@ def process_pending_enrollments(sender, instance, created, **kwargs):
|
|
|
44
44
|
|
|
45
45
|
for entry in pending_enrollments:
|
|
46
46
|
try:
|
|
47
|
-
|
|
48
|
-
enrollment._audit = { # pylint: disable=protected-access
|
|
47
|
+
audit_data = {
|
|
49
48
|
"enrolled_by": instance,
|
|
50
49
|
"state_transition": LearningPathEnrollmentAudit.ALLOWEDTOENROLL_TO_ENROLLED,
|
|
51
50
|
}
|
|
51
|
+
if last_allowed_audit := entry.audit.order_by("-created").first():
|
|
52
|
+
for field in ["reason", "org", "role"]:
|
|
53
|
+
audit_data[field] = getattr(last_allowed_audit, field, "")
|
|
54
|
+
|
|
55
|
+
enrollment = LearningPathEnrollment(learning_path=entry.learning_path, user=instance)
|
|
56
|
+
enrollment._audit = audit_data # pylint: disable=protected-access
|
|
52
57
|
enrollment.save()
|
|
53
58
|
enrollments_created += 1
|
|
59
|
+
|
|
60
|
+
# Link existing audits from the "allowed to enroll" entry to the new enrollment.
|
|
61
|
+
entry.audit.update(enrollment=enrollment)
|
|
62
|
+
|
|
54
63
|
except IntegrityError: # pragma: no cover
|
|
55
64
|
logger.info(
|
|
56
|
-
"[LearningPaths] Enrollment already exists for user %s in learning path %s",
|
|
65
|
+
"[LearningPaths] Enrollment already exists for user %s in the learning path %s",
|
|
57
66
|
instance,
|
|
58
67
|
entry.learning_path.key,
|
|
59
68
|
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: learning-paths-plugin
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.4rc5
|
|
4
4
|
Summary: Learning Paths plugin
|
|
5
5
|
Home-page: https://github.com/open-craft/learning-paths-plugin
|
|
6
6
|
Author: OpenCraft
|
|
@@ -129,6 +129,11 @@ Added
|
|
|
129
129
|
* Bulk unenrollment API.
|
|
130
130
|
* Enrollment audit model that tracks the enrollment state transitions.
|
|
131
131
|
|
|
132
|
+
Changed
|
|
133
|
+
=======
|
|
134
|
+
|
|
135
|
+
* The Learning Paths API includes start and end dates for its steps.
|
|
136
|
+
|
|
132
137
|
0.3.3 - 2025-05-23
|
|
133
138
|
******************
|
|
134
139
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/api/__init__.py
RENAMED
|
File without changes
|
{learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/api/urls.py
RENAMED
|
File without changes
|
{learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/api/v1/__init__.py
RENAMED
|
File without changes
|
{learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/api/v1/filters.py
RENAMED
|
File without changes
|
|
File without changes
|
{learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/api/v1/urls.py
RENAMED
|
File without changes
|
{learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/api/v1/utils.py
RENAMED
|
File without changes
|
{learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/api/v1/views.py
RENAMED
|
File without changes
|
|
File without changes
|
{learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/conftest.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/learning_paths/settings.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{learning_paths_plugin-0.3.4rc3 → learning_paths_plugin-0.3.4rc5}/requirements/constraints.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|