openedx-learning 0.9.4__py2.py3-none-any.whl → 0.10.0__py2.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.
- openedx_learning/__init__.py +1 -1
- openedx_learning/api/authoring.py +14 -0
- openedx_learning/api/authoring_models.py +13 -0
- openedx_learning/{core → apps/authoring}/components/api.py +21 -0
- openedx_learning/{core → apps/authoring}/components/apps.py +2 -2
- openedx_learning/{core → apps/authoring}/components/models.py +9 -2
- openedx_learning/{core → apps/authoring}/contents/api.py +13 -1
- openedx_learning/{core → apps/authoring}/contents/apps.py +2 -2
- openedx_learning/{core → apps/authoring}/contents/models.py +7 -2
- openedx_learning/{core → apps/authoring}/publishing/api.py +35 -7
- openedx_learning/{core → apps/authoring}/publishing/apps.py +2 -2
- openedx_learning/{core → apps/authoring}/publishing/model_mixins.py +6 -0
- openedx_learning/{core → apps/authoring}/publishing/models.py +10 -0
- openedx_learning/contrib/media_server/views.py +1 -1
- {openedx_learning-0.9.4.dist-info → openedx_learning-0.10.0.dist-info}/METADATA +15 -20
- {openedx_learning-0.9.4.dist-info → openedx_learning-0.10.0.dist-info}/RECORD +36 -38
- openedx_learning/rest_api/apps.py +0 -14
- openedx_learning/rest_api/urls.py +0 -6
- openedx_learning/rest_api/v1/components.py +0 -30
- openedx_learning/rest_api/v1/urls.py +0 -10
- /openedx_learning/{core → api}/__init__.py +0 -0
- /openedx_learning/{core/components → apps}/__init__.py +0 -0
- /openedx_learning/{core/components/migrations → apps/authoring}/__init__.py +0 -0
- /openedx_learning/{core/contents → apps/authoring/components}/__init__.py +0 -0
- /openedx_learning/{core → apps/authoring}/components/admin.py +0 -0
- /openedx_learning/{core → apps/authoring}/components/migrations/0001_initial.py +0 -0
- /openedx_learning/{core → apps/authoring}/components/migrations/0002_alter_componentversioncontent_key.py +0 -0
- /openedx_learning/{core/contents → apps/authoring/components}/migrations/__init__.py +0 -0
- /openedx_learning/{core/publishing → apps/authoring/contents}/__init__.py +0 -0
- /openedx_learning/{core → apps/authoring}/contents/admin.py +0 -0
- /openedx_learning/{core → apps/authoring}/contents/migrations/0001_initial.py +0 -0
- /openedx_learning/{core/publishing → apps/authoring/contents}/migrations/__init__.py +0 -0
- /openedx_learning/{rest_api → apps/authoring/publishing}/__init__.py +0 -0
- /openedx_learning/{core → apps/authoring}/publishing/admin.py +0 -0
- /openedx_learning/{core → apps/authoring}/publishing/migrations/0001_initial.py +0 -0
- /openedx_learning/{core → apps/authoring}/publishing/migrations/0002_alter_learningpackage_key_and_more.py +0 -0
- /openedx_learning/{rest_api/v1 → apps/authoring/publishing/migrations}/__init__.py +0 -0
- {openedx_learning-0.9.4.dist-info → openedx_learning-0.10.0.dist-info}/LICENSE.txt +0 -0
- {openedx_learning-0.9.4.dist-info → openedx_learning-0.10.0.dist-info}/WHEEL +0 -0
- {openedx_learning-0.9.4.dist-info → openedx_learning-0.10.0.dist-info}/top_level.txt +0 -0
openedx_learning/__init__.py
CHANGED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"""
|
|
2
|
+
This is the public API for content authoring in Learning Core.
|
|
3
|
+
|
|
4
|
+
This is the single ``api`` module that code outside of the
|
|
5
|
+
``openedx_learning.apps.authoring.*`` package should import from. It will
|
|
6
|
+
re-export the public functions from all api.py modules of all authoring apps. It
|
|
7
|
+
may also implement its own convenience APIs that wrap calls to multiple app
|
|
8
|
+
APIs.
|
|
9
|
+
"""
|
|
10
|
+
# These wildcard imports are okay because these api modules declare __all__.
|
|
11
|
+
# pylint: disable=wildcard-import
|
|
12
|
+
from ..apps.authoring.components.api import *
|
|
13
|
+
from ..apps.authoring.contents.api import *
|
|
14
|
+
from ..apps.authoring.publishing.api import *
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"""
|
|
2
|
+
This is where we expose a small handful of models and model mixins that we want
|
|
3
|
+
callers to extend or make foreign keys to. Callers importing this module should
|
|
4
|
+
never instantiate any of the models themselves–there are API functions in
|
|
5
|
+
authoring.py to create and modify data models in a way that keeps those models
|
|
6
|
+
consistent.
|
|
7
|
+
"""
|
|
8
|
+
# These wildcard imports are okay because these modules declare __all__.
|
|
9
|
+
# pylint: disable=wildcard-import
|
|
10
|
+
from ..apps.authoring.components.models import *
|
|
11
|
+
from ..apps.authoring.contents.models import *
|
|
12
|
+
from ..apps.authoring.publishing.model_mixins import *
|
|
13
|
+
from ..apps.authoring.publishing.models import *
|
|
@@ -21,6 +21,24 @@ from django.db.transaction import atomic
|
|
|
21
21
|
from ..publishing import api as publishing_api
|
|
22
22
|
from .models import Component, ComponentType, ComponentVersion, ComponentVersionContent
|
|
23
23
|
|
|
24
|
+
# The public API that will be re-exported by openedx_learning.apps.authoring.api
|
|
25
|
+
# is listed in the __all__ entries below. Internal helper functions that are
|
|
26
|
+
# private to this module should start with an underscore. If a function does not
|
|
27
|
+
# start with an underscore AND it is not in __all__, that function is considered
|
|
28
|
+
# to be callable only by other apps in the authoring package.
|
|
29
|
+
__all__ = [
|
|
30
|
+
"get_or_create_component_type",
|
|
31
|
+
"create_component",
|
|
32
|
+
"create_component_version",
|
|
33
|
+
"create_next_version",
|
|
34
|
+
"create_component_and_version",
|
|
35
|
+
"get_component",
|
|
36
|
+
"get_component_by_key",
|
|
37
|
+
"component_exists_by_key",
|
|
38
|
+
"get_components",
|
|
39
|
+
"create_component_version_content",
|
|
40
|
+
]
|
|
41
|
+
|
|
24
42
|
|
|
25
43
|
def get_or_create_component_type(namespace: str, name: str) -> ComponentType:
|
|
26
44
|
"""
|
|
@@ -308,6 +326,9 @@ def look_up_component_version_content(
|
|
|
308
326
|
|
|
309
327
|
Can raise a django.core.exceptions.ObjectDoesNotExist error if there is no
|
|
310
328
|
matching ComponentVersionContent.
|
|
329
|
+
|
|
330
|
+
This API call was only used in our proof-of-concept assets media server, and
|
|
331
|
+
I don't know if we wantto make it a part of the public interface.
|
|
311
332
|
"""
|
|
312
333
|
queries = (
|
|
313
334
|
Q(component_version__component__learning_package__key=learning_package_key)
|
|
@@ -9,8 +9,8 @@ class ComponentsConfig(AppConfig):
|
|
|
9
9
|
Configuration for the Components Django application.
|
|
10
10
|
"""
|
|
11
11
|
|
|
12
|
-
name = "openedx_learning.
|
|
13
|
-
verbose_name = "Learning Core
|
|
12
|
+
name = "openedx_learning.apps.authoring.components"
|
|
13
|
+
verbose_name = "Learning Core > Authoring > Components"
|
|
14
14
|
default_auto_field = "django.db.models.BigAutoField"
|
|
15
15
|
label = "oel_components"
|
|
16
16
|
|
|
@@ -19,12 +19,19 @@ from __future__ import annotations
|
|
|
19
19
|
|
|
20
20
|
from django.db import models
|
|
21
21
|
|
|
22
|
-
from
|
|
23
|
-
from
|
|
22
|
+
from ....lib.fields import case_sensitive_char_field, immutable_uuid_field, key_field
|
|
23
|
+
from ....lib.managers import WithRelationsManager
|
|
24
24
|
from ..contents.models import Content
|
|
25
25
|
from ..publishing.model_mixins import PublishableEntityMixin, PublishableEntityVersionMixin
|
|
26
26
|
from ..publishing.models import LearningPackage
|
|
27
27
|
|
|
28
|
+
__all__ = [
|
|
29
|
+
"ComponentType",
|
|
30
|
+
"Component",
|
|
31
|
+
"ComponentVersion",
|
|
32
|
+
"ComponentVersionContent",
|
|
33
|
+
]
|
|
34
|
+
|
|
28
35
|
|
|
29
36
|
class ComponentType(models.Model):
|
|
30
37
|
"""
|
|
@@ -11,9 +11,21 @@ from datetime import datetime
|
|
|
11
11
|
from django.core.files.base import ContentFile
|
|
12
12
|
from django.db.transaction import atomic
|
|
13
13
|
|
|
14
|
-
from
|
|
14
|
+
from ....lib.fields import create_hash_digest
|
|
15
15
|
from .models import Content, MediaType
|
|
16
16
|
|
|
17
|
+
# The public API that will be re-exported by openedx_learning.apps.authoring.api
|
|
18
|
+
# is listed in the __all__ entries below. Internal helper functions that are
|
|
19
|
+
# private to this module should start with an underscore. If a function does not
|
|
20
|
+
# start with an underscore AND it is not in __all__, that function is considered
|
|
21
|
+
# to be callable only by other apps in the authoring package.
|
|
22
|
+
__all__ = [
|
|
23
|
+
"get_or_create_media_type",
|
|
24
|
+
"get_content",
|
|
25
|
+
"get_or_create_text_content",
|
|
26
|
+
"get_or_create_file_content",
|
|
27
|
+
]
|
|
28
|
+
|
|
17
29
|
|
|
18
30
|
def get_or_create_media_type(mime_type: str) -> MediaType:
|
|
19
31
|
"""
|
|
@@ -9,7 +9,7 @@ class ContentsConfig(AppConfig):
|
|
|
9
9
|
Configuration for the Contents Django application.
|
|
10
10
|
"""
|
|
11
11
|
|
|
12
|
-
name = "openedx_learning.
|
|
13
|
-
verbose_name = "Learning Core
|
|
12
|
+
name = "openedx_learning.apps.authoring.contents"
|
|
13
|
+
verbose_name = "Learning Core > Authoring > Contents"
|
|
14
14
|
default_auto_field = "django.db.models.BigAutoField"
|
|
15
15
|
label = "oel_contents"
|
|
@@ -13,10 +13,15 @@ from django.core.files.storage import Storage, default_storage
|
|
|
13
13
|
from django.core.validators import MaxValueValidator
|
|
14
14
|
from django.db import models
|
|
15
15
|
|
|
16
|
-
from
|
|
17
|
-
from
|
|
16
|
+
from ....lib.fields import MultiCollationTextField, case_insensitive_char_field, hash_field, manual_date_time_field
|
|
17
|
+
from ....lib.managers import WithRelationsManager
|
|
18
18
|
from ..publishing.models import LearningPackage
|
|
19
19
|
|
|
20
|
+
__all__ = [
|
|
21
|
+
"MediaType",
|
|
22
|
+
"Content",
|
|
23
|
+
]
|
|
24
|
+
|
|
20
25
|
|
|
21
26
|
def get_storage() -> Storage:
|
|
22
27
|
"""
|
|
@@ -23,6 +23,34 @@ from .models import (
|
|
|
23
23
|
PublishLogRecord,
|
|
24
24
|
)
|
|
25
25
|
|
|
26
|
+
# The public API that will be re-exported by openedx_learning.apps.authoring.api
|
|
27
|
+
# is listed in the __all__ entries below. Internal helper functions that are
|
|
28
|
+
# private to this module should start with an underscore. If a function does not
|
|
29
|
+
# start with an underscore AND it is not in __all__, that function is considered
|
|
30
|
+
# to be callable only by other apps in the authoring package.
|
|
31
|
+
__all__ = [
|
|
32
|
+
"get_learning_package",
|
|
33
|
+
"get_learning_package_by_key",
|
|
34
|
+
"create_learning_package",
|
|
35
|
+
"update_learning_package",
|
|
36
|
+
"learning_package_exists",
|
|
37
|
+
"create_publishable_entity",
|
|
38
|
+
"create_publishable_entity_version",
|
|
39
|
+
"get_publishable_entity",
|
|
40
|
+
"get_publishable_entity_by_key",
|
|
41
|
+
"get_last_publish",
|
|
42
|
+
"get_all_drafts",
|
|
43
|
+
"get_entities_with_unpublished_changes",
|
|
44
|
+
"get_entities_with_unpublished_deletes",
|
|
45
|
+
"publish_all_drafts",
|
|
46
|
+
"get_draft_version",
|
|
47
|
+
"get_published_version",
|
|
48
|
+
"set_draft_version",
|
|
49
|
+
"soft_delete_draft",
|
|
50
|
+
"reset_drafts_to_published",
|
|
51
|
+
"register_content_models",
|
|
52
|
+
]
|
|
53
|
+
|
|
26
54
|
|
|
27
55
|
def get_learning_package(learning_package_id: int, /) -> LearningPackage:
|
|
28
56
|
"""
|
|
@@ -105,6 +133,13 @@ def update_learning_package(
|
|
|
105
133
|
return lp
|
|
106
134
|
|
|
107
135
|
|
|
136
|
+
def learning_package_exists(key: str) -> bool:
|
|
137
|
+
"""
|
|
138
|
+
Check whether a LearningPackage with a particular key exists.
|
|
139
|
+
"""
|
|
140
|
+
return LearningPackage.objects.filter(key=key).exists()
|
|
141
|
+
|
|
142
|
+
|
|
108
143
|
def create_publishable_entity(
|
|
109
144
|
learning_package_id: int,
|
|
110
145
|
/,
|
|
@@ -167,13 +202,6 @@ def get_publishable_entity_by_key(learning_package_id, /, key) -> PublishableEnt
|
|
|
167
202
|
)
|
|
168
203
|
|
|
169
204
|
|
|
170
|
-
def learning_package_exists(key: str) -> bool:
|
|
171
|
-
"""
|
|
172
|
-
Check whether a LearningPackage with a particular key exists.
|
|
173
|
-
"""
|
|
174
|
-
return LearningPackage.objects.filter(key=key).exists()
|
|
175
|
-
|
|
176
|
-
|
|
177
205
|
def get_last_publish(learning_package_id: int, /) -> PublishLog | None:
|
|
178
206
|
return PublishLog.objects \
|
|
179
207
|
.filter(learning_package_id=learning_package_id) \
|
|
@@ -10,7 +10,7 @@ class PublishingConfig(AppConfig):
|
|
|
10
10
|
Configuration for the publishing Django application.
|
|
11
11
|
"""
|
|
12
12
|
|
|
13
|
-
name = "openedx_learning.
|
|
14
|
-
verbose_name = "Learning Core
|
|
13
|
+
name = "openedx_learning.apps.authoring.publishing"
|
|
14
|
+
verbose_name = "Learning Core > Authoring > Publishing"
|
|
15
15
|
default_auto_field = "django.db.models.BigAutoField"
|
|
16
16
|
label = "oel_publishing"
|
|
@@ -11,6 +11,12 @@ from django.db.models.query import QuerySet
|
|
|
11
11
|
|
|
12
12
|
from .models import PublishableEntity, PublishableEntityVersion
|
|
13
13
|
|
|
14
|
+
__all__ = [
|
|
15
|
+
"PublishableEntityMixin",
|
|
16
|
+
"PublishableEntityVersionMixin",
|
|
17
|
+
"PublishableContentModelRegistry",
|
|
18
|
+
]
|
|
19
|
+
|
|
14
20
|
|
|
15
21
|
class PublishableEntityMixin(models.Model):
|
|
16
22
|
"""
|
|
@@ -23,6 +23,16 @@ from openedx_learning.lib.fields import (
|
|
|
23
23
|
manual_date_time_field,
|
|
24
24
|
)
|
|
25
25
|
|
|
26
|
+
__all__ = [
|
|
27
|
+
"LearningPackage",
|
|
28
|
+
"PublishableEntity",
|
|
29
|
+
"PublishableEntityVersion",
|
|
30
|
+
"Draft",
|
|
31
|
+
"PublishLog",
|
|
32
|
+
"PublishLogRecord",
|
|
33
|
+
"Published",
|
|
34
|
+
]
|
|
35
|
+
|
|
26
36
|
|
|
27
37
|
class LearningPackage(models.Model): # type: ignore[django-manager-missing]
|
|
28
38
|
"""
|
|
@@ -8,7 +8,7 @@ from pathlib import Path
|
|
|
8
8
|
from django.core.exceptions import ObjectDoesNotExist, PermissionDenied
|
|
9
9
|
from django.http import FileResponse, Http404
|
|
10
10
|
|
|
11
|
-
from openedx_learning.
|
|
11
|
+
from openedx_learning.apps.authoring.components.api import look_up_component_version_content
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
def component_asset(
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: openedx-learning
|
|
3
|
-
Version: 0.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 0.10.0
|
|
4
|
+
Summary: Open edX Learning Core and Tagging.
|
|
5
5
|
Home-page: https://github.com/openedx/openedx-learning
|
|
6
6
|
Author: David Ormsbee
|
|
7
7
|
Author-email: dave@tcril.org
|
|
@@ -19,26 +19,23 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.12
|
|
20
20
|
Requires-Python: >=3.8
|
|
21
21
|
License-File: LICENSE.txt
|
|
22
|
-
Requires-Dist: edx-drf-extensions
|
|
23
22
|
Requires-Dist: rules <4.0
|
|
24
|
-
Requires-Dist: celery
|
|
25
23
|
Requires-Dist: Django <5.0
|
|
24
|
+
Requires-Dist: edx-drf-extensions
|
|
26
25
|
Requires-Dist: attrs
|
|
26
|
+
Requires-Dist: celery
|
|
27
27
|
Requires-Dist: djangorestframework <4.0
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
Open edX Learning Core (and Tagging)
|
|
30
|
+
====================================
|
|
31
31
|
|
|
32
32
|
|pypi-badge| |ci-badge| |codecov-badge| |doc-badge| |pyversions-badge|
|
|
33
33
|
|license-badge|
|
|
34
34
|
|
|
35
|
-
This is experimentation/prototyping and not in any way production ready!
|
|
36
|
-
------------------------------------------------------------------------
|
|
37
|
-
|
|
38
35
|
Overview
|
|
39
36
|
--------
|
|
40
37
|
|
|
41
|
-
The
|
|
38
|
+
The ``openedx_learning`` package holds Django apps that represent core learning concepts and data models that have been extracted from edx-platform. At the moment, this repo also contains the ``openedx_tagging`` package, but this will likely be moved out in the future.
|
|
42
39
|
|
|
43
40
|
Motivation
|
|
44
41
|
----------
|
|
@@ -54,18 +51,16 @@ Parts
|
|
|
54
51
|
~~~~~
|
|
55
52
|
|
|
56
53
|
* ``openedx_learning.lib`` is for shared utilities, and may include things like custom field types, plugin registration code, etc.
|
|
57
|
-
* ``openedx_learning.
|
|
54
|
+
* ``openedx_learning.apps`` contains our Learning Core Django apps, where foundational data structures and APIs will live. The first of these is ``authoring``, which holds apps related to the editing and publishing of learning content.
|
|
58
55
|
* ``openedx_tagging.core`` contains the core Tagging app, which provides data structures and apis for tagging Open edX objects.
|
|
59
56
|
|
|
60
|
-
|
|
61
|
-
|
|
57
|
+
Learning Core Package Dependencies
|
|
58
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
62
59
|
|
|
63
|
-
|
|
60
|
+
Learning Core code should never import from ``edx-platform``.
|
|
64
61
|
|
|
65
|
-
|
|
62
|
+
We want to be very strict about dependency management internally as well. Please read the `.importlinter config file <.importlinter>`_ file and the `Python API Conventions ADR <docs/decisions/0016-python-public-api-conventions>`_ for more details.
|
|
66
63
|
|
|
67
|
-
* ``learning_publishing`` has no dependencies. All the other apps depend on it.
|
|
68
|
-
* ``learning_composition`` and ``learning_navigation`` both depend on ``learning_partitioning``
|
|
69
64
|
|
|
70
65
|
Model Conventions
|
|
71
66
|
~~~~~~~~~~~~~~~~~
|
|
@@ -74,7 +69,7 @@ We have a few different identifier types in the schema, and we try to avoid ``_i
|
|
|
74
69
|
|
|
75
70
|
* ``id`` is the auto-generated, internal row ID and primary key. This never changes. Data models should make foreign keys to this field, as per Django convention.
|
|
76
71
|
* ``uuid`` is a randomly generated UUID4. This is the stable way to refer to a row/resource from an external service. This never changes. This is separate from ``id`` mostly because there are performance penalties when using UUIDs as primary keys with MySQL.
|
|
77
|
-
* ``key`` is intended to be a case-sensitive, alphanumeric key, which holds some meaning to library clients. This is usually stable, but can be changed, depending on the business logic of the client. The apps in this repo should make no assumptions about it being stable. It can be used as a suffix.
|
|
72
|
+
* ``key`` is intended to be a case-sensitive, alphanumeric key, which holds some meaning to library clients. This is usually stable, but can be changed, depending on the business logic of the client. The apps in this repo should make no assumptions about it being stable. It can be used as a suffix. Since ``key`` is a reserved name on certain database systems, the database field is ``_key``.
|
|
78
73
|
* ``num`` is like ``key``, but for use when it's strictly numeric. It can also be used as a suffix.
|
|
79
74
|
|
|
80
75
|
|
|
@@ -89,7 +84,7 @@ The structure of this repo follows [OEP-0049](https://open-edx-proposals.readthe
|
|
|
89
84
|
Code Overview
|
|
90
85
|
-------------
|
|
91
86
|
|
|
92
|
-
The ``openedx_learning.apps`` package contains all our Django applications.
|
|
87
|
+
The ``openedx_learning.apps`` package contains all our Django applications.
|
|
93
88
|
|
|
94
89
|
Development Workflow
|
|
95
90
|
--------------------
|
|
@@ -103,7 +98,7 @@ One Time Setup
|
|
|
103
98
|
cd openedx-learning
|
|
104
99
|
|
|
105
100
|
# Set up a virtualenv using virtualenvwrapper with the same name as the repo and activate it
|
|
106
|
-
mkvirtualenv -p python3.
|
|
101
|
+
mkvirtualenv -p python3.11 openedx-learning
|
|
107
102
|
|
|
108
103
|
|
|
109
104
|
Every time you develop something in this repo
|
|
@@ -1,35 +1,39 @@
|
|
|
1
|
-
openedx_learning/__init__.py,sha256=
|
|
1
|
+
openedx_learning/__init__.py,sha256=DnOb5RNB5dogIDUc96QphWmX4TqWV73iB0Ikmixury4,68
|
|
2
2
|
openedx_learning/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
+
openedx_learning/api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
+
openedx_learning/api/authoring.py,sha256=HPfDBTr4Sxf_GciObkv_7vaUiC9P1GdGEMAZgCFQv_w,615
|
|
5
|
+
openedx_learning/api/authoring_models.py,sha256=jcYkX6-MYiNf-e4BnzSDEc3qS17dg8UVXyX1bxeyjR8,642
|
|
6
|
+
openedx_learning/apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
|
+
openedx_learning/apps/authoring/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
|
+
openedx_learning/apps/authoring/components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
|
+
openedx_learning/apps/authoring/components/admin.py,sha256=QE7e76C6X2V1AQPxQe6SayQPfCMmbs4RZPEPIGcvTWw,4672
|
|
10
|
+
openedx_learning/apps/authoring/components/api.py,sha256=1A0xcpW4ciVs_vA-Xd16k4YfFBXhNYjISQyamyq03Uc,13191
|
|
11
|
+
openedx_learning/apps/authoring/components/apps.py,sha256=YoYPsI9gcleA3uEs8CiLIrjUncRMo2DKbYt4mDfzePg,770
|
|
12
|
+
openedx_learning/apps/authoring/components/models.py,sha256=j9k0-FmOkySxYbJ-frMuCR82zrPgsu9K3aCk2IKRdFs,13280
|
|
13
|
+
openedx_learning/apps/authoring/components/migrations/0001_initial.py,sha256=446LkJSFeK8J_-l-bxakZ_BVx_CiJIllGcBYqWcEenA,4664
|
|
14
|
+
openedx_learning/apps/authoring/components/migrations/0002_alter_componentversioncontent_key.py,sha256=98724dtucRjJCRyLt5p45qXYb2d6-ouVGp7PB6zTG6E,539
|
|
15
|
+
openedx_learning/apps/authoring/components/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
16
|
+
openedx_learning/apps/authoring/contents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
|
+
openedx_learning/apps/authoring/contents/admin.py,sha256=4ILH_cEiAXKUlfPVwJJZeh5yupgF3v7kf-xJ6ZTTFDE,1174
|
|
18
|
+
openedx_learning/apps/authoring/contents/api.py,sha256=QRHCZNKLvKqvl1S4j8lfUjVsvilcWetuCQ_GO_TXYGk,6070
|
|
19
|
+
openedx_learning/apps/authoring/contents/apps.py,sha256=EEUZEnww7TcYcyxMovZthG2muNxd7j7nxBIf21gKrp4,398
|
|
20
|
+
openedx_learning/apps/authoring/contents/models.py,sha256=4XzHqQ3Fgz4lt2LfGBXAViQ4q_jT9thHj2vpayszspA,15192
|
|
21
|
+
openedx_learning/apps/authoring/contents/migrations/0001_initial.py,sha256=FtOTmIGX2KHpjw-PHbfRjxkFEomI5CEDhNKCZ7IpFeE,3060
|
|
22
|
+
openedx_learning/apps/authoring/contents/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
23
|
+
openedx_learning/apps/authoring/publishing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
24
|
+
openedx_learning/apps/authoring/publishing/admin.py,sha256=F-0QlVQmuovLIF258XK_vKJdOnn7lLa_0A5veE72TKc,4830
|
|
25
|
+
openedx_learning/apps/authoring/publishing/api.py,sha256=kZ5tayJzScmaKUmpuWr-EBQ62nDDCZb4713awMpSzrM,15278
|
|
26
|
+
openedx_learning/apps/authoring/publishing/apps.py,sha256=jUfd78xvXaZg3dwkqXihatbeajJGm3Uz1rJpuyd-3g0,402
|
|
27
|
+
openedx_learning/apps/authoring/publishing/model_mixins.py,sha256=cau70b3boi2J3DvkC0UE-sd7Nyjk9TLHJ47-nq89ELQ,13533
|
|
28
|
+
openedx_learning/apps/authoring/publishing/models.py,sha256=ImMAujPDc2-CECZw_yvVlUOdtGYwmt99TJ2r1HJkkV8,20488
|
|
29
|
+
openedx_learning/apps/authoring/publishing/migrations/0001_initial.py,sha256=wvekNV19YRSdxRmQaFnLSn_nCsQlHIucPDVMmgKf_OE,9272
|
|
30
|
+
openedx_learning/apps/authoring/publishing/migrations/0002_alter_learningpackage_key_and_more.py,sha256=toI7qJhNukk6hirKfFx9EpqTpzF2O2Yq1VpFJusDn2M,806
|
|
31
|
+
openedx_learning/apps/authoring/publishing/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
32
|
openedx_learning/contrib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
33
|
openedx_learning/contrib/media_server/__init__.py,sha256=iYijWFCl5RNR9omSu22kMl49EfponoqXBqXr0HMp4QI,56
|
|
5
34
|
openedx_learning/contrib/media_server/apps.py,sha256=FPT0rsUFtPyhFpWKjSI1e_s58wU0IbDyaAW_66V6sY4,816
|
|
6
35
|
openedx_learning/contrib/media_server/urls.py,sha256=newNjV41sM9A9Oy_rgnZSXdkTFxSHiupIiAsVIGE2CE,365
|
|
7
|
-
openedx_learning/contrib/media_server/views.py,sha256=
|
|
8
|
-
openedx_learning/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
|
-
openedx_learning/core/components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
-
openedx_learning/core/components/admin.py,sha256=QE7e76C6X2V1AQPxQe6SayQPfCMmbs4RZPEPIGcvTWw,4672
|
|
11
|
-
openedx_learning/core/components/api.py,sha256=2ux1s9Bpfvs5sgTViHLagMb1IHpMo_vRR-MbrbXh0_U,12345
|
|
12
|
-
openedx_learning/core/components/apps.py,sha256=invLeAY0B-d_Ac9xu_b5ZWeb7v5NJe_-938BO9U2-jo,747
|
|
13
|
-
openedx_learning/core/components/models.py,sha256=duVLdkTFnM7ixsqXQPlvmqmgf32hYyXdeRw1W7MdOpg,13170
|
|
14
|
-
openedx_learning/core/components/migrations/0001_initial.py,sha256=446LkJSFeK8J_-l-bxakZ_BVx_CiJIllGcBYqWcEenA,4664
|
|
15
|
-
openedx_learning/core/components/migrations/0002_alter_componentversioncontent_key.py,sha256=98724dtucRjJCRyLt5p45qXYb2d6-ouVGp7PB6zTG6E,539
|
|
16
|
-
openedx_learning/core/components/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
|
-
openedx_learning/core/contents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
|
-
openedx_learning/core/contents/admin.py,sha256=4ILH_cEiAXKUlfPVwJJZeh5yupgF3v7kf-xJ6ZTTFDE,1174
|
|
19
|
-
openedx_learning/core/contents/api.py,sha256=09159G0e_r7glDvi-G8c5k6ads2LmhmDLHnHeTSpotI,5553
|
|
20
|
-
openedx_learning/core/contents/apps.py,sha256=6O04ikajbc4FsSdzx7yEl0cdQpEHpK1LdE471vygdII,375
|
|
21
|
-
openedx_learning/core/contents/models.py,sha256=HInsxr3Bnl48_0fbdoDKnGmrpIxTFTpoQTUg6_opdB4,15143
|
|
22
|
-
openedx_learning/core/contents/migrations/0001_initial.py,sha256=FtOTmIGX2KHpjw-PHbfRjxkFEomI5CEDhNKCZ7IpFeE,3060
|
|
23
|
-
openedx_learning/core/contents/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
24
|
-
openedx_learning/core/publishing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
25
|
-
openedx_learning/core/publishing/admin.py,sha256=F-0QlVQmuovLIF258XK_vKJdOnn7lLa_0A5veE72TKc,4830
|
|
26
|
-
openedx_learning/core/publishing/api.py,sha256=pfBePrmP0jnU5YTt4x7qhT37RN02P95gw2-xQNA_e9A,14254
|
|
27
|
-
openedx_learning/core/publishing/apps.py,sha256=skY84raPW6gvrb5VPzhrLR2_gIHTUG67tMhSO7umVN4,379
|
|
28
|
-
openedx_learning/core/publishing/model_mixins.py,sha256=Y6hGh0MKVOx0dUyNL0YkLL9ErUnYI2Nv2ZGMhc3CMng,13412
|
|
29
|
-
openedx_learning/core/publishing/models.py,sha256=MGezxLoKFqHYnZccknqWyuNYrgiqu9eGDc4H9yIYzrg,20321
|
|
30
|
-
openedx_learning/core/publishing/migrations/0001_initial.py,sha256=wvekNV19YRSdxRmQaFnLSn_nCsQlHIucPDVMmgKf_OE,9272
|
|
31
|
-
openedx_learning/core/publishing/migrations/0002_alter_learningpackage_key_and_more.py,sha256=toI7qJhNukk6hirKfFx9EpqTpzF2O2Yq1VpFJusDn2M,806
|
|
32
|
-
openedx_learning/core/publishing/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
36
|
+
openedx_learning/contrib/media_server/views.py,sha256=A4umcQr9xU5l-7dCSUX9jP9-gtwf4LGjoMn7NlsdLsk,1547
|
|
33
37
|
openedx_learning/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
34
38
|
openedx_learning/lib/admin_utils.py,sha256=5z9NrXxmT5j8azx9u1t0AgxV5PIDTc2jPyM5z5yW8cw,4021
|
|
35
39
|
openedx_learning/lib/cache.py,sha256=ppT36KiPLdsAF3GfZCF0IdiHodckd2gLiF1sNhjSJuk,958
|
|
@@ -38,12 +42,6 @@ openedx_learning/lib/fields.py,sha256=eiGoXMPhRuq25EH2qf6BAODshAQE3DBVdIYAMIUAXW
|
|
|
38
42
|
openedx_learning/lib/managers.py,sha256=ofcUxHS2wsJSFP4CB7OCkN6JiWFxNlIyNh_VDgFtgug,1538
|
|
39
43
|
openedx_learning/lib/test_utils.py,sha256=g3KLuepIZbaDBCsaj9711YuqyUx7LD4gXDcfNC-mWdc,527
|
|
40
44
|
openedx_learning/lib/validators.py,sha256=98UldFhFxd77zF1VxzQcOPt0blh64gMZDv-d_uQ67mg,396
|
|
41
|
-
openedx_learning/rest_api/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
42
|
-
openedx_learning/rest_api/apps.py,sha256=aZpox3cdQEKl0idiFyyjrtwWXuoxR0HRm9BQjr6Lz-8,346
|
|
43
|
-
openedx_learning/rest_api/urls.py,sha256=r73z_2aiFUfDYPZnSADTwVXNjJpvvkPHRscvtdLn1tM,157
|
|
44
|
-
openedx_learning/rest_api/v1/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
45
|
-
openedx_learning/rest_api/v1/components.py,sha256=OYNWqarNtVmiKunIMlZWNGVCeZ5ATco2ZTuxPR-BS9I,757
|
|
46
|
-
openedx_learning/rest_api/v1/urls.py,sha256=g0nYjq6qWjd08TUzsb-tQ_ZFRmQsxCIQvQRNa6oCAns,256
|
|
47
45
|
openedx_tagging/__init__.py,sha256=V9N8M7f9LYlAbA_DdPUsHzTnWjYRXKGa5qHw9P1JnNI,30
|
|
48
46
|
openedx_tagging/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
49
47
|
openedx_tagging/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -98,8 +96,8 @@ openedx_tagging/core/tagging/rest_api/v1/serializers.py,sha256=gbvEBLvsmfPc3swWz
|
|
|
98
96
|
openedx_tagging/core/tagging/rest_api/v1/urls.py,sha256=dNUKCtUCx_YzrwlbEbpDfjGVQbb2QdJ1VuJCkladj6E,752
|
|
99
97
|
openedx_tagging/core/tagging/rest_api/v1/views.py,sha256=ZRkSILdb8g5k_BcuuVVfdffEdY9vFQ_YtMa3JrN0Xz8,35581
|
|
100
98
|
openedx_tagging/core/tagging/rest_api/v1/views_import.py,sha256=kbHUPe5A6WaaJ3J1lFIcYCt876ecLNQfd19m7YYub6c,1470
|
|
101
|
-
openedx_learning-0.
|
|
102
|
-
openedx_learning-0.
|
|
103
|
-
openedx_learning-0.
|
|
104
|
-
openedx_learning-0.
|
|
105
|
-
openedx_learning-0.
|
|
99
|
+
openedx_learning-0.10.0.dist-info/LICENSE.txt,sha256=QTW2QN7q3XszgUAXm9Dzgtu5LXYKbR1SGnqMa7ufEuY,35139
|
|
100
|
+
openedx_learning-0.10.0.dist-info/METADATA,sha256=B3Gg7iIer_sJiWvXtA9Sd4xdbguHC3XIqaAsjhp15I4,8829
|
|
101
|
+
openedx_learning-0.10.0.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
|
|
102
|
+
openedx_learning-0.10.0.dist-info/top_level.txt,sha256=IYFbr5mgiEHd-LOtZmXj3q3a0bkGK1M9LY7GXgnfi4M,33
|
|
103
|
+
openedx_learning-0.10.0.dist-info/RECORD,,
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Django metadata for the Learning Core REST API app
|
|
3
|
-
"""
|
|
4
|
-
from django.apps import AppConfig
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
class RESTAPIConfig(AppConfig):
|
|
8
|
-
"""
|
|
9
|
-
Configuration for the Learning Core REST API Django app.
|
|
10
|
-
"""
|
|
11
|
-
|
|
12
|
-
name = "openedx_learning.rest_api"
|
|
13
|
-
verbose_name = "Learning Core: REST API"
|
|
14
|
-
default_auto_field = "django.db.models.BigAutoField"
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
This is just an example REST API endpoint.
|
|
3
|
-
"""
|
|
4
|
-
from rest_framework import viewsets
|
|
5
|
-
|
|
6
|
-
from openedx_learning.core.components.models import Component
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class ComponentViewSet(viewsets.ViewSet):
|
|
10
|
-
"""
|
|
11
|
-
Example endpoints for a Components REST API. Not implemented.
|
|
12
|
-
"""
|
|
13
|
-
def list(self, request):
|
|
14
|
-
_items = Component.objects.all()
|
|
15
|
-
raise NotImplementedError
|
|
16
|
-
|
|
17
|
-
def retrieve(self, request, pk=None):
|
|
18
|
-
raise NotImplementedError
|
|
19
|
-
|
|
20
|
-
def create(self, request):
|
|
21
|
-
raise NotImplementedError
|
|
22
|
-
|
|
23
|
-
def update(self, request, pk=None):
|
|
24
|
-
raise NotImplementedError
|
|
25
|
-
|
|
26
|
-
def partial_update(self, request, pk=None):
|
|
27
|
-
raise NotImplementedError
|
|
28
|
-
|
|
29
|
-
def destroy(self, request, pk=None):
|
|
30
|
-
raise NotImplementedError
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
URLs for the Learning Core REST API v1
|
|
3
|
-
"""
|
|
4
|
-
from rest_framework.routers import DefaultRouter
|
|
5
|
-
|
|
6
|
-
from . import components
|
|
7
|
-
|
|
8
|
-
router = DefaultRouter()
|
|
9
|
-
router.register(r"components", components.ComponentViewSet, basename="component")
|
|
10
|
-
urlpatterns = router.urls
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|