openedx-plugin-sample 3.8.0__tar.gz → 3.8.2__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.
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/.gitignore +0 -4
- openedx_plugin_sample-3.8.2/.readthedocs.yaml +38 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/Makefile +23 -2
- {openedx_plugin_sample-3.8.0/src/openedx_plugin_sample.egg-info → openedx_plugin_sample-3.8.2}/PKG-INFO +11 -9
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/pylintrc +9 -2
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/pyproject.toml +77 -28
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2/src/openedx_plugin_sample.egg-info}/PKG-INFO +11 -9
- openedx_plugin_sample-3.8.2/src/openedx_plugin_sample.egg-info/requires.txt +10 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/tox.ini +7 -1
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/uv.lock +72 -60
- openedx_plugin_sample-3.8.0/.readthedocs.yaml +0 -27
- openedx_plugin_sample-3.8.0/src/openedx_plugin_sample.egg-info/requires.txt +0 -8
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/.annotation_safe_list.yml +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/.coveragerc +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/.editorconfig +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/.pii_annotations.yml +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/LICENSE.txt +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/README.md +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/codecov.yml +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/Makefile +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/_static/theme_overrides.css +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/concepts/index.rst +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/conf.py +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/decisions/0001-purpose-of-this-repo.rst +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/decisions/README.rst +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/decisions.rst +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/getting_started.rst +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/how-tos/index.rst +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/index.rst +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/internationalization.rst +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/make.bat +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/openedx_plugin_sample.rst +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/quickstarts/index.rst +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/references/index.rst +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/testing.rst +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/manage.py +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/pylintrc_tweaks +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/setup.cfg +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/__init__.py +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/admin.py +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/apps.py +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/conf/locale/config.yaml +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/migrations/0001_initial.py +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/migrations/__init__.py +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/models.py +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/pipeline.py +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/py.typed +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/serializers.py +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/settings/common.py +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/settings/production.py +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/settings/test.py +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/signals.py +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/templates/openedx_plugin_sample/base.html +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/urls.py +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/views.py +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample.egg-info/SOURCES.txt +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample.egg-info/dependency_links.txt +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample.egg-info/entry_points.txt +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample.egg-info/top_level.txt +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/test_settings.py +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/test_utils/__init__.py +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/tests/test_api.py +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/tests/test_models.py +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/tests/test_pipeline.py +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/tests/test_plugin_integration.py +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/tests/test_signals.py +0 -0
- {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/tests/urls.py +0 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# .readthedocs.yml
|
|
2
|
+
# Read the Docs configuration file
|
|
3
|
+
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
|
4
|
+
|
|
5
|
+
# Required
|
|
6
|
+
version: 2
|
|
7
|
+
|
|
8
|
+
# Build documentation in the docs/ directory with Sphinx
|
|
9
|
+
sphinx:
|
|
10
|
+
configuration: docs/conf.py
|
|
11
|
+
fail_on_warning: true
|
|
12
|
+
|
|
13
|
+
# Note: this configuration is currently dormant. Read the Docs looks for
|
|
14
|
+
# .readthedocs.yaml in the repository root, and this file is a directory down,
|
|
15
|
+
# so it is not read unless a project is created and pointed at this path
|
|
16
|
+
# explicitly. No such project exists today. The docs are built and
|
|
17
|
+
# warning-checked on every pull request by `tox -e docs` instead.
|
|
18
|
+
#
|
|
19
|
+
# It is kept, and kept correct, so that enabling hosted docs later is a matter
|
|
20
|
+
# of creating the project rather than rewriting this file. Every path here is
|
|
21
|
+
# relative to backend-plugin-sample/, not the repository root.
|
|
22
|
+
|
|
23
|
+
# Set the version of python needed to build these docs.
|
|
24
|
+
build:
|
|
25
|
+
os: "ubuntu-22.04"
|
|
26
|
+
tools:
|
|
27
|
+
python: "3.12"
|
|
28
|
+
|
|
29
|
+
python:
|
|
30
|
+
install:
|
|
31
|
+
# `uv sync` against the committed uv.lock, so the docs build against the
|
|
32
|
+
# same pinned versions as CI -- and inherits the minimum release age
|
|
33
|
+
# recorded in the lock. This used to be `requirements: requirements/doc.txt`,
|
|
34
|
+
# which stopped existing when the repo moved to uv.lock.
|
|
35
|
+
- method: uv
|
|
36
|
+
command: sync
|
|
37
|
+
groups:
|
|
38
|
+
- doc
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
.PHONY: clean clean_tox compile_translations coverage diff_cover docs dummy_translations \
|
|
2
2
|
extract_translations fake_translations help pii_check pull_translations \
|
|
3
|
-
quality requirements selfcheck test test-all upgrade compile-requirements validate install_transifex_client
|
|
3
|
+
quality requirements selfcheck test test-all upgrade compile-requirements validate install_transifex_client \
|
|
4
|
+
check-constraints
|
|
4
5
|
|
|
5
6
|
.DEFAULT_GOAL := help
|
|
6
7
|
|
|
@@ -35,10 +36,30 @@ docs: ## generate Sphinx HTML documentation, including API docs
|
|
|
35
36
|
compile-requirements: ## generate the uv.lock file without upgrading packages
|
|
36
37
|
uv lock
|
|
37
38
|
|
|
39
|
+
# Renovate handles routine dependency bumps now, one pull request per package.
|
|
40
|
+
# This target remains the way to re-resolve everything at once, and the only
|
|
41
|
+
# thing that regenerates [tool.uv].constraint-dependencies from edx-lint.
|
|
38
42
|
upgrade: ## upgrade all packages in uv.lock and sync constraints from edx-lint
|
|
39
|
-
uv run --with edx-lint edx_lint write_uv_constraints pyproject.toml
|
|
43
|
+
uv run --with 'edx-lint>=6.2' edx_lint write_uv_constraints pyproject.toml
|
|
40
44
|
uv lock --upgrade
|
|
41
45
|
|
|
46
|
+
# Regenerates the constraints into a scratch copy and diffs, rather than
|
|
47
|
+
# checking `git diff`, so that it reports only this drift and not whatever else
|
|
48
|
+
# happens to be uncommitted in the working tree.
|
|
49
|
+
check-constraints: ## fail if [tool.uv].constraint-dependencies is out of date
|
|
50
|
+
@cp pyproject.toml pyproject.toml.orig
|
|
51
|
+
@uv run --with 'edx-lint>=6.2' edx_lint write_uv_constraints pyproject.toml >/dev/null
|
|
52
|
+
@if cmp -s pyproject.toml.orig pyproject.toml; then \
|
|
53
|
+
rm -f pyproject.toml.orig; \
|
|
54
|
+
else \
|
|
55
|
+
diff -u pyproject.toml.orig pyproject.toml || true; \
|
|
56
|
+
mv pyproject.toml.orig pyproject.toml; \
|
|
57
|
+
echo ""; \
|
|
58
|
+
echo "[tool.uv].constraint-dependencies is out of date with edx-lint."; \
|
|
59
|
+
echo "Run 'make upgrade' and commit the result."; \
|
|
60
|
+
exit 1; \
|
|
61
|
+
fi
|
|
62
|
+
|
|
42
63
|
quality: ## check coding style with pycodestyle and pylint
|
|
43
64
|
tox -e quality
|
|
44
65
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openedx-plugin-sample
|
|
3
|
-
Version: 3.8.
|
|
3
|
+
Version: 3.8.2
|
|
4
4
|
Summary: A sample backend plugin for the Open edX Platform
|
|
5
5
|
Author-email: Open edX Project <oscm@openedx.org>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -18,14 +18,16 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
18
18
|
Requires-Python: >=3.12
|
|
19
19
|
Description-Content-Type: text/markdown
|
|
20
20
|
License-File: LICENSE.txt
|
|
21
|
-
Requires-Dist: Django
|
|
22
|
-
Requires-Dist: djangorestframework
|
|
23
|
-
Requires-Dist: django-filter
|
|
24
|
-
Requires-Dist: edx-opaque-keys
|
|
25
|
-
Requires-Dist: openedx-core
|
|
26
|
-
Requires-Dist: openedx-events
|
|
27
|
-
Requires-Dist: openedx-filters
|
|
28
|
-
Requires-Dist: openedx-atlas
|
|
21
|
+
Requires-Dist: Django>=0
|
|
22
|
+
Requires-Dist: djangorestframework>=0
|
|
23
|
+
Requires-Dist: django-filter>=0
|
|
24
|
+
Requires-Dist: edx-opaque-keys>=0
|
|
25
|
+
Requires-Dist: openedx-core>=0
|
|
26
|
+
Requires-Dist: openedx-events>=0
|
|
27
|
+
Requires-Dist: openedx-filters>=0
|
|
28
|
+
Requires-Dist: openedx-atlas>=0
|
|
29
|
+
Requires-Dist: edx-django-utils>=0
|
|
30
|
+
Requires-Dist: django-crum>=0
|
|
29
31
|
Dynamic: license-file
|
|
30
32
|
|
|
31
33
|
# backend-plugin-sample
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
# SERIOUSLY.
|
|
65
65
|
#
|
|
66
66
|
# ------------------------------
|
|
67
|
-
# Generated by edx-lint version:
|
|
67
|
+
# Generated by edx-lint version: 6.2.0
|
|
68
68
|
# ------------------------------
|
|
69
69
|
[MASTER]
|
|
70
70
|
ignore = migrations
|
|
@@ -257,6 +257,8 @@ enable =
|
|
|
257
257
|
deprecated-pragma,
|
|
258
258
|
unrecognized-inline-option,
|
|
259
259
|
useless-suppression,
|
|
260
|
+
|
|
261
|
+
pii-invalid-no-pii-annotation,
|
|
260
262
|
disable =
|
|
261
263
|
bad-indentation,
|
|
262
264
|
broad-exception-raised,
|
|
@@ -387,4 +389,9 @@ int-import-graph =
|
|
|
387
389
|
[EXCEPTIONS]
|
|
388
390
|
overgeneral-exceptions = builtins.Exception
|
|
389
391
|
|
|
390
|
-
|
|
392
|
+
[PII]
|
|
393
|
+
pii-terms =
|
|
394
|
+
email,
|
|
395
|
+
username
|
|
396
|
+
|
|
397
|
+
# 80d06cad4da142244dcae7bb096c0394ef420379
|
|
@@ -28,15 +28,25 @@ keywords = [
|
|
|
28
28
|
|
|
29
29
|
dynamic = ["readme", "version"]
|
|
30
30
|
|
|
31
|
+
# Unconstrained on purpose. The Open edX platform pins these itself, and a
|
|
32
|
+
# plugin that narrows them causes resolution conflicts when it is installed
|
|
33
|
+
# into edx-platform. `>=0` rather than a bare name because Renovate skips any
|
|
34
|
+
# dependency with no version specifier at all, so bare names would never get
|
|
35
|
+
# update PRs. It is the PEP 440 equivalent of the "*" ranges in
|
|
36
|
+
# frontend-plugin-sample/package.json -- PEP 440 has no bare wildcard.
|
|
37
|
+
# Please don't "tidy" these into real floors without a reason to; a floor we
|
|
38
|
+
# cannot justify is a compatibility claim we cannot back up.
|
|
31
39
|
dependencies = [
|
|
32
|
-
"Django",
|
|
33
|
-
"djangorestframework",
|
|
34
|
-
"django-filter",
|
|
35
|
-
"edx-opaque-keys",
|
|
36
|
-
"openedx-core",
|
|
37
|
-
"openedx-events",
|
|
38
|
-
"openedx-filters",
|
|
39
|
-
"openedx-atlas",
|
|
40
|
+
"Django>=0",
|
|
41
|
+
"djangorestframework>=0",
|
|
42
|
+
"django-filter>=0",
|
|
43
|
+
"edx-opaque-keys>=0",
|
|
44
|
+
"openedx-core>=0",
|
|
45
|
+
"openedx-events>=0",
|
|
46
|
+
"openedx-filters>=0",
|
|
47
|
+
"openedx-atlas>=0",
|
|
48
|
+
"edx-django-utils>=0",
|
|
49
|
+
"django-crum>=0",
|
|
40
50
|
]
|
|
41
51
|
|
|
42
52
|
[project.entry-points."lms.djangoapp"]
|
|
@@ -50,16 +60,19 @@ Homepage = "https://github.com/openedx/sample-plugin"
|
|
|
50
60
|
Repository = "https://github.com/openedx/sample-plugin"
|
|
51
61
|
|
|
52
62
|
[dependency-groups]
|
|
63
|
+
# `>=0` here for the same reason as [project].dependencies above: Renovate
|
|
64
|
+
# skips dependencies with no version specifier. The two Django entries below
|
|
65
|
+
# are the real exception -- they define the test matrix.
|
|
53
66
|
test-base = [
|
|
54
|
-
"pytest-cov",
|
|
55
|
-
"pytest-django",
|
|
56
|
-
"code-annotations",
|
|
57
|
-
"edx-django-utils",
|
|
58
|
-
"django-extensions",
|
|
67
|
+
"pytest-cov>=0",
|
|
68
|
+
"pytest-django>=0",
|
|
69
|
+
"code-annotations>=0",
|
|
70
|
+
"edx-django-utils>=0",
|
|
71
|
+
"django-extensions>=0",
|
|
59
72
|
]
|
|
60
73
|
# Current default Django version used by quality, docs, and the default test
|
|
61
74
|
# matrix entry. When adding or retiring a Django version from the matrix, see
|
|
62
|
-
# docs/how-tos/
|
|
75
|
+
# https://docs.openedx.org/en/latest/developers/how-tos/manage-uv-dependency-matrix.html
|
|
63
76
|
test = [
|
|
64
77
|
{include-group = "test-base"},
|
|
65
78
|
"Django>=5.0,<6.0",
|
|
@@ -70,28 +83,30 @@ django60 = [
|
|
|
70
83
|
]
|
|
71
84
|
quality = [
|
|
72
85
|
{include-group = "test"},
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
"
|
|
76
|
-
"
|
|
86
|
+
# A real floor, not a placeholder: `edx_lint write_uv_constraints`, used by
|
|
87
|
+
# `make upgrade` and `make check-constraints`, was added in 6.2.0.
|
|
88
|
+
"edx-lint>=6.2",
|
|
89
|
+
"isort>=0",
|
|
90
|
+
"pycodestyle>=0",
|
|
91
|
+
"pydocstyle>=0",
|
|
77
92
|
]
|
|
78
93
|
doc = [
|
|
79
94
|
{include-group = "test"},
|
|
80
|
-
"doc8",
|
|
81
|
-
"sphinx-book-theme",
|
|
82
|
-
"twine",
|
|
83
|
-
"build",
|
|
84
|
-
"Sphinx",
|
|
95
|
+
"doc8>=0",
|
|
96
|
+
"sphinx-book-theme>=0",
|
|
97
|
+
"twine>=0",
|
|
98
|
+
"build>=0",
|
|
99
|
+
"Sphinx>=0",
|
|
85
100
|
]
|
|
86
101
|
ci = [
|
|
87
|
-
"tox",
|
|
88
|
-
"tox-uv",
|
|
102
|
+
"tox>=0",
|
|
103
|
+
"tox-uv>=0",
|
|
89
104
|
]
|
|
90
105
|
dev = [
|
|
91
106
|
{include-group = "quality"},
|
|
92
107
|
{include-group = "ci"},
|
|
93
|
-
"diff-cover",
|
|
94
|
-
"edx-i18n-tools",
|
|
108
|
+
"diff-cover>=0",
|
|
109
|
+
"edx-i18n-tools>=0",
|
|
95
110
|
]
|
|
96
111
|
|
|
97
112
|
[tool.setuptools]
|
|
@@ -130,10 +145,35 @@ local_scheme = 'no-local-version'
|
|
|
130
145
|
fallback_version = "0.0.0.dev0"
|
|
131
146
|
|
|
132
147
|
[tool.uv]
|
|
148
|
+
# Supply-chain cooling-off period: never resolve to a release younger than
|
|
149
|
+
# this. A hijacked release is usually yanked within a few days, so waiting is
|
|
150
|
+
# cheap insurance for a repo where nothing is urgent.
|
|
151
|
+
#
|
|
152
|
+
# uv records the window in uv.lock as `[options] exclude-newer-span = "P7D"`
|
|
153
|
+
# and re-evaluates it at resolve time. A widening window cannot invalidate the
|
|
154
|
+
# lock -- exclude-newer only restricts which candidates are eligible, it never
|
|
155
|
+
# forces an upgrade -- so `uv lock --check` and `uv sync --locked` keep passing
|
|
156
|
+
# as time goes by. Raising the number of days here can invalidate it, though,
|
|
157
|
+
# if the new cutoff excludes something already locked.
|
|
158
|
+
#
|
|
159
|
+
# This is the real enforcement point, not Renovate: Renovate cannot apply its
|
|
160
|
+
# own `minimumReleaseAge` to a lockfile refresh, because it delegates that to
|
|
161
|
+
# uv and never sees the individual releases. Setting it here also means a
|
|
162
|
+
# developer running `make upgrade` locally gets the same behaviour as the bot.
|
|
163
|
+
#
|
|
164
|
+
# *** Keep this in sync with `minimumReleaseAge` in ../renovate.json5 and with
|
|
165
|
+
# *** `min-release-age` in the .npmrc files. If uv is stricter than Renovate,
|
|
166
|
+
# *** Renovate proposes versions uv then refuses and churns empty branches.
|
|
167
|
+
#
|
|
168
|
+
# To let one urgent security fix through without dropping the window for
|
|
169
|
+
# everything, add a temporary exemption rather than changing this value:
|
|
170
|
+
# exclude-newer-package = { the-package = false }
|
|
171
|
+
exclude-newer = "7 days"
|
|
172
|
+
|
|
133
173
|
# Each entry lists groups with mutually exclusive version requirements so uv can
|
|
134
174
|
# produce a single uv.lock that contains a separate resolution for each. Add a
|
|
135
175
|
# new pair here whenever you add a legacy-version group to [dependency-groups].
|
|
136
|
-
# See docs/how-tos/
|
|
176
|
+
# See https://docs.openedx.org/en/latest/developers/how-tos/manage-uv-dependency-matrix.html
|
|
137
177
|
conflicts = [
|
|
138
178
|
[{group = "test"}, {group = "django60"}],
|
|
139
179
|
]
|
|
@@ -145,12 +185,21 @@ conflicts = [
|
|
|
145
185
|
constraint-dependencies = [
|
|
146
186
|
"Django<7.0",
|
|
147
187
|
"elasticsearch<7.14.0",
|
|
188
|
+
"social-auth-app-django<6.0.0",
|
|
189
|
+
"social-auth-core<5.0.0",
|
|
190
|
+
"pip<26.2.1",
|
|
148
191
|
]
|
|
149
192
|
|
|
150
193
|
[tool.edx_lint]
|
|
151
194
|
# Repo-specific uv constraints merged with edx-lint's global constraints.
|
|
152
195
|
# Local entries override global ones for the same package.
|
|
153
196
|
# Run `make upgrade` to regenerate [tool.uv].constraint-dependencies.
|
|
197
|
+
#
|
|
198
|
+
# Any cap added here also needs a matching rule in ../renovate.json5, either
|
|
199
|
+
# `enabled: false` or an `allowedVersions` for that package. Otherwise
|
|
200
|
+
# Renovate offers a version the constraint forbids, `uv lock` refuses it, and
|
|
201
|
+
# the branch lands with no changes -- retried on every run. See the Django
|
|
202
|
+
# rule there for the worked example.
|
|
154
203
|
uv_constraints = [
|
|
155
204
|
"Django<7.0", # this repo tests against Django 6.x; overrides the global Django<6.0 constraint
|
|
156
205
|
]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: openedx-plugin-sample
|
|
3
|
-
Version: 3.8.
|
|
3
|
+
Version: 3.8.2
|
|
4
4
|
Summary: A sample backend plugin for the Open edX Platform
|
|
5
5
|
Author-email: Open edX Project <oscm@openedx.org>
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -18,14 +18,16 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
18
18
|
Requires-Python: >=3.12
|
|
19
19
|
Description-Content-Type: text/markdown
|
|
20
20
|
License-File: LICENSE.txt
|
|
21
|
-
Requires-Dist: Django
|
|
22
|
-
Requires-Dist: djangorestframework
|
|
23
|
-
Requires-Dist: django-filter
|
|
24
|
-
Requires-Dist: edx-opaque-keys
|
|
25
|
-
Requires-Dist: openedx-core
|
|
26
|
-
Requires-Dist: openedx-events
|
|
27
|
-
Requires-Dist: openedx-filters
|
|
28
|
-
Requires-Dist: openedx-atlas
|
|
21
|
+
Requires-Dist: Django>=0
|
|
22
|
+
Requires-Dist: djangorestframework>=0
|
|
23
|
+
Requires-Dist: django-filter>=0
|
|
24
|
+
Requires-Dist: edx-opaque-keys>=0
|
|
25
|
+
Requires-Dist: openedx-core>=0
|
|
26
|
+
Requires-Dist: openedx-events>=0
|
|
27
|
+
Requires-Dist: openedx-filters>=0
|
|
28
|
+
Requires-Dist: openedx-atlas>=0
|
|
29
|
+
Requires-Dist: edx-django-utils>=0
|
|
30
|
+
Requires-Dist: django-crum>=0
|
|
29
31
|
Dynamic: license-file
|
|
30
32
|
|
|
31
33
|
# backend-plugin-sample
|
|
@@ -34,7 +34,7 @@ match-dir = (?!migrations)
|
|
|
34
34
|
[pytest]
|
|
35
35
|
DJANGO_SETTINGS_MODULE = test_settings
|
|
36
36
|
addopts = --cov openedx_plugin_sample --cov tests --cov-report term-missing --cov-report xml
|
|
37
|
-
norecursedirs = .* docs
|
|
37
|
+
norecursedirs = .* docs site-packages
|
|
38
38
|
|
|
39
39
|
[testenv]
|
|
40
40
|
runner = uv-venv-lock-runner
|
|
@@ -82,6 +82,12 @@ commands =
|
|
|
82
82
|
pydocstyle src/openedx_plugin_sample tests manage.py
|
|
83
83
|
isort --check-only --diff tests test_utils src/openedx_plugin_sample manage.py test_settings.py
|
|
84
84
|
make selfcheck
|
|
85
|
+
# Renovate cannot run `edx_lint write_uv_constraints` itself, so instead of
|
|
86
|
+
# regenerating the constraints on a schedule we fail here when they drift.
|
|
87
|
+
# The loop closes itself: edx-lint is a managed dependency, so the pull
|
|
88
|
+
# request that bumps it is the one that goes red if edx-lint's global
|
|
89
|
+
# constraints moved with it.
|
|
90
|
+
make check-constraints
|
|
85
91
|
|
|
86
92
|
[testenv:pii_check]
|
|
87
93
|
runner = uv-venv-lock-runner
|
|
@@ -15,10 +15,17 @@ conflicts = [[
|
|
|
15
15
|
{ package = "openedx-plugin-sample", group = "django60" },
|
|
16
16
|
]]
|
|
17
17
|
|
|
18
|
+
[options]
|
|
19
|
+
exclude-newer = "0001-01-01T00:00:00Z" # This has no effect and is included for backwards compatibility when using relative exclude-newer values.
|
|
20
|
+
exclude-newer-span = "P7D"
|
|
21
|
+
|
|
18
22
|
[manifest]
|
|
19
23
|
constraints = [
|
|
20
24
|
{ name = "django", specifier = "<7.0" },
|
|
21
25
|
{ name = "elasticsearch", specifier = "<7.14.0" },
|
|
26
|
+
{ name = "pip", specifier = "<26.2.1" },
|
|
27
|
+
{ name = "social-auth-app-django", specifier = "<6.0.0" },
|
|
28
|
+
{ name = "social-auth-core", specifier = "<5.0.0" },
|
|
22
29
|
]
|
|
23
30
|
|
|
24
31
|
[[package]]
|
|
@@ -819,7 +826,7 @@ wheels = [
|
|
|
819
826
|
|
|
820
827
|
[[package]]
|
|
821
828
|
name = "edx-lint"
|
|
822
|
-
version = "6.
|
|
829
|
+
version = "6.2.0"
|
|
823
830
|
source = { registry = "https://pypi.org/simple" }
|
|
824
831
|
dependencies = [
|
|
825
832
|
{ name = "click" },
|
|
@@ -829,10 +836,11 @@ dependencies = [
|
|
|
829
836
|
{ name = "pylint-celery" },
|
|
830
837
|
{ name = "pylint-django" },
|
|
831
838
|
{ name = "six" },
|
|
839
|
+
{ name = "tomlkit" },
|
|
832
840
|
]
|
|
833
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
841
|
+
sdist = { url = "https://files.pythonhosted.org/packages/da/e2/20b4782eba5bbbaeb949877666f871912db05fb22cee2eafdbc83566cffc/edx_lint-6.2.0.tar.gz", hash = "sha256:2ce94b0b1235024e7714792442ea674e1bbe2877e7ca2ca970609e74aa73dfdf", size = 55456, upload-time = "2026-08-18T12:40:35.178Z" }
|
|
834
842
|
wheels = [
|
|
835
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
843
|
+
{ url = "https://files.pythonhosted.org/packages/cf/f3/72bbb973cb654aa9d8291c438dd02b21ffb3bf2bdc9e653f9ea9048e3b20/edx_lint-6.2.0-py3-none-any.whl", hash = "sha256:0e1491f9a049927e35eb05a0fd33464b4ec912b83e387568e37f4ce5d10acb30", size = 64109, upload-time = "2026-08-18T12:40:34.102Z" },
|
|
836
844
|
]
|
|
837
845
|
|
|
838
846
|
[[package]]
|
|
@@ -1350,8 +1358,10 @@ source = { editable = "." }
|
|
|
1350
1358
|
dependencies = [
|
|
1351
1359
|
{ name = "django", version = "5.2.13", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'group-21-openedx-plugin-sample-dev' or extra != 'group-21-openedx-plugin-sample-django60' or (extra == 'group-21-openedx-plugin-sample-django60' and extra == 'group-21-openedx-plugin-sample-doc') or (extra == 'group-21-openedx-plugin-sample-django60' and extra == 'group-21-openedx-plugin-sample-quality') or (extra == 'group-21-openedx-plugin-sample-django60' and extra == 'group-21-openedx-plugin-sample-test')" },
|
|
1352
1360
|
{ name = "django", version = "6.0.4", source = { registry = "https://pypi.org/simple" }, marker = "extra == 'group-21-openedx-plugin-sample-django60'" },
|
|
1361
|
+
{ name = "django-crum" },
|
|
1353
1362
|
{ name = "django-filter" },
|
|
1354
1363
|
{ name = "djangorestframework" },
|
|
1364
|
+
{ name = "edx-django-utils" },
|
|
1355
1365
|
{ name = "edx-opaque-keys" },
|
|
1356
1366
|
{ name = "openedx-atlas" },
|
|
1357
1367
|
{ name = "openedx-core" },
|
|
@@ -1431,84 +1441,86 @@ test-base = [
|
|
|
1431
1441
|
|
|
1432
1442
|
[package.metadata]
|
|
1433
1443
|
requires-dist = [
|
|
1434
|
-
{ name = "django" },
|
|
1435
|
-
{ name = "django-
|
|
1436
|
-
{ name = "
|
|
1437
|
-
{ name = "
|
|
1438
|
-
{ name = "
|
|
1439
|
-
{ name = "
|
|
1440
|
-
{ name = "openedx-
|
|
1441
|
-
{ name = "openedx-
|
|
1444
|
+
{ name = "django", specifier = ">=0" },
|
|
1445
|
+
{ name = "django-crum", specifier = ">=0" },
|
|
1446
|
+
{ name = "django-filter", specifier = ">=0" },
|
|
1447
|
+
{ name = "djangorestframework", specifier = ">=0" },
|
|
1448
|
+
{ name = "edx-django-utils", specifier = ">=0" },
|
|
1449
|
+
{ name = "edx-opaque-keys", specifier = ">=0" },
|
|
1450
|
+
{ name = "openedx-atlas", specifier = ">=0" },
|
|
1451
|
+
{ name = "openedx-core", specifier = ">=0" },
|
|
1452
|
+
{ name = "openedx-events", specifier = ">=0" },
|
|
1453
|
+
{ name = "openedx-filters", specifier = ">=0" },
|
|
1442
1454
|
]
|
|
1443
1455
|
|
|
1444
1456
|
[package.metadata.requires-dev]
|
|
1445
1457
|
ci = [
|
|
1446
|
-
{ name = "tox" },
|
|
1447
|
-
{ name = "tox-uv" },
|
|
1458
|
+
{ name = "tox", specifier = ">=0" },
|
|
1459
|
+
{ name = "tox-uv", specifier = ">=0" },
|
|
1448
1460
|
]
|
|
1449
1461
|
dev = [
|
|
1450
|
-
{ name = "code-annotations" },
|
|
1451
|
-
{ name = "diff-cover" },
|
|
1462
|
+
{ name = "code-annotations", specifier = ">=0" },
|
|
1463
|
+
{ name = "diff-cover", specifier = ">=0" },
|
|
1452
1464
|
{ name = "django", specifier = ">=5.0,<6.0" },
|
|
1453
|
-
{ name = "django-extensions" },
|
|
1454
|
-
{ name = "edx-django-utils" },
|
|
1455
|
-
{ name = "edx-i18n-tools" },
|
|
1456
|
-
{ name = "edx-lint" },
|
|
1457
|
-
{ name = "isort" },
|
|
1458
|
-
{ name = "pycodestyle" },
|
|
1459
|
-
{ name = "pydocstyle" },
|
|
1460
|
-
{ name = "pytest-cov" },
|
|
1461
|
-
{ name = "pytest-django" },
|
|
1462
|
-
{ name = "tox" },
|
|
1463
|
-
{ name = "tox-uv" },
|
|
1465
|
+
{ name = "django-extensions", specifier = ">=0" },
|
|
1466
|
+
{ name = "edx-django-utils", specifier = ">=0" },
|
|
1467
|
+
{ name = "edx-i18n-tools", specifier = ">=0" },
|
|
1468
|
+
{ name = "edx-lint", specifier = ">=6.2" },
|
|
1469
|
+
{ name = "isort", specifier = ">=0" },
|
|
1470
|
+
{ name = "pycodestyle", specifier = ">=0" },
|
|
1471
|
+
{ name = "pydocstyle", specifier = ">=0" },
|
|
1472
|
+
{ name = "pytest-cov", specifier = ">=0" },
|
|
1473
|
+
{ name = "pytest-django", specifier = ">=0" },
|
|
1474
|
+
{ name = "tox", specifier = ">=0" },
|
|
1475
|
+
{ name = "tox-uv", specifier = ">=0" },
|
|
1464
1476
|
]
|
|
1465
1477
|
django60 = [
|
|
1466
|
-
{ name = "code-annotations" },
|
|
1478
|
+
{ name = "code-annotations", specifier = ">=0" },
|
|
1467
1479
|
{ name = "django", specifier = ">=6.0,<7.0" },
|
|
1468
|
-
{ name = "django-extensions" },
|
|
1469
|
-
{ name = "edx-django-utils" },
|
|
1470
|
-
{ name = "pytest-cov" },
|
|
1471
|
-
{ name = "pytest-django" },
|
|
1480
|
+
{ name = "django-extensions", specifier = ">=0" },
|
|
1481
|
+
{ name = "edx-django-utils", specifier = ">=0" },
|
|
1482
|
+
{ name = "pytest-cov", specifier = ">=0" },
|
|
1483
|
+
{ name = "pytest-django", specifier = ">=0" },
|
|
1472
1484
|
]
|
|
1473
1485
|
doc = [
|
|
1474
|
-
{ name = "build" },
|
|
1475
|
-
{ name = "code-annotations" },
|
|
1486
|
+
{ name = "build", specifier = ">=0" },
|
|
1487
|
+
{ name = "code-annotations", specifier = ">=0" },
|
|
1476
1488
|
{ name = "django", specifier = ">=5.0,<6.0" },
|
|
1477
|
-
{ name = "django-extensions" },
|
|
1478
|
-
{ name = "doc8" },
|
|
1479
|
-
{ name = "edx-django-utils" },
|
|
1480
|
-
{ name = "pytest-cov" },
|
|
1481
|
-
{ name = "pytest-django" },
|
|
1482
|
-
{ name = "sphinx" },
|
|
1483
|
-
{ name = "sphinx-book-theme" },
|
|
1484
|
-
{ name = "twine" },
|
|
1489
|
+
{ name = "django-extensions", specifier = ">=0" },
|
|
1490
|
+
{ name = "doc8", specifier = ">=0" },
|
|
1491
|
+
{ name = "edx-django-utils", specifier = ">=0" },
|
|
1492
|
+
{ name = "pytest-cov", specifier = ">=0" },
|
|
1493
|
+
{ name = "pytest-django", specifier = ">=0" },
|
|
1494
|
+
{ name = "sphinx", specifier = ">=0" },
|
|
1495
|
+
{ name = "sphinx-book-theme", specifier = ">=0" },
|
|
1496
|
+
{ name = "twine", specifier = ">=0" },
|
|
1485
1497
|
]
|
|
1486
1498
|
quality = [
|
|
1487
|
-
{ name = "code-annotations" },
|
|
1499
|
+
{ name = "code-annotations", specifier = ">=0" },
|
|
1488
1500
|
{ name = "django", specifier = ">=5.0,<6.0" },
|
|
1489
|
-
{ name = "django-extensions" },
|
|
1490
|
-
{ name = "edx-django-utils" },
|
|
1491
|
-
{ name = "edx-lint" },
|
|
1492
|
-
{ name = "isort" },
|
|
1493
|
-
{ name = "pycodestyle" },
|
|
1494
|
-
{ name = "pydocstyle" },
|
|
1495
|
-
{ name = "pytest-cov" },
|
|
1496
|
-
{ name = "pytest-django" },
|
|
1501
|
+
{ name = "django-extensions", specifier = ">=0" },
|
|
1502
|
+
{ name = "edx-django-utils", specifier = ">=0" },
|
|
1503
|
+
{ name = "edx-lint", specifier = ">=6.2" },
|
|
1504
|
+
{ name = "isort", specifier = ">=0" },
|
|
1505
|
+
{ name = "pycodestyle", specifier = ">=0" },
|
|
1506
|
+
{ name = "pydocstyle", specifier = ">=0" },
|
|
1507
|
+
{ name = "pytest-cov", specifier = ">=0" },
|
|
1508
|
+
{ name = "pytest-django", specifier = ">=0" },
|
|
1497
1509
|
]
|
|
1498
1510
|
test = [
|
|
1499
|
-
{ name = "code-annotations" },
|
|
1511
|
+
{ name = "code-annotations", specifier = ">=0" },
|
|
1500
1512
|
{ name = "django", specifier = ">=5.0,<6.0" },
|
|
1501
|
-
{ name = "django-extensions" },
|
|
1502
|
-
{ name = "edx-django-utils" },
|
|
1503
|
-
{ name = "pytest-cov" },
|
|
1504
|
-
{ name = "pytest-django" },
|
|
1513
|
+
{ name = "django-extensions", specifier = ">=0" },
|
|
1514
|
+
{ name = "edx-django-utils", specifier = ">=0" },
|
|
1515
|
+
{ name = "pytest-cov", specifier = ">=0" },
|
|
1516
|
+
{ name = "pytest-django", specifier = ">=0" },
|
|
1505
1517
|
]
|
|
1506
1518
|
test-base = [
|
|
1507
|
-
{ name = "code-annotations" },
|
|
1508
|
-
{ name = "django-extensions" },
|
|
1509
|
-
{ name = "edx-django-utils" },
|
|
1510
|
-
{ name = "pytest-cov" },
|
|
1511
|
-
{ name = "pytest-django" },
|
|
1519
|
+
{ name = "code-annotations", specifier = ">=0" },
|
|
1520
|
+
{ name = "django-extensions", specifier = ">=0" },
|
|
1521
|
+
{ name = "edx-django-utils", specifier = ">=0" },
|
|
1522
|
+
{ name = "pytest-cov", specifier = ">=0" },
|
|
1523
|
+
{ name = "pytest-django", specifier = ">=0" },
|
|
1512
1524
|
]
|
|
1513
1525
|
|
|
1514
1526
|
[[package]]
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# .readthedocs.yml
|
|
2
|
-
# Read the Docs configuration file
|
|
3
|
-
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
|
4
|
-
|
|
5
|
-
# Required
|
|
6
|
-
version: 2
|
|
7
|
-
|
|
8
|
-
# Build documentation in the docs/ directory with Sphinx
|
|
9
|
-
sphinx:
|
|
10
|
-
configuration: docs/conf.py
|
|
11
|
-
fail_on_warning: true
|
|
12
|
-
|
|
13
|
-
# Set the version of python needed to build these docs.
|
|
14
|
-
build:
|
|
15
|
-
os: "ubuntu-22.04"
|
|
16
|
-
tools:
|
|
17
|
-
python: "3.12"
|
|
18
|
-
|
|
19
|
-
python:
|
|
20
|
-
install:
|
|
21
|
-
- requirements: requirements/doc.txt
|
|
22
|
-
|
|
23
|
-
# This will pip install this repo into the python environment
|
|
24
|
-
# if you are using this in a repo that is not pip installable
|
|
25
|
-
# then you should remove the following two lines.
|
|
26
|
-
- method: pip
|
|
27
|
-
path: .
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/_static/theme_overrides.css
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
|
|
File without changes
|
|
File without changes
|
{openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/__init__.py
RENAMED
|
File without changes
|
{openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/admin.py
RENAMED
|
File without changes
|
{openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/apps.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/models.py
RENAMED
|
File without changes
|
{openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/pipeline.py
RENAMED
|
File without changes
|
{openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/py.typed
RENAMED
|
File without changes
|
{openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/serializers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/signals.py
RENAMED
|
File without changes
|
|
File without changes
|
{openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/urls.py
RENAMED
|
File without changes
|
{openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/views.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
|
{openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/tests/test_plugin_integration.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|