edx-enterprise-data 9.6.0__tar.gz → 10.0.1__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 (198) hide show
  1. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/CHANGELOG.rst +14 -0
  2. {edx_enterprise_data-9.6.0/edx_enterprise_data.egg-info → edx_enterprise_data-10.0.1}/PKG-INFO +3 -4
  3. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1/edx_enterprise_data.egg-info}/PKG-INFO +3 -4
  4. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/edx_enterprise_data.egg-info/requires.txt +2 -2
  5. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/__init__.py +1 -1
  6. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/api/v1/serializers.py +13 -0
  7. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/api/v1/urls.py +5 -0
  8. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/api/v1/views/enterprise_admin.py +24 -0
  9. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/api/v1/views/enterprise_learner.py +4 -0
  10. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/tests/api/v1/views/test_enterprise_admin.py +47 -1
  11. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/requirements/base.in +2 -2
  12. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/requirements/base.txt +21 -24
  13. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/requirements/ci.txt +5 -5
  14. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/requirements/constraints.txt +0 -15
  15. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/requirements/dev.txt +33 -49
  16. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/requirements/pip.txt +2 -2
  17. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/requirements/pip_tools.txt +2 -2
  18. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/requirements/quality.txt +34 -50
  19. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/requirements/test-master.txt +22 -25
  20. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/requirements/test-reporting.txt +13 -14
  21. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/requirements/test.txt +22 -25
  22. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/setup.py +0 -1
  23. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/LICENSE +0 -0
  24. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/MANIFEST.in +0 -0
  25. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/README.md +0 -0
  26. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/edx_enterprise_data.egg-info/SOURCES.txt +0 -0
  27. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/edx_enterprise_data.egg-info/dependency_links.txt +0 -0
  28. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/edx_enterprise_data.egg-info/not-zip-safe +0 -0
  29. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/edx_enterprise_data.egg-info/top_level.txt +0 -0
  30. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/admin_analytics/__init__.py +0 -0
  31. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/admin_analytics/constants.py +0 -0
  32. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/admin_analytics/data_loaders.py +0 -0
  33. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/admin_analytics/database/__init__.py +0 -0
  34. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/admin_analytics/database/queries/__init__.py +0 -0
  35. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/admin_analytics/database/queries/fact_engagement_admin_dash.py +0 -0
  36. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/admin_analytics/database/queries/fact_enrollment_admin_dash.py +0 -0
  37. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/admin_analytics/database/queries/skills_daily_rollup_admin_dash.py +0 -0
  38. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/admin_analytics/database/tables/__init__.py +0 -0
  39. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/admin_analytics/database/tables/base.py +0 -0
  40. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/admin_analytics/database/tables/fact_engagement_admin_dash.py +0 -0
  41. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/admin_analytics/database/tables/fact_enrollment_admin_dash.py +0 -0
  42. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/admin_analytics/database/tables/skills_daily_rollup_admin_dash.py +0 -0
  43. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/admin_analytics/database/utils.py +0 -0
  44. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/api/__init__.py +0 -0
  45. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/api/urls.py +0 -0
  46. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/api/v0/__init__.py +0 -0
  47. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/api/v0/serializers.py +0 -0
  48. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/api/v0/urls.py +0 -0
  49. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/api/v0/views.py +0 -0
  50. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/api/v1/__init__.py +0 -0
  51. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/api/v1/views/__init__.py +0 -0
  52. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/api/v1/views/analytics_completions.py +0 -0
  53. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/api/v1/views/analytics_engagements.py +0 -0
  54. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/api/v1/views/analytics_enrollments.py +0 -0
  55. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/api/v1/views/analytics_leaderboard.py +0 -0
  56. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/api/v1/views/base.py +0 -0
  57. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/api/v1/views/enterprise_offers.py +0 -0
  58. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/apps.py +0 -0
  59. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/cache/__init__.py +0 -0
  60. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/cache/decorators.py +0 -0
  61. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/clients.py +0 -0
  62. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/constants.py +0 -0
  63. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/filters.py +0 -0
  64. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/fixtures/enterprise_enrollment.json +0 -0
  65. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/fixtures/enterprise_user.json +0 -0
  66. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/management/__init__.py +0 -0
  67. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/management/commands/__init__.py +0 -0
  68. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/management/commands/create_dummy_data.py +0 -0
  69. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/management/commands/create_dummy_data_lpr_v1.py +0 -0
  70. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/management/commands/create_enterprise_enrollment.py +0 -0
  71. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/management/commands/create_enterprise_learner_enrollment_lpr_v1.py +0 -0
  72. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/management/commands/create_enterprise_learner_lpr_v1.py +0 -0
  73. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/management/commands/create_enterprise_offer.py +0 -0
  74. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/management/commands/create_enterprise_user.py +0 -0
  75. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/management/commands/tests/__init__.py +0 -0
  76. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/management/commands/tests/test_create_dummy_data_lpr_v1.py +0 -0
  77. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/management/commands/tests/test_create_enterprise_enrollment.py +0 -0
  78. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/management/commands/tests/test_create_enterprise_learner_enrollment_lpr_v1.py +0 -0
  79. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/management/commands/tests/test_create_enterprise_learner_lpr_v1.py +0 -0
  80. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/management/commands/tests/test_create_enterprise_user.py +0 -0
  81. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0001_initial.py +0 -0
  82. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0002_auto_20180430_1358.py +0 -0
  83. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0003_auto_20180501_0603.py +0 -0
  84. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0004_auto_20180501_0928.py +0 -0
  85. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0004_auto_20180508_1652.py +0 -0
  86. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0005_auto_20180524_2204.py +0 -0
  87. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0006_auto_20180612_0336.py +0 -0
  88. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0007_auto_20180612_0534.py +0 -0
  89. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0008_auto_20180614_0108.py +0 -0
  90. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0009_auto_20180628_1152.py +0 -0
  91. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0010_enterpriseenrollment_created.py +0 -0
  92. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0011_enterpriseuser.py +0 -0
  93. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0012_auto_20180831_1930.py +0 -0
  94. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0013_auto_20180831_1931.py +0 -0
  95. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0014_enterpriseuser_created.py +0 -0
  96. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0015_auto_20180907_1757.py +0 -0
  97. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0016_auto_20180924_2138.py +0 -0
  98. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0017_enterpriseenrollment_unenrollment_timestamp.py +0 -0
  99. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0018_enterprisedatafeaturerole_enterprisedataroleassignment.py +0 -0
  100. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0019_add_enterprise_data_feature_roles.py +0 -0
  101. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0020_add_role_based_access_control_switch.py +0 -0
  102. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0021_auto_20190329_1241.py +0 -0
  103. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0022_remove_role_based_access_control_switch.py +0 -0
  104. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0023_enterpriselearner_enterpriselearnerenrollment.py +0 -0
  105. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0024_auto_20210602_1811.py +0 -0
  106. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0025_auto_20210703_1854.py +0 -0
  107. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0026_auto_20210916_0414.py +0 -0
  108. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0027_enterpriselearnerenrollment_total_learning_time_seconds.py +0 -0
  109. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0028_enterpriselearnerenrollment_offer_id.py +0 -0
  110. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0029_enterpriseoffer.py +0 -0
  111. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0030_auto_20230609_1353.py +0 -0
  112. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0031_auto_20230615_0705.py +0 -0
  113. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0032_auto_20230704_0818.py +0 -0
  114. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0033_enterpriseadminlearnerprogress_enterpriseadminsummarizeinsights.py +0 -0
  115. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0034_auto_20230907_0834.py +0 -0
  116. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0035_auto_20230907_1154.py +0 -0
  117. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0036_enterprisesubsidybudget_subsidy_access_policy_display_name.py +0 -0
  118. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0037_alter_enterpriseenrollment_consent_granted.py +0 -0
  119. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0038_enterpriseoffer_export_timestamp.py +0 -0
  120. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0039_auto_20240212_1403.py +0 -0
  121. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0040_auto_20240718_0536_squashed_0043_alter_enterpriselearnerenrollment_enterprise_enrollment_id.py +0 -0
  122. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/0044_enterpriseexecedlcmoduleperformance.py +0 -0
  123. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/migrations/__init__.py +0 -0
  124. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/models.py +0 -0
  125. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/paginators.py +0 -0
  126. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/renderers.py +0 -0
  127. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/settings/__init__.py +0 -0
  128. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/settings/test.py +0 -0
  129. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/signals.py +0 -0
  130. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/tests/__init__.py +0 -0
  131. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/tests/admin_analytics/__init__.py +0 -0
  132. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/tests/admin_analytics/mock_analytics_data.py +0 -0
  133. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/tests/admin_analytics/mock_enrollments.py +0 -0
  134. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/tests/admin_analytics/test_analytics_engagements.py +0 -0
  135. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/tests/admin_analytics/test_analytics_enrollments.py +0 -0
  136. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/tests/admin_analytics/test_analytics_leaderboard.py +0 -0
  137. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/tests/admin_analytics/test_data_loaders.py +0 -0
  138. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/tests/admin_analytics/test_enterprise_completions.py +0 -0
  139. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/tests/api/__init__.py +0 -0
  140. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/tests/api/v0/__init__.py +0 -0
  141. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/tests/api/v0/test_serializers.py +0 -0
  142. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/tests/api/v1/__init__.py +0 -0
  143. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/tests/api/v1/test_serializers.py +0 -0
  144. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/tests/api/v1/test_views.py +0 -0
  145. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/tests/api/v1/views/__init__.py +0 -0
  146. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/tests/factories.py +0 -0
  147. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/tests/mixins.py +0 -0
  148. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/tests/test_clients.py +0 -0
  149. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/tests/test_filters.py +0 -0
  150. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/tests/test_models.py +0 -0
  151. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/tests/test_utils.py +0 -0
  152. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/tests/test_views.py +0 -0
  153. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/urls.py +0 -0
  154. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data/utils.py +0 -0
  155. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data_roles/__init__.py +0 -0
  156. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data_roles/admin.py +0 -0
  157. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data_roles/apps.py +0 -0
  158. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data_roles/constants.py +0 -0
  159. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data_roles/migrations/0001_initial.py +0 -0
  160. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data_roles/migrations/0002_add_enterprise_data_feature_roles.py +0 -0
  161. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data_roles/migrations/0003_add_role_based_access_control_switch.py +0 -0
  162. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data_roles/migrations/0004_enterprisedataroleassignment_enterprise_id.py +0 -0
  163. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data_roles/migrations/0005_turn_on_role_based_access_control_switch.py +0 -0
  164. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data_roles/migrations/0006_remove_role_based_access_control_switch.py +0 -0
  165. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data_roles/migrations/0007_enterprisedataroleassignment_applies_to_all_contexts.py +0 -0
  166. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data_roles/migrations/__init__.py +0 -0
  167. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data_roles/models.py +0 -0
  168. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data_roles/rules.py +0 -0
  169. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data_roles/tests/__init__.py +0 -0
  170. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data_roles/tests/factories.py +0 -0
  171. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_data_roles/tests/test_models.py +0 -0
  172. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_reporting/__init__.py +0 -0
  173. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_reporting/clients/__init__.py +0 -0
  174. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_reporting/clients/enterprise.py +0 -0
  175. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_reporting/clients/s3.py +0 -0
  176. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_reporting/clients/snowflake.py +0 -0
  177. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_reporting/clients/vertica.py +0 -0
  178. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_reporting/delivery_method.py +0 -0
  179. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_reporting/external_resource_link_report.py +0 -0
  180. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_reporting/fixtures/__init__.py +0 -0
  181. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_reporting/fixtures/enterprise_customer_reporting.json +0 -0
  182. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_reporting/reporter.py +0 -0
  183. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_reporting/send_enterprise_reports.py +0 -0
  184. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_reporting/tests/__init__.py +0 -0
  185. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_reporting/tests/test_clients.py +0 -0
  186. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_reporting/tests/test_delivery_method.py +0 -0
  187. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_reporting/tests/test_enterprise_client.py +0 -0
  188. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_reporting/tests/test_external_link_report.py +0 -0
  189. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_reporting/tests/test_reporter.py +0 -0
  190. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_reporting/tests/test_send_enterprise_reports.py +0 -0
  191. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_reporting/tests/test_utils.py +0 -0
  192. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_reporting/tests/test_vertica_client.py +0 -0
  193. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_reporting/tests/utils.py +0 -0
  194. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/enterprise_reporting/utils.py +0 -0
  195. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/requirements/common_constraints.txt +0 -0
  196. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/requirements/django.txt +0 -0
  197. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/requirements/reporting.in +0 -0
  198. {edx_enterprise_data-9.6.0 → edx_enterprise_data-10.0.1}/setup.cfg +0 -0
@@ -16,6 +16,20 @@ Unreleased
16
16
 
17
17
  =========================
18
18
 
19
+ [10.0.1] - 2024-10-25
20
+ ---------------------
21
+ * Same as ``10.0.0``
22
+ * Bumping the version so a new tag can be created in the GitHub
23
+
24
+ [10.0.0] - 2024-10-25
25
+ ---------------------
26
+ * feat!: Python 3.12 Upgrade
27
+ * Dropped support for ``Python<3.12``
28
+
29
+ [9.7.0] - 2024-10-23
30
+ ---------------------
31
+ * feat: Add API to fetch enterprise budgets information
32
+
19
33
  [9.6.0] - 2024-10-14
20
34
  ---------------------
21
35
  * feat: Added caching for API endpoints related to advanced analytics.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: edx-enterprise-data
3
- Version: 9.6.0
3
+ Version: 10.0.1
4
4
  Summary: Enterprise Reporting
5
5
  Home-page: https://github.com/openedx/edx-enterprise-data
6
6
  Author: edX
@@ -9,7 +9,6 @@ License: AGPL 3.0
9
9
  Classifier: Framework :: Django
10
10
  Classifier: Framework :: Django :: 4.2
11
11
  Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: Python :: 3.8
13
12
  Classifier: Programming Language :: Python :: 3.12
14
13
  License-File: LICENSE
15
14
  Requires-Dist: Django
@@ -24,8 +23,8 @@ Requires-Dist: edx-rbac
24
23
  Requires-Dist: edx-rest-api-client
25
24
  Requires-Dist: factory_boy
26
25
  Requires-Dist: mysql-connector-python
27
- Requires-Dist: numpy<=1.24.4
28
- Requires-Dist: pandas<=2.0.3
26
+ Requires-Dist: numpy
27
+ Requires-Dist: pandas
29
28
  Requires-Dist: requests
30
29
  Requires-Dist: rules
31
30
  Provides-Extra: reporting
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: edx-enterprise-data
3
- Version: 9.6.0
3
+ Version: 10.0.1
4
4
  Summary: Enterprise Reporting
5
5
  Home-page: https://github.com/openedx/edx-enterprise-data
6
6
  Author: edX
@@ -9,7 +9,6 @@ License: AGPL 3.0
9
9
  Classifier: Framework :: Django
10
10
  Classifier: Framework :: Django :: 4.2
11
11
  Classifier: Programming Language :: Python :: 3
12
- Classifier: Programming Language :: Python :: 3.8
13
12
  Classifier: Programming Language :: Python :: 3.12
14
13
  License-File: LICENSE
15
14
  Requires-Dist: Django
@@ -24,8 +23,8 @@ Requires-Dist: edx-rbac
24
23
  Requires-Dist: edx-rest-api-client
25
24
  Requires-Dist: factory_boy
26
25
  Requires-Dist: mysql-connector-python
27
- Requires-Dist: numpy<=1.24.4
28
- Requires-Dist: pandas<=2.0.3
26
+ Requires-Dist: numpy
27
+ Requires-Dist: pandas
29
28
  Requires-Dist: requests
30
29
  Requires-Dist: rules
31
30
  Provides-Extra: reporting
@@ -10,8 +10,8 @@ edx-rbac
10
10
  edx-rest-api-client
11
11
  factory_boy
12
12
  mysql-connector-python
13
- numpy<=1.24.4
14
- pandas<=2.0.3
13
+ numpy
14
+ pandas
15
15
  requests
16
16
  rules
17
17
 
@@ -2,4 +2,4 @@
2
2
  Enterprise data api application. This Django app exposes API endpoints used by enterprises.
3
3
  """
4
4
 
5
- __version__ = "9.6.0"
5
+ __version__ = "10.0.1"
@@ -240,6 +240,19 @@ class EnterpriseExecEdLCModulePerformanceSerializer(serializers.ModelSerializer)
240
240
  return obj.extensions_requested if obj.extensions_requested is not None else 0
241
241
 
242
242
 
243
+ class EnterpriseBudgetSerializer(serializers.ModelSerializer):
244
+ """
245
+ Serializer for EnterpriseSubsidyBudget model.
246
+ """
247
+
248
+ class Meta:
249
+ model = EnterpriseSubsidyBudget
250
+ fields = (
251
+ 'subsidy_access_policy_uuid',
252
+ 'subsidy_access_policy_display_name',
253
+ )
254
+
255
+
243
256
  class AdvanceAnalyticsQueryParamSerializer(serializers.Serializer): # pylint: disable=abstract-method
244
257
  """Serializer for validating query params"""
245
258
  RESPONSE_TYPES = [
@@ -96,6 +96,11 @@ urlpatterns = [
96
96
  enterprise_admin_views.EnterpriseAdminAnalyticsSkillsView.as_view(),
97
97
  name='enterprise-admin-analytics-skills'
98
98
  ),
99
+ re_path(
100
+ fr'^enterprise/(?P<enterprise_uuid>{UUID4_REGEX})/budgets',
101
+ enterprise_admin_views.EnterpriseBudgetView.as_view(),
102
+ name='enterprise-budgets'
103
+ ),
99
104
  ]
100
105
 
101
106
  urlpatterns += router.urls
@@ -21,6 +21,7 @@ from enterprise_data.models import (
21
21
  EnterpriseAdminLearnerProgress,
22
22
  EnterpriseAdminSummarizeInsights,
23
23
  EnterpriseExecEdLCModulePerformance,
24
+ EnterpriseSubsidyBudget,
24
25
  )
25
26
  from enterprise_data.utils import timer
26
27
 
@@ -206,3 +207,26 @@ class EnterpriseExecEdLCModulePerformanceViewSet(EnterpriseViewSetMixin, viewset
206
207
  return EnterpriseExecEdLCModulePerformance.objects.filter(
207
208
  enterprise_customer_uuid=self.kwargs['enterprise_id'],
208
209
  )
210
+
211
+
212
+ class EnterpriseBudgetView(APIView):
213
+ """
214
+ View for getting budgets information for an enterprise.
215
+ """
216
+ authentication_classes = (JwtAuthentication,)
217
+ http_method_names = ["get"]
218
+
219
+ @permission_required("can_access_enterprise", fn=lambda request, enterprise_uuid: enterprise_uuid)
220
+ def get(self, request, enterprise_uuid):
221
+ """
222
+ Return the queryset of EnterpriseSubsidyBudget objects.
223
+ """
224
+ budgets = EnterpriseSubsidyBudget.objects.filter(
225
+ enterprise_customer_uuid=enterprise_uuid,
226
+ ).values(
227
+ 'subsidy_access_policy_uuid',
228
+ 'subsidy_access_policy_display_name',
229
+ )
230
+
231
+ serializer = serializers.EnterpriseBudgetSerializer(budgets, many=True)
232
+ return Response(serializer.data)
@@ -150,6 +150,10 @@ class EnterpriseLearnerEnrollmentViewSet(EnterpriseViewSetMixin, viewsets.ReadOn
150
150
  if search_start_date:
151
151
  queryset = queryset.filter(course_start_date=search_start_date)
152
152
 
153
+ budget_uuid = query_filters.get('budget_uuid')
154
+ if budget_uuid:
155
+ queryset = queryset.filter(budget_id=budget_uuid)
156
+
153
157
  offer_id = query_filters.get('offer_id')
154
158
  if offer_id:
155
159
  queryset = self.filter_by_offer_id(queryset, offer_id)
@@ -21,7 +21,7 @@ from enterprise_data.tests.admin_analytics.mock_analytics_data import (
21
21
  TOP_SKILLS_BY_ENROLLMENTS,
22
22
  )
23
23
  from enterprise_data.tests.mixins import JWTTestMixin
24
- from enterprise_data.tests.test_utils import UserFactory, get_dummy_enterprise_api_data
24
+ from enterprise_data.tests.test_utils import EnterpriseSubsidyBudgetFactory, UserFactory, get_dummy_enterprise_api_data
25
25
  from enterprise_data_roles.constants import ENTERPRISE_DATA_ADMIN_ROLE
26
26
  from enterprise_data_roles.models import EnterpriseDataFeatureRole, EnterpriseDataRoleAssignment
27
27
 
@@ -245,3 +245,49 @@ class TestSkillsStatsAPI(JWTTestMixin, APITransactionTestCase):
245
245
  response = self.client.get(self.url, params)
246
246
  assert response.status_code == status.HTTP_400_BAD_REQUEST
247
247
  assert response.json() == error
248
+
249
+
250
+ @ddt.ddt
251
+ class TestEnterpriseBudgetAPI(JWTTestMixin, APITransactionTestCase):
252
+ """Tests for EnterpriseBudgetView."""
253
+
254
+ def setUp(self):
255
+ """
256
+ Setup method.
257
+ """
258
+ super().setUp()
259
+ self.user = UserFactory(is_staff=True)
260
+ role, __ = EnterpriseDataFeatureRole.objects.get_or_create(
261
+ name=ENTERPRISE_DATA_ADMIN_ROLE
262
+ )
263
+ self.role_assignment = EnterpriseDataRoleAssignment.objects.create(
264
+ role=role, user=self.user
265
+ )
266
+ self.client.force_authenticate(user=self.user)
267
+
268
+ self.enterprise_uuid = "ee5e6b3a069a4947bb8dd2dbc323396c"
269
+ self.set_jwt_cookie()
270
+
271
+ self.url = reverse(
272
+ "v1:enterprise-budgets",
273
+ kwargs={"enterprise_uuid": self.enterprise_uuid},
274
+ )
275
+
276
+ self.enterprise_subsidy_budget = EnterpriseSubsidyBudgetFactory(
277
+ enterprise_customer_uuid=self.enterprise_uuid,
278
+ subsidy_access_policy_uuid='8d6503dd-e40d-42b8-442b-37dd4c5450e3',
279
+ subsidy_access_policy_display_name='test-budget'
280
+ )
281
+
282
+ def test_get(self):
283
+ """
284
+ Test the GET method for the EnterpriseBudgetView works.
285
+ """
286
+ response = self.client.get(self.url)
287
+ assert response.status_code == status.HTTP_200_OK
288
+ assert response.json() == [
289
+ {
290
+ 'subsidy_access_policy_uuid': '8d6503dd-e40d-42b8-442b-37dd4c5450e3',
291
+ 'subsidy_access_policy_display_name': 'test-budget',
292
+ }
293
+ ]
@@ -13,6 +13,6 @@ django-model-utils
13
13
  edx-rbac
14
14
  rules
15
15
  factory_boy
16
- numpy<=1.24.4
17
- pandas<=2.0.3
16
+ numpy
17
+ pandas
18
18
  mysql-connector-python
@@ -1,5 +1,5 @@
1
1
  #
2
- # This file is autogenerated by pip-compile with Python 3.11
2
+ # This file is autogenerated by pip-compile with Python 3.12
3
3
  # by the following command:
4
4
  #
5
5
  # make upgrade
@@ -10,15 +10,15 @@ asgiref==3.8.1
10
10
  # via django
11
11
  asn1crypto==1.5.1
12
12
  # via snowflake-connector-python
13
- awscli==1.34.29
13
+ awscli==1.35.14
14
14
  # via -r requirements/reporting.in
15
15
  bcrypt==4.2.0
16
16
  # via paramiko
17
17
  billiard==4.2.1
18
18
  # via celery
19
- boto3==1.35.29
19
+ boto3==1.35.48
20
20
  # via -r requirements/reporting.in
21
- botocore==1.35.29
21
+ botocore==1.35.48
22
22
  # via
23
23
  # awscli
24
24
  # boto3
@@ -35,7 +35,7 @@ cffi==1.17.1
35
35
  # cryptography
36
36
  # pynacl
37
37
  # snowflake-connector-python
38
- charset-normalizer==3.3.2
38
+ charset-normalizer==3.4.0
39
39
  # via
40
40
  # requests
41
41
  # snowflake-connector-python
@@ -54,7 +54,7 @@ click-repl==0.3.0
54
54
  # via celery
55
55
  colorama==0.4.6
56
56
  # via awscli
57
- cryptography==43.0.1
57
+ cryptography==43.0.3
58
58
  # via
59
59
  # -r requirements/reporting.in
60
60
  # django-fernet-fields-v2
@@ -100,18 +100,18 @@ djangorestframework==3.15.2
100
100
  # edx-drf-extensions
101
101
  djangorestframework-csv==3.0.2
102
102
  # via -r requirements/base.in
103
- dnspython==2.6.1
103
+ dnspython==2.7.0
104
104
  # via pymongo
105
105
  docutils==0.16
106
106
  # via awscli
107
107
  drf-jwt==1.19.2
108
108
  # via edx-drf-extensions
109
- edx-django-utils==5.15.0
109
+ edx-django-utils==7.0.0
110
110
  # via
111
111
  # -r requirements/base.in
112
112
  # edx-drf-extensions
113
113
  # edx-rest-api-client
114
- edx-drf-extensions==10.4.0
114
+ edx-drf-extensions==10.5.0
115
115
  # via
116
116
  # -r requirements/base.in
117
117
  # edx-rbac
@@ -125,7 +125,7 @@ edx-rest-api-client==6.0.0
125
125
  # via -r requirements/base.in
126
126
  factory-boy==3.3.1
127
127
  # via -r requirements/base.in
128
- faker==30.0.0
128
+ faker==30.8.1
129
129
  # via factory-boy
130
130
  filelock==3.16.1
131
131
  # via snowflake-connector-python
@@ -143,23 +143,20 @@ kombu==5.4.2
143
143
  # via celery
144
144
  monotonic==1.6
145
145
  # via py2neo
146
- mysql-connector-python==9.0.0
146
+ mysql-connector-python==9.1.0
147
147
  # via -r requirements/base.in
148
- newrelic==10.0.0
148
+ newrelic==10.2.0
149
149
  # via edx-django-utils
150
- numpy==1.24.4
150
+ numpy==2.1.2
151
151
  # via
152
- # -c requirements/constraints.txt
153
152
  # -r requirements/base.in
154
153
  # pandas
155
154
  packaging==24.1
156
155
  # via
157
156
  # py2neo
158
157
  # snowflake-connector-python
159
- pandas==2.0.3
160
- # via
161
- # -c requirements/constraints.txt
162
- # -r requirements/base.in
158
+ pandas==2.2.3
159
+ # via -r requirements/base.in
163
160
  pansi==2020.7.3
164
161
  # via py2neo
165
162
  paramiko==3.5.0
@@ -172,7 +169,7 @@ platformdirs==4.3.6
172
169
  # via snowflake-connector-python
173
170
  prompt-toolkit==3.0.48
174
171
  # via click-repl
175
- psutil==6.0.0
172
+ psutil==6.1.0
176
173
  # via edx-django-utils
177
174
  py2neo @ https://github.com/overhangio/py2neo/releases/download/2021.2.3/py2neo-2021.2.3.tar.gz
178
175
  # via -r requirements/reporting.in
@@ -192,7 +189,7 @@ pyjwt[crypto]==2.9.0
192
189
  # snowflake-connector-python
193
190
  pyminizip==0.2.6
194
191
  # via -r requirements/reporting.in
195
- pymongo==4.9.1
192
+ pymongo==4.10.1
196
193
  # via edx-opaque-keys
197
194
  pynacl==1.5.0
198
195
  # via
@@ -224,7 +221,7 @@ rsa==4.7.2
224
221
  # via awscli
225
222
  rules==3.5
226
223
  # via -r requirements/base.in
227
- s3transfer==0.10.2
224
+ s3transfer==0.10.3
228
225
  # via
229
226
  # awscli
230
227
  # boto3
@@ -238,7 +235,7 @@ six==1.16.0
238
235
  # py2neo
239
236
  # python-dateutil
240
237
  # vertica-python
241
- snowflake-connector-python==3.12.2
238
+ snowflake-connector-python==3.12.3
242
239
  # via -r requirements/reporting.in
243
240
  sortedcontainers==2.4.0
244
241
  # via snowflake-connector-python
@@ -253,6 +250,7 @@ tomlkit==0.13.2
253
250
  typing-extensions==4.12.2
254
251
  # via
255
252
  # edx-opaque-keys
253
+ # faker
256
254
  # snowflake-connector-python
257
255
  tzdata==2024.2
258
256
  # via
@@ -261,9 +259,8 @@ tzdata==2024.2
261
259
  # pandas
262
260
  unicodecsv==0.14.1
263
261
  # via -r requirements/reporting.in
264
- urllib3==1.26.20
262
+ urllib3==2.2.3
265
263
  # via
266
- # -c requirements/constraints.txt
267
264
  # botocore
268
265
  # py2neo
269
266
  # requests
@@ -1,5 +1,5 @@
1
1
  #
2
- # This file is autogenerated by pip-compile with Python 3.11
2
+ # This file is autogenerated by pip-compile with Python 3.12
3
3
  # by the following command:
4
4
  #
5
5
  # make upgrade
@@ -10,9 +10,9 @@ chardet==5.2.0
10
10
  # via tox
11
11
  colorama==0.4.6
12
12
  # via tox
13
- coverage==7.6.1
13
+ coverage==7.6.4
14
14
  # via -r requirements/ci.in
15
- distlib==0.3.8
15
+ distlib==0.3.9
16
16
  # via virtualenv
17
17
  filelock==3.16.1
18
18
  # via
@@ -30,7 +30,7 @@ pluggy==1.5.0
30
30
  # via tox
31
31
  pyproject-api==1.8.0
32
32
  # via tox
33
- tox==4.20.0
33
+ tox==4.23.2
34
34
  # via -r requirements/ci.in
35
- virtualenv==20.26.6
35
+ virtualenv==20.27.0
36
36
  # via tox
@@ -12,18 +12,3 @@
12
12
 
13
13
  # Common constraints for edx repos
14
14
  -c common_constraints.txt
15
-
16
- # Needed for Django 4.2 + Python 3.12 compatibility
17
- backports.zoneinfo; python_version<"3.9"
18
-
19
- # botocore 1.34.145 depends on urllib3<1.27 and >=1.25.4; python_version < "3.10"
20
- urllib3<2.0.0
21
-
22
- numpy<=1.24.4
23
- pandas<=2.0.3
24
-
25
- # this is the last supported version for python 3.8.x
26
- astroid<=3.2.4
27
-
28
- # upgrade to 5.4.0 causes issues with `importlib`
29
- edx-lint<=5.3.7