openedx-learning 0.18.1__tar.gz → 0.18.3__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 (128) hide show
  1. {openedx_learning-0.18.1/openedx_learning.egg-info → openedx_learning-0.18.3}/PKG-INFO +15 -5
  2. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/__init__.py +1 -1
  3. {openedx_learning-0.18.1 → openedx_learning-0.18.3/openedx_learning.egg-info}/PKG-INFO +15 -5
  4. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/api.py +7 -0
  5. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/rest_api/v1/serializers.py +1 -2
  6. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/rest_api/v1/views.py +8 -2
  7. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/CHANGELOG.rst +0 -0
  8. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/LICENSE.txt +0 -0
  9. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/MANIFEST.in +0 -0
  10. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/README.rst +0 -0
  11. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/api/__init__.py +0 -0
  12. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/api/authoring.py +0 -0
  13. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/api/authoring_models.py +0 -0
  14. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/__init__.py +0 -0
  15. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/__init__.py +0 -0
  16. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/collections/__init__.py +0 -0
  17. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/collections/admin.py +0 -0
  18. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/collections/api.py +0 -0
  19. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/collections/apps.py +0 -0
  20. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/collections/migrations/0001_initial.py +0 -0
  21. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/collections/migrations/0002_remove_collection_name_collection_created_by_and_more.py +0 -0
  22. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/collections/migrations/0003_collection_entities.py +0 -0
  23. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/collections/migrations/0004_collection_key.py +0 -0
  24. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/collections/migrations/0005_alter_collection_options_alter_collection_enabled.py +0 -0
  25. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/collections/migrations/__init__.py +0 -0
  26. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/collections/models.py +0 -0
  27. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/components/__init__.py +0 -0
  28. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/components/admin.py +0 -0
  29. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/components/api.py +0 -0
  30. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/components/apps.py +0 -0
  31. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/components/management/__init__.py +0 -0
  32. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/components/management/commands/__init__.py +0 -0
  33. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/components/management/commands/add_assets_to_component.py +0 -0
  34. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/components/migrations/0001_initial.py +0 -0
  35. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/components/migrations/0002_alter_componentversioncontent_key.py +0 -0
  36. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/components/migrations/0003_remove_componentversioncontent_learner_downloadable.py +0 -0
  37. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/components/migrations/__init__.py +0 -0
  38. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/components/models.py +0 -0
  39. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/contents/__init__.py +0 -0
  40. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/contents/admin.py +0 -0
  41. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/contents/api.py +0 -0
  42. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/contents/apps.py +0 -0
  43. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/contents/migrations/0001_initial.py +0 -0
  44. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/contents/migrations/__init__.py +0 -0
  45. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/contents/models.py +0 -0
  46. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/publishing/__init__.py +0 -0
  47. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/publishing/admin.py +0 -0
  48. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/publishing/api.py +0 -0
  49. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/publishing/apps.py +0 -0
  50. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/publishing/migrations/0001_initial.py +0 -0
  51. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/publishing/migrations/0002_alter_learningpackage_key_and_more.py +0 -0
  52. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/publishing/migrations/__init__.py +0 -0
  53. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/publishing/model_mixins.py +0 -0
  54. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/apps/authoring/publishing/models.py +0 -0
  55. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/contrib/__init__.py +0 -0
  56. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/contrib/media_server/__init__.py +0 -0
  57. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/contrib/media_server/apps.py +0 -0
  58. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/contrib/media_server/urls.py +0 -0
  59. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/contrib/media_server/views.py +0 -0
  60. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/lib/__init__.py +0 -0
  61. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/lib/admin_utils.py +0 -0
  62. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/lib/cache.py +0 -0
  63. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/lib/collations.py +0 -0
  64. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/lib/fields.py +0 -0
  65. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/lib/managers.py +0 -0
  66. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/lib/test_utils.py +0 -0
  67. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/lib/validators.py +0 -0
  68. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning/py.typed +0 -0
  69. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning.egg-info/SOURCES.txt +0 -0
  70. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning.egg-info/dependency_links.txt +0 -0
  71. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning.egg-info/not-zip-safe +0 -0
  72. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning.egg-info/requires.txt +3 -3
  73. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_learning.egg-info/top_level.txt +0 -0
  74. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/__init__.py +0 -0
  75. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/__init__.py +0 -0
  76. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/__init__.py +0 -0
  77. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/admin.py +0 -0
  78. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/apps.py +0 -0
  79. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/data.py +0 -0
  80. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/import_export/__init__.py +0 -0
  81. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/import_export/actions.py +0 -0
  82. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/import_export/api.py +0 -0
  83. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/import_export/exceptions.py +0 -0
  84. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/import_export/import_plan.py +0 -0
  85. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/import_export/parsers.py +0 -0
  86. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/import_export/tasks.py +0 -0
  87. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/import_export/template.csv +0 -0
  88. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/import_export/template.json +0 -0
  89. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/migrations/0001_initial.py +0 -0
  90. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/migrations/0001_squashed.py +0 -0
  91. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/migrations/0002_auto_20230718_2026.py +0 -0
  92. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/migrations/0003_auto_20230721_1238.py +0 -0
  93. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/migrations/0004_auto_20230723_2001.py +0 -0
  94. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/migrations/0005_language_taxonomy.py +0 -0
  95. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/migrations/0006_alter_objecttag_unique_together.py +0 -0
  96. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/migrations/0006_auto_20230802_1631.py +0 -0
  97. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/migrations/0007_tag_import_task_log_null_fix.py +0 -0
  98. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/migrations/0008_taxonomy_description_not_null.py +0 -0
  99. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/migrations/0009_alter_objecttag_object_id.py +0 -0
  100. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/migrations/0010_cleanups.py +0 -0
  101. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/migrations/0011_remove_required.py +0 -0
  102. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/migrations/0012_language_taxonomy.py +0 -0
  103. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/migrations/0013_tag_parent_blank.py +0 -0
  104. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/migrations/0014_minor_fixes.py +0 -0
  105. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/migrations/0015_taxonomy_export_id.py +0 -0
  106. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/migrations/0016_object_tag_export_id.py +0 -0
  107. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/migrations/0017_alter_tagimporttask_status.py +0 -0
  108. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/migrations/0018_objecttag_is_copied.py +0 -0
  109. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/migrations/__init__.py +0 -0
  110. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/models/__init__.py +0 -0
  111. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/models/base.py +0 -0
  112. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/models/import_export.py +0 -0
  113. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/models/system_defined.py +0 -0
  114. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/models/utils.py +0 -0
  115. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/rest_api/__init__.py +0 -0
  116. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/rest_api/paginators.py +0 -0
  117. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/rest_api/urls.py +0 -0
  118. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/rest_api/utils.py +0 -0
  119. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/rest_api/v1/__init__.py +0 -0
  120. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/rest_api/v1/permissions.py +0 -0
  121. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/rest_api/v1/urls.py +0 -0
  122. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/rest_api/v1/views_import.py +0 -0
  123. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/rules.py +0 -0
  124. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/core/tagging/urls.py +0 -0
  125. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/openedx_tagging/py.typed +0 -0
  126. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/requirements/base.in +0 -0
  127. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/setup.cfg +0 -0
  128. {openedx_learning-0.18.1 → openedx_learning-0.18.3}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: openedx-learning
3
- Version: 0.18.1
3
+ Version: 0.18.3
4
4
  Summary: Open edX Learning Core and Tagging.
5
5
  Home-page: https://github.com/openedx/openedx-learning
6
6
  Author: David Ormsbee
@@ -18,12 +18,22 @@ Classifier: Programming Language :: Python :: 3.11
18
18
  Classifier: Programming Language :: Python :: 3.12
19
19
  Requires-Python: >=3.11
20
20
  License-File: LICENSE.txt
21
- Requires-Dist: attrs
22
- Requires-Dist: celery
23
- Requires-Dist: Django<5.0
24
21
  Requires-Dist: rules<4.0
22
+ Requires-Dist: attrs
25
23
  Requires-Dist: edx-drf-extensions
24
+ Requires-Dist: Django<5.0
25
+ Requires-Dist: celery
26
26
  Requires-Dist: djangorestframework<4.0
27
+ Dynamic: author
28
+ Dynamic: author-email
29
+ Dynamic: classifier
30
+ Dynamic: description
31
+ Dynamic: home-page
32
+ Dynamic: keywords
33
+ Dynamic: license
34
+ Dynamic: requires-dist
35
+ Dynamic: requires-python
36
+ Dynamic: summary
27
37
 
28
38
  Open edX Learning Core (and Tagging)
29
39
  ====================================
@@ -2,4 +2,4 @@
2
2
  Open edX Learning ("Learning Core").
3
3
  """
4
4
 
5
- __version__ = "0.18.1"
5
+ __version__ = "0.18.3"
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: openedx-learning
3
- Version: 0.18.1
3
+ Version: 0.18.3
4
4
  Summary: Open edX Learning Core and Tagging.
5
5
  Home-page: https://github.com/openedx/openedx-learning
6
6
  Author: David Ormsbee
@@ -18,12 +18,22 @@ Classifier: Programming Language :: Python :: 3.11
18
18
  Classifier: Programming Language :: Python :: 3.12
19
19
  Requires-Python: >=3.11
20
20
  License-File: LICENSE.txt
21
- Requires-Dist: attrs
22
- Requires-Dist: celery
23
- Requires-Dist: Django<5.0
24
21
  Requires-Dist: rules<4.0
22
+ Requires-Dist: attrs
25
23
  Requires-Dist: edx-drf-extensions
24
+ Requires-Dist: Django<5.0
25
+ Requires-Dist: celery
26
26
  Requires-Dist: djangorestframework<4.0
27
+ Dynamic: author
28
+ Dynamic: author-email
29
+ Dynamic: classifier
30
+ Dynamic: description
31
+ Dynamic: home-page
32
+ Dynamic: keywords
33
+ Dynamic: license
34
+ Dynamic: requires-dist
35
+ Dynamic: requires-python
36
+ Dynamic: summary
27
37
 
28
38
  Open edX Learning Core (and Tagging)
29
39
  ====================================
@@ -516,3 +516,10 @@ def copy_tags(source_object_id: str, dest_object_id: str):
516
516
  defaults={"is_copied": True},
517
517
  # Note: _value and _export_id are set automatically
518
518
  )
519
+
520
+
521
+ def unmark_copied_tags(object_id: str) -> None:
522
+ """
523
+ Update copied object tags on the given object to mark them as "not copied".
524
+ """
525
+ ObjectTag.objects.filter(object_id=object_id).update(is_copied=False)
@@ -157,8 +157,7 @@ class ObjectTagSerializer(ObjectTagMinimalSerializer):
157
157
  class Meta:
158
158
  model = ObjectTag
159
159
  fields = ObjectTagMinimalSerializer.Meta.fields + [
160
- # The taxonomy name
161
- "name",
160
+ "export_id",
162
161
  "taxonomy_id",
163
162
  # If the Tag or Taxonomy has been deleted, this ObjectTag shouldn't be shown to users.
164
163
  "is_deleted",
@@ -782,8 +782,8 @@ class TaxonomyTagsView(ListAPIView, RetrieveUpdateDestroyAPIView):
782
782
  The current taxonomy is cached in the view.
783
783
  """
784
784
  if not self._taxonomy:
785
- taxonomy_id = int(self.kwargs["pk"])
786
- taxonomy = get_taxonomy(taxonomy_id)
785
+ taxonomy_id = self.kwargs.get("pk")
786
+ taxonomy = get_taxonomy(int(taxonomy_id)) if taxonomy_id else None
787
787
  if not taxonomy:
788
788
  raise Http404("Taxonomy not found")
789
789
  self.check_object_permissions(self.request, taxonomy)
@@ -799,6 +799,9 @@ class TaxonomyTagsView(ListAPIView, RetrieveUpdateDestroyAPIView):
799
799
  context['request'] = self.request
800
800
  serializer = self.serializer_class(self, context=context)
801
801
 
802
+ if getattr(self, 'swagger_fake_view', False):
803
+ # queryset just for schema generation metadata
804
+ return context
802
805
  # Instead of checking permissions for each TagData instance, we just check them once for the whole taxonomy
803
806
  # (since that's currently how our rules work). This might change if Tag-specific permissions are needed.
804
807
  taxonomy = self.get_taxonomy()
@@ -814,6 +817,9 @@ class TaxonomyTagsView(ListAPIView, RetrieveUpdateDestroyAPIView):
814
817
  """
815
818
  Builds and returns the queryset to be paginated.
816
819
  """
820
+ if getattr(self, 'swagger_fake_view', False):
821
+ # queryset just for schema generation metadata
822
+ return Taxonomy.objects.none() # type: ignore[return-value]
817
823
  taxonomy = self.get_taxonomy()
818
824
  parent_tag_value = self.request.query_params.get("parent_tag", None)
819
825
  include_counts = "include_counts" in self.request.query_params
@@ -1,6 +1,6 @@
1
- attrs
2
- celery
3
- Django<5.0
4
1
  rules<4.0
2
+ attrs
5
3
  edx-drf-extensions
4
+ Django<5.0
5
+ celery
6
6
  djangorestframework<4.0