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.
Files changed (67) hide show
  1. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/.gitignore +0 -4
  2. openedx_plugin_sample-3.8.2/.readthedocs.yaml +38 -0
  3. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/Makefile +23 -2
  4. {openedx_plugin_sample-3.8.0/src/openedx_plugin_sample.egg-info → openedx_plugin_sample-3.8.2}/PKG-INFO +11 -9
  5. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/pylintrc +9 -2
  6. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/pyproject.toml +77 -28
  7. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2/src/openedx_plugin_sample.egg-info}/PKG-INFO +11 -9
  8. openedx_plugin_sample-3.8.2/src/openedx_plugin_sample.egg-info/requires.txt +10 -0
  9. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/tox.ini +7 -1
  10. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/uv.lock +72 -60
  11. openedx_plugin_sample-3.8.0/.readthedocs.yaml +0 -27
  12. openedx_plugin_sample-3.8.0/src/openedx_plugin_sample.egg-info/requires.txt +0 -8
  13. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/.annotation_safe_list.yml +0 -0
  14. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/.coveragerc +0 -0
  15. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/.editorconfig +0 -0
  16. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/.pii_annotations.yml +0 -0
  17. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/LICENSE.txt +0 -0
  18. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/README.md +0 -0
  19. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/codecov.yml +0 -0
  20. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/Makefile +0 -0
  21. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/_static/theme_overrides.css +0 -0
  22. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/concepts/index.rst +0 -0
  23. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/conf.py +0 -0
  24. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/decisions/0001-purpose-of-this-repo.rst +0 -0
  25. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/decisions/README.rst +0 -0
  26. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/decisions.rst +0 -0
  27. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/getting_started.rst +0 -0
  28. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/how-tos/index.rst +0 -0
  29. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/index.rst +0 -0
  30. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/internationalization.rst +0 -0
  31. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/make.bat +0 -0
  32. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/openedx_plugin_sample.rst +0 -0
  33. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/quickstarts/index.rst +0 -0
  34. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/references/index.rst +0 -0
  35. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/docs/testing.rst +0 -0
  36. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/manage.py +0 -0
  37. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/pylintrc_tweaks +0 -0
  38. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/setup.cfg +0 -0
  39. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/__init__.py +0 -0
  40. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/admin.py +0 -0
  41. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/apps.py +0 -0
  42. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/conf/locale/config.yaml +0 -0
  43. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/migrations/0001_initial.py +0 -0
  44. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/migrations/__init__.py +0 -0
  45. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/models.py +0 -0
  46. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/pipeline.py +0 -0
  47. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/py.typed +0 -0
  48. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/serializers.py +0 -0
  49. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/settings/common.py +0 -0
  50. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/settings/production.py +0 -0
  51. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/settings/test.py +0 -0
  52. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/signals.py +0 -0
  53. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/templates/openedx_plugin_sample/base.html +0 -0
  54. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/urls.py +0 -0
  55. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample/views.py +0 -0
  56. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample.egg-info/SOURCES.txt +0 -0
  57. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample.egg-info/dependency_links.txt +0 -0
  58. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample.egg-info/entry_points.txt +0 -0
  59. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/src/openedx_plugin_sample.egg-info/top_level.txt +0 -0
  60. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/test_settings.py +0 -0
  61. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/test_utils/__init__.py +0 -0
  62. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/tests/test_api.py +0 -0
  63. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/tests/test_models.py +0 -0
  64. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/tests/test_pipeline.py +0 -0
  65. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/tests/test_plugin_integration.py +0 -0
  66. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/tests/test_signals.py +0 -0
  67. {openedx_plugin_sample-3.8.0 → openedx_plugin_sample-3.8.2}/tests/urls.py +0 -0
@@ -60,10 +60,6 @@ docs/modules.rst
60
60
  docs/sample_plugin.rst
61
61
  docs/sample_plugin.*.rst
62
62
 
63
- # Private requirements
64
- requirements/private.in
65
- requirements/private.txt
66
-
67
63
  # Test cruft
68
64
  default.db
69
65
  pii_report
@@ -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.0
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: 5.6.0
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
- # 79853056a08a5009db4a6e9a8ca00c194036ac5a
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/adding-a-matrix-dependency.rst for the full process.
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
- "edx-lint",
74
- "isort",
75
- "pycodestyle",
76
- "pydocstyle",
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/adding-a-matrix-dependency.rst for the full process.
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.0
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
@@ -0,0 +1,10 @@
1
+ Django>=0
2
+ djangorestframework>=0
3
+ django-filter>=0
4
+ edx-opaque-keys>=0
5
+ openedx-core>=0
6
+ openedx-events>=0
7
+ openedx-filters>=0
8
+ openedx-atlas>=0
9
+ edx-django-utils>=0
10
+ django-crum>=0
@@ -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 requirements site-packages
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.0.0"
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/7a/b5/43614ee28105f436b5664fa0ead2ed6f74c125b732e030b7ceaa7f3e953f/edx_lint-6.0.0.tar.gz", hash = "sha256:078e6f3a5d54f295a43c6db59f7fdc373e139aa1bda8b7ce02fb53e15296675b", size = 48460, upload-time = "2026-03-12T18:00:53.047Z" }
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/d8/fd/f3fbb21bb2ac75dbacbbd8a9afbffc093b09d51128ec80def128761b19b4/edx_lint-6.0.0-py3-none-any.whl", hash = "sha256:5eab30bf1beb6f678b973151b9c0add0efbd758ef33f3df52e687dc48b2c0024", size = 56807, upload-time = "2026-03-12T18:00:51.866Z" },
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-filter" },
1436
- { name = "djangorestframework" },
1437
- { name = "edx-opaque-keys" },
1438
- { name = "openedx-atlas" },
1439
- { name = "openedx-core" },
1440
- { name = "openedx-events" },
1441
- { name = "openedx-filters" },
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: .
@@ -1,8 +0,0 @@
1
- Django
2
- djangorestframework
3
- django-filter
4
- edx-opaque-keys
5
- openedx-core
6
- openedx-events
7
- openedx-filters
8
- openedx-atlas