edx-enterprise-data 10.16.6__tar.gz → 10.16.9__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 (218) hide show
  1. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/CHANGELOG.rst +12 -0
  2. {edx_enterprise_data-10.16.6/edx_enterprise_data.egg-info → edx_enterprise_data-10.16.9}/PKG-INFO +1 -1
  3. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9/edx_enterprise_data.egg-info}/PKG-INFO +1 -1
  4. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/__init__.py +1 -1
  5. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/admin_analytics/database/queries/skills_daily_rollup_admin_dash.py +29 -0
  6. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/admin_analytics/database/tables/skills_daily_rollup_admin_dash.py +70 -1
  7. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/api/v1/views/enterprise_admin.py +14 -0
  8. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/tests/admin_analytics/mock_analytics_data.py +14 -0
  9. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/tests/api/v1/views/test_enterprise_admin.py +18 -0
  10. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/requirements/base.txt +14 -14
  11. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/requirements/ci.txt +1 -1
  12. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/requirements/dev.txt +14 -14
  13. edx_enterprise_data-10.16.9/requirements/django.txt +1 -0
  14. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/requirements/quality.txt +19 -17
  15. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/requirements/test-master.txt +22 -18
  16. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/requirements/test-reporting.txt +9 -9
  17. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/requirements/test.txt +23 -19
  18. edx_enterprise_data-10.16.6/requirements/django.txt +0 -1
  19. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/LICENSE +0 -0
  20. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/MANIFEST.in +0 -0
  21. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/README.md +0 -0
  22. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/edx_enterprise_data.egg-info/SOURCES.txt +0 -0
  23. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/edx_enterprise_data.egg-info/dependency_links.txt +0 -0
  24. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/edx_enterprise_data.egg-info/not-zip-safe +0 -0
  25. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/edx_enterprise_data.egg-info/requires.txt +0 -0
  26. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/edx_enterprise_data.egg-info/top_level.txt +0 -0
  27. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/admin_analytics/__init__.py +0 -0
  28. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/admin_analytics/constants.py +0 -0
  29. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/admin_analytics/data_loaders.py +0 -0
  30. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/admin_analytics/database/__init__.py +0 -0
  31. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/admin_analytics/database/filters/__init__.py +0 -0
  32. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/admin_analytics/database/filters/base.py +0 -0
  33. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/admin_analytics/database/filters/fact_completion_admin_dash.py +0 -0
  34. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/admin_analytics/database/filters/fact_engagement_admin_dash.py +0 -0
  35. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/admin_analytics/database/filters/fact_enrollment_admin_dash.py +0 -0
  36. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/admin_analytics/database/filters/mixins.py +0 -0
  37. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/admin_analytics/database/queries/__init__.py +0 -0
  38. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/admin_analytics/database/queries/fact_engagement_admin_dash.py +0 -0
  39. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/admin_analytics/database/queries/fact_enrollment_admin_dash.py +0 -0
  40. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/admin_analytics/database/query_filters/__init__.py +0 -0
  41. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/admin_analytics/database/query_filters/base.py +0 -0
  42. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/admin_analytics/database/query_filters/between.py +0 -0
  43. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/admin_analytics/database/query_filters/equal.py +0 -0
  44. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/admin_analytics/database/query_filters/in_.py +0 -0
  45. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/admin_analytics/database/tables/__init__.py +0 -0
  46. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/admin_analytics/database/tables/base.py +0 -0
  47. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/admin_analytics/database/tables/fact_engagement_admin_dash.py +0 -0
  48. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/admin_analytics/database/tables/fact_enrollment_admin_dash.py +0 -0
  49. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/admin_analytics/database/utils.py +0 -0
  50. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/api/__init__.py +0 -0
  51. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/api/urls.py +0 -0
  52. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/api/v0/__init__.py +0 -0
  53. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/api/v0/serializers.py +0 -0
  54. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/api/v0/urls.py +0 -0
  55. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/api/v0/views.py +0 -0
  56. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/api/v1/__init__.py +0 -0
  57. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/api/v1/serializers.py +0 -0
  58. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/api/v1/urls.py +0 -0
  59. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/api/v1/views/__init__.py +0 -0
  60. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/api/v1/views/analytics_completions.py +0 -0
  61. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/api/v1/views/analytics_engagements.py +0 -0
  62. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/api/v1/views/analytics_enrollments.py +0 -0
  63. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/api/v1/views/analytics_leaderboard.py +0 -0
  64. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/api/v1/views/base.py +0 -0
  65. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/api/v1/views/enterprise_learner.py +0 -0
  66. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/api/v1/views/enterprise_offers.py +0 -0
  67. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/apps.py +0 -0
  68. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/cache/__init__.py +0 -0
  69. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/cache/decorators.py +0 -0
  70. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/clients.py +0 -0
  71. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/constants.py +0 -0
  72. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/exceptions.py +0 -0
  73. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/filters.py +0 -0
  74. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/fixtures/enterprise_enrollment.json +0 -0
  75. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/fixtures/enterprise_user.json +0 -0
  76. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/management/__init__.py +0 -0
  77. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/management/commands/__init__.py +0 -0
  78. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/management/commands/create_dummy_data.py +0 -0
  79. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/management/commands/create_dummy_data_lpr_v1.py +0 -0
  80. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/management/commands/create_enterprise_enrollment.py +0 -0
  81. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/management/commands/create_enterprise_learner_enrollment_lpr_v1.py +0 -0
  82. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/management/commands/create_enterprise_learner_lpr_v1.py +0 -0
  83. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/management/commands/create_enterprise_offer.py +0 -0
  84. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/management/commands/create_enterprise_user.py +0 -0
  85. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/management/commands/pre_warm_analytics_cache.py +0 -0
  86. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/management/commands/tests/__init__.py +0 -0
  87. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/management/commands/tests/test_create_dummy_data_lpr_v1.py +0 -0
  88. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/management/commands/tests/test_create_enterprise_enrollment.py +0 -0
  89. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/management/commands/tests/test_create_enterprise_learner_enrollment_lpr_v1.py +0 -0
  90. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/management/commands/tests/test_create_enterprise_learner_lpr_v1.py +0 -0
  91. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/management/commands/tests/test_create_enterprise_user.py +0 -0
  92. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/management/commands/tests/test_pre_warm_analytics_cache.py +0 -0
  93. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0001_initial.py +0 -0
  94. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0002_auto_20180430_1358.py +0 -0
  95. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0003_auto_20180501_0603.py +0 -0
  96. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0004_auto_20180501_0928.py +0 -0
  97. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0004_auto_20180508_1652.py +0 -0
  98. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0005_auto_20180524_2204.py +0 -0
  99. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0006_auto_20180612_0336.py +0 -0
  100. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0007_auto_20180612_0534.py +0 -0
  101. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0008_auto_20180614_0108.py +0 -0
  102. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0009_auto_20180628_1152.py +0 -0
  103. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0010_enterpriseenrollment_created.py +0 -0
  104. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0011_enterpriseuser.py +0 -0
  105. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0012_auto_20180831_1930.py +0 -0
  106. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0013_auto_20180831_1931.py +0 -0
  107. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0014_enterpriseuser_created.py +0 -0
  108. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0015_auto_20180907_1757.py +0 -0
  109. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0016_auto_20180924_2138.py +0 -0
  110. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0017_enterpriseenrollment_unenrollment_timestamp.py +0 -0
  111. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0018_enterprisedatafeaturerole_enterprisedataroleassignment.py +0 -0
  112. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0019_add_enterprise_data_feature_roles.py +0 -0
  113. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0020_add_role_based_access_control_switch.py +0 -0
  114. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0021_auto_20190329_1241.py +0 -0
  115. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0022_remove_role_based_access_control_switch.py +0 -0
  116. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0023_enterpriselearner_enterpriselearnerenrollment.py +0 -0
  117. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0024_auto_20210602_1811.py +0 -0
  118. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0025_auto_20210703_1854.py +0 -0
  119. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0026_auto_20210916_0414.py +0 -0
  120. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0027_enterpriselearnerenrollment_total_learning_time_seconds.py +0 -0
  121. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0028_enterpriselearnerenrollment_offer_id.py +0 -0
  122. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0029_enterpriseoffer.py +0 -0
  123. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0030_auto_20230609_1353.py +0 -0
  124. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0031_auto_20230615_0705.py +0 -0
  125. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0032_auto_20230704_0818.py +0 -0
  126. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0033_enterpriseadminlearnerprogress_enterpriseadminsummarizeinsights.py +0 -0
  127. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0034_auto_20230907_0834.py +0 -0
  128. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0035_auto_20230907_1154.py +0 -0
  129. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0036_enterprisesubsidybudget_subsidy_access_policy_display_name.py +0 -0
  130. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0037_alter_enterpriseenrollment_consent_granted.py +0 -0
  131. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0038_enterpriseoffer_export_timestamp.py +0 -0
  132. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0039_auto_20240212_1403.py +0 -0
  133. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0040_auto_20240718_0536_squashed_0043_alter_enterpriselearnerenrollment_enterprise_enrollment_id.py +0 -0
  134. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0044_enterpriseexecedlcmoduleperformance.py +0 -0
  135. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0045_alter_enterpriseexecedlcmoduleperformance_options_and_more.py +0 -0
  136. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0046_enterprisegroupmembership.py +0 -0
  137. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0047_enterpriseexecedlcmoduleperformance_avg_after_lo_score_and_more.py +0 -0
  138. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/0048_alter_enterpriseexecedlcmoduleperformance_avg_after_lo_score_and_more.py +0 -0
  139. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/migrations/__init__.py +0 -0
  140. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/models.py +0 -0
  141. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/paginators.py +0 -0
  142. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/renderers.py +0 -0
  143. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/settings/__init__.py +0 -0
  144. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/settings/test.py +0 -0
  145. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/signals.py +0 -0
  146. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/tests/__init__.py +0 -0
  147. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/tests/admin_analytics/__init__.py +0 -0
  148. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/tests/admin_analytics/mock_enrollments.py +0 -0
  149. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/tests/admin_analytics/test_analytics_engagements.py +0 -0
  150. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/tests/admin_analytics/test_analytics_enrollments.py +0 -0
  151. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/tests/admin_analytics/test_analytics_leaderboard.py +0 -0
  152. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/tests/admin_analytics/test_data_loaders.py +0 -0
  153. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/tests/admin_analytics/test_enterprise_completions.py +0 -0
  154. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/tests/api/__init__.py +0 -0
  155. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/tests/api/v0/__init__.py +0 -0
  156. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/tests/api/v0/test_serializers.py +0 -0
  157. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/tests/api/v1/__init__.py +0 -0
  158. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/tests/api/v1/test_serializers.py +0 -0
  159. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/tests/api/v1/test_views.py +0 -0
  160. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/tests/api/v1/views/__init__.py +0 -0
  161. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/tests/factories.py +0 -0
  162. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/tests/mixins.py +0 -0
  163. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/tests/test_clients.py +0 -0
  164. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/tests/test_filters.py +0 -0
  165. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/tests/test_models.py +0 -0
  166. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/tests/test_utils.py +0 -0
  167. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/tests/test_views.py +0 -0
  168. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/urls.py +0 -0
  169. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data/utils.py +0 -0
  170. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data_roles/__init__.py +0 -0
  171. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data_roles/admin.py +0 -0
  172. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data_roles/apps.py +0 -0
  173. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data_roles/constants.py +0 -0
  174. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data_roles/migrations/0001_initial.py +0 -0
  175. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data_roles/migrations/0002_add_enterprise_data_feature_roles.py +0 -0
  176. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data_roles/migrations/0003_add_role_based_access_control_switch.py +0 -0
  177. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data_roles/migrations/0004_enterprisedataroleassignment_enterprise_id.py +0 -0
  178. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data_roles/migrations/0005_turn_on_role_based_access_control_switch.py +0 -0
  179. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data_roles/migrations/0006_remove_role_based_access_control_switch.py +0 -0
  180. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data_roles/migrations/0007_enterprisedataroleassignment_applies_to_all_contexts.py +0 -0
  181. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data_roles/migrations/__init__.py +0 -0
  182. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data_roles/models.py +0 -0
  183. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data_roles/rules.py +0 -0
  184. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data_roles/tests/__init__.py +0 -0
  185. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data_roles/tests/factories.py +0 -0
  186. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_data_roles/tests/test_models.py +0 -0
  187. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_reporting/__init__.py +0 -0
  188. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_reporting/clients/__init__.py +0 -0
  189. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_reporting/clients/enterprise.py +0 -0
  190. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_reporting/clients/s3.py +0 -0
  191. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_reporting/clients/snowflake.py +0 -0
  192. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_reporting/clients/vertica.py +0 -0
  193. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_reporting/constants.py +0 -0
  194. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_reporting/delivery_method.py +0 -0
  195. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_reporting/external_resource_link_report.py +0 -0
  196. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_reporting/fixtures/__init__.py +0 -0
  197. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_reporting/fixtures/enterprise_customer_reporting.json +0 -0
  198. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_reporting/reporter.py +0 -0
  199. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_reporting/send_enterprise_reports.py +0 -0
  200. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_reporting/tests/__init__.py +0 -0
  201. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_reporting/tests/test_clients.py +0 -0
  202. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_reporting/tests/test_delivery_method.py +0 -0
  203. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_reporting/tests/test_enterprise_client.py +0 -0
  204. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_reporting/tests/test_external_link_report.py +0 -0
  205. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_reporting/tests/test_reporter.py +0 -0
  206. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_reporting/tests/test_send_enterprise_reports.py +0 -0
  207. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_reporting/tests/test_utils.py +0 -0
  208. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_reporting/tests/test_vertica_client.py +0 -0
  209. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_reporting/tests/utils.py +0 -0
  210. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/enterprise_reporting/utils.py +0 -0
  211. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/requirements/base.in +0 -0
  212. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/requirements/common_constraints.txt +0 -0
  213. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/requirements/constraints.txt +0 -0
  214. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/requirements/pip.txt +0 -0
  215. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/requirements/pip_tools.txt +0 -0
  216. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/requirements/reporting.in +0 -0
  217. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/setup.cfg +0 -0
  218. {edx_enterprise_data-10.16.6 → edx_enterprise_data-10.16.9}/setup.py +0 -0
@@ -16,6 +16,18 @@ Unreleased
16
16
 
17
17
  =========================
18
18
 
19
+ [10.16.9] - 2025-06-18
20
+ ---------------------
21
+ * chore: upgrade python requirements
22
+
23
+ [10.16.8] - 2025-06-16
24
+ ---------------------
25
+ * feat: add skills by learning hours metric
26
+
27
+ [10.16.7] - 2025-06-11
28
+ ---------------------
29
+ * chore: pin numpy to versions less then 2.3.0
30
+
19
31
  [10.16.6] - 2025-06-11
20
32
  ---------------------
21
33
  * Revert last requirements upgrade due to numpy 2.3.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: edx-enterprise-data
3
- Version: 10.16.6
3
+ Version: 10.16.9
4
4
  Summary: Enterprise Reporting
5
5
  Home-page: https://github.com/openedx/edx-enterprise-data
6
6
  Author: edX
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: edx-enterprise-data
3
- Version: 10.16.6
3
+ Version: 10.16.9
4
4
  Summary: Enterprise Reporting
5
5
  Home-page: https://github.com/openedx/edx-enterprise-data
6
6
  Author: edX
@@ -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__ = "10.16.6"
5
+ __version__ = "10.16.9"
@@ -1,6 +1,7 @@
1
1
  """
2
2
  Module containing queries for the skills_daily_rollup_admin_dash table.
3
3
  """
4
+ from ..query_filters import QueryFilters
4
5
 
5
6
 
6
7
  class SkillsDailyRollupAdminDashQueries:
@@ -118,3 +119,31 @@ class SkillsDailyRollupAdminDashQueries:
118
119
  ORDER BY
119
120
  total_completion_count DESC;
120
121
  """
122
+
123
+ @staticmethod
124
+ def get_skills_by_learning_hours(query_filters: QueryFilters, record_count: int = 25):
125
+ """
126
+ Get the query to fetch skills by learning hours for an enterprise customer.
127
+ """
128
+ return f"""
129
+ WITH filtered_data AS (
130
+ SELECT
131
+ skill_name,
132
+ total_learning_time_hours
133
+ FROM
134
+ skills_daily_rollup_admin_dash
135
+ WHERE
136
+ {query_filters.to_sql()}
137
+ )
138
+
139
+ SELECT
140
+ skill_name,
141
+ SUM(total_learning_time_hours) AS learning_hours
142
+ FROM
143
+ filtered_data
144
+ GROUP BY
145
+ skill_name
146
+ ORDER BY
147
+ learning_hours DESC
148
+ LIMIT {record_count};
149
+ """
@@ -4,15 +4,19 @@ Module for interacting with the skills_daily_rollup_admin_dash table.
4
4
  from datetime import date
5
5
  from uuid import UUID
6
6
 
7
+ from enterprise_data.admin_analytics.database.filters.mixins import CommonFiltersMixin
7
8
  from enterprise_data.admin_analytics.database.queries.skills_daily_rollup_admin_dash import (
8
9
  SkillsDailyRollupAdminDashQueries,
9
10
  )
11
+ from enterprise_data.admin_analytics.database.query_filters import EqualQueryFilter
10
12
  from enterprise_data.admin_analytics.database.tables.base import BaseTable
11
13
  from enterprise_data.admin_analytics.database.utils import run_query
12
14
  from enterprise_data.cache.decorators import cache_it
13
15
 
16
+ from ..query_filters import QueryFilters
14
17
 
15
- class SkillsDailyRollupAdminDashTable(BaseTable):
18
+
19
+ class SkillsDailyRollupAdminDashTable(CommonFiltersMixin, BaseTable):
16
20
  """
17
21
  Class for communicating with the skills_daily_rollup_admin_dash table.
18
22
  """
@@ -96,3 +100,68 @@ class SkillsDailyRollupAdminDashTable(BaseTable):
96
100
  },
97
101
  as_dict=True,
98
102
  )
103
+
104
+ def get_skills_by_learning_hours(
105
+ self,
106
+ enterprise_customer_uuid: UUID,
107
+ start_date: date,
108
+ end_date: date,
109
+ course_key: str = None,
110
+ course_type: str = None,
111
+ ):
112
+ """
113
+ Get the skills by learning hours for the given enterprise customer.
114
+
115
+ Arguments:
116
+ enterprise_customer_uuid (UUID): The UUID of the enterprise customer.
117
+ start_date (date): The start date.
118
+ end_date (date): The end date.
119
+ course_key (str): The course key to filter by (optional).
120
+ course_type (str): The course type (OCM or Executive Education) to filter by (optional).
121
+
122
+ Returns:
123
+ list<dict>: A list of dictionaries containing the skill_name, subject_name, count.
124
+ """
125
+ optional_params = {}
126
+ course_key_filter = None
127
+ course_type_filter = None
128
+
129
+ default_params = {
130
+ 'enterprise_customer_uuid': enterprise_customer_uuid,
131
+ 'start_date': start_date,
132
+ 'end_date': end_date,
133
+ }
134
+ query_filters = QueryFilters([
135
+ self.enterprise_customer_uuid_filter('enterprise_customer_uuid'),
136
+ self.date_range_filter(
137
+ column='date',
138
+ start_date_params_key='start_date',
139
+ end_date_params_key='end_date',
140
+ ),
141
+ ])
142
+
143
+ if course_key:
144
+ course_key_filter = EqualQueryFilter(
145
+ column='course_key',
146
+ value_placeholder='course_key',
147
+ )
148
+
149
+ optional_params['course_key'] = course_key
150
+ query_filters.append(course_key_filter)
151
+
152
+ if course_type:
153
+ course_type_filter = EqualQueryFilter(
154
+ column='course_product_line',
155
+ value_placeholder='course_type',
156
+ )
157
+
158
+ optional_params['course_type'] = course_type
159
+ query_filters.append(course_type_filter)
160
+
161
+ params = {**default_params, **optional_params}
162
+
163
+ return run_query(
164
+ query=self.queries.get_skills_by_learning_hours(query_filters),
165
+ params=params,
166
+ as_dict=True,
167
+ )
@@ -180,10 +180,24 @@ class EnterpriseAdminAnalyticsSkillsView(APIView):
180
180
  end_date
181
181
  )
182
182
 
183
+ # TODO: Handle course_key and course_type when they are provided in the request.
184
+ # We have separate tickets to handle this implementation.
185
+ course_key = None
186
+ course_type = None
187
+ with timer('skills_by_learning_hours'):
188
+ skills_by_learning_hours = SkillsDailyRollupAdminDashTable().get_skills_by_learning_hours(
189
+ enterprise_id,
190
+ start_date,
191
+ end_date,
192
+ course_key,
193
+ course_type,
194
+ )
195
+
183
196
  response_data = {
184
197
  "top_skills": skills,
185
198
  "top_skills_by_enrollments": top_skills_by_enrollments,
186
199
  "top_skills_by_completions": top_skills_by_completions,
200
+ "skills_by_learning_hours": skills_by_learning_hours,
187
201
  }
188
202
 
189
203
  return Response(data=response_data, status=HTTP_200_OK)
@@ -470,3 +470,17 @@ TOP_SKILLS_BY_COMPLETIONS = [
470
470
  "count": 15.0
471
471
  },
472
472
  ]
473
+ SKILLS_BY_LEARNING_HOURS = [
474
+ {
475
+ "skill_name": "Python (Programming Language)",
476
+ "learning_hours": 100.0
477
+ },
478
+ {
479
+ "skill_name": "Data Science",
480
+ "learning_hours": 80.0
481
+ },
482
+ {
483
+ "skill_name": "Algorithms",
484
+ "learning_hours": 60.0
485
+ },
486
+ ]
@@ -16,6 +16,7 @@ from enterprise_data.admin_analytics.database.queries import (
16
16
  FactEnrollmentAdminDashQueries,
17
17
  )
18
18
  from enterprise_data.tests.admin_analytics.mock_analytics_data import (
19
+ SKILLS_BY_LEARNING_HOURS,
19
20
  TOP_SKILLS,
20
21
  TOP_SKILLS_BY_COMPLETIONS,
21
22
  TOP_SKILLS_BY_ENROLLMENTS,
@@ -137,8 +138,10 @@ class TestSkillsStatsAPI(JWTTestMixin, APITransactionTestCase):
137
138
  @patch('enterprise_data.api.v1.views.enterprise_admin.SkillsDailyRollupAdminDashTable.get_top_skills')
138
139
  @patch('enterprise_data.api.v1.views.enterprise_admin.SkillsDailyRollupAdminDashTable.get_top_skills_by_enrollment')
139
140
  @patch('enterprise_data.api.v1.views.enterprise_admin.SkillsDailyRollupAdminDashTable.get_top_skills_by_completion')
141
+ @patch('enterprise_data.api.v1.views.enterprise_admin.SkillsDailyRollupAdminDashTable.get_skills_by_learning_hours')
140
142
  def test_get(
141
143
  self,
144
+ mock_get_skills_by_learning_hours,
142
145
  mock_get_top_skills_by_completion,
143
146
  mock_get_top_skills_by_enrollment,
144
147
  mock_get_top_skills,
@@ -151,6 +154,7 @@ class TestSkillsStatsAPI(JWTTestMixin, APITransactionTestCase):
151
154
  mock_get_top_skills.return_value = TOP_SKILLS
152
155
  mock_get_top_skills_by_enrollment.return_value = TOP_SKILLS_BY_ENROLLMENTS
153
156
  mock_get_top_skills_by_completion.return_value = TOP_SKILLS_BY_COMPLETIONS
157
+ mock_get_skills_by_learning_hours.return_value = SKILLS_BY_LEARNING_HOURS
154
158
 
155
159
  response = self.client.get(self.url)
156
160
  assert response.status_code == status.HTTP_200_OK
@@ -210,6 +214,20 @@ class TestSkillsStatsAPI(JWTTestMixin, APITransactionTestCase):
210
214
  "count": 15.0,
211
215
  },
212
216
  ],
217
+ "skills_by_learning_hours": [
218
+ {
219
+ "skill_name": "Python (Programming Language)",
220
+ "learning_hours": 100.0
221
+ },
222
+ {
223
+ "skill_name": "Data Science",
224
+ "learning_hours": 80.0
225
+ },
226
+ {
227
+ "skill_name": "Algorithms",
228
+ "learning_hours": 60.0
229
+ },
230
+ ]
213
231
  }
214
232
 
215
233
  @ddt.data(
@@ -10,17 +10,17 @@ asgiref==3.8.1
10
10
  # via django
11
11
  asn1crypto==1.5.1
12
12
  # via snowflake-connector-python
13
- awscli==1.40.26
13
+ awscli==1.40.35
14
14
  # via -r requirements/reporting.in
15
15
  bcrypt==4.3.0
16
16
  # via paramiko
17
17
  billiard==4.2.1
18
18
  # via celery
19
- boto3==1.38.27
19
+ boto3==1.38.36
20
20
  # via
21
21
  # -r requirements/reporting.in
22
22
  # snowflake-connector-python
23
- botocore==1.38.27
23
+ botocore==1.38.36
24
24
  # via
25
25
  # awscli
26
26
  # boto3
@@ -28,7 +28,7 @@ botocore==1.38.27
28
28
  # snowflake-connector-python
29
29
  celery==5.3.6
30
30
  # via -r requirements/reporting.in
31
- certifi==2025.4.26
31
+ certifi==2025.6.15
32
32
  # via
33
33
  # py2neo
34
34
  # requests
@@ -57,7 +57,7 @@ click-repl==0.3.0
57
57
  # via celery
58
58
  colorama==0.4.6
59
59
  # via awscli
60
- cryptography==45.0.3
60
+ cryptography==45.0.4
61
61
  # via
62
62
  # -r requirements/reporting.in
63
63
  # django-fernet-fields-v2
@@ -66,7 +66,7 @@ cryptography==45.0.3
66
66
  # pyjwt
67
67
  # pyopenssl
68
68
  # snowflake-connector-python
69
- django==4.2.21
69
+ django==4.2.23
70
70
  # via
71
71
  # -c /home/runner/work/edx-enterprise-data/edx-enterprise-data/requirements/common_constraints.txt
72
72
  # -r requirements/base.in
@@ -92,7 +92,7 @@ django-model-utils==5.0.0
92
92
  # via
93
93
  # -r requirements/base.in
94
94
  # edx-rbac
95
- django-waffle==4.2.0
95
+ django-waffle==5.0.0
96
96
  # via
97
97
  # edx-django-utils
98
98
  # edx-drf-extensions
@@ -128,7 +128,7 @@ edx-rest-api-client==6.2.0
128
128
  # via -r requirements/base.in
129
129
  factory-boy==3.3.3
130
130
  # via -r requirements/base.in
131
- faker==37.3.0
131
+ faker==37.4.0
132
132
  # via factory-boy
133
133
  filelock==3.18.0
134
134
  # via snowflake-connector-python
@@ -148,7 +148,7 @@ monotonic==1.6
148
148
  # via py2neo
149
149
  mysql-connector-python==9.3.0
150
150
  # via -r requirements/base.in
151
- numpy==2.2.6
151
+ numpy==2.3.0
152
152
  # via
153
153
  # -r requirements/base.in
154
154
  # pandas
@@ -157,7 +157,7 @@ packaging==25.0
157
157
  # kombu
158
158
  # py2neo
159
159
  # snowflake-connector-python
160
- pandas==2.2.3
160
+ pandas==2.3.0
161
161
  # via -r requirements/base.in
162
162
  pansi==2024.11.0
163
163
  # via py2neo
@@ -193,7 +193,7 @@ pyjwt[crypto]==2.10.1
193
193
  # snowflake-connector-python
194
194
  pyminizip==0.2.6
195
195
  # via -r requirements/reporting.in
196
- pymongo==4.13.0
196
+ pymongo==4.13.1
197
197
  # via edx-opaque-keys
198
198
  pynacl==1.5.0
199
199
  # via
@@ -214,7 +214,7 @@ pytz==2025.2
214
214
  # snowflake-connector-python
215
215
  pyyaml==6.0.2
216
216
  # via awscli
217
- requests==2.32.3
217
+ requests==2.32.4
218
218
  # via
219
219
  # -r requirements/base.in
220
220
  # edx-drf-extensions
@@ -247,9 +247,9 @@ stevedore==5.4.1
247
247
  # via
248
248
  # edx-django-utils
249
249
  # edx-opaque-keys
250
- tomlkit==0.13.2
250
+ tomlkit==0.13.3
251
251
  # via snowflake-connector-python
252
- typing-extensions==4.13.2
252
+ typing-extensions==4.14.0
253
253
  # via
254
254
  # edx-opaque-keys
255
255
  # pyopenssl
@@ -10,7 +10,7 @@ chardet==5.2.0
10
10
  # via tox
11
11
  colorama==0.4.6
12
12
  # via tox
13
- coverage==7.8.2
13
+ coverage==7.9.1
14
14
  # via -r requirements/ci.in
15
15
  distlib==0.3.9
16
16
  # via virtualenv
@@ -14,17 +14,17 @@ astroid==3.3.10
14
14
  # via
15
15
  # pylint
16
16
  # pylint-celery
17
- awscli==1.40.26
17
+ awscli==1.40.35
18
18
  # via -r requirements/reporting.in
19
19
  bcrypt==4.3.0
20
20
  # via paramiko
21
21
  billiard==4.2.1
22
22
  # via celery
23
- boto3==1.38.27
23
+ boto3==1.38.36
24
24
  # via
25
25
  # -r requirements/reporting.in
26
26
  # snowflake-connector-python
27
- botocore==1.38.27
27
+ botocore==1.38.36
28
28
  # via
29
29
  # awscli
30
30
  # boto3
@@ -36,7 +36,7 @@ cachetools==6.0.0
36
36
  # via tox
37
37
  celery==5.3.6
38
38
  # via -r requirements/reporting.in
39
- certifi==2025.4.26
39
+ certifi==2025.6.15
40
40
  # via
41
41
  # py2neo
42
42
  # requests
@@ -79,7 +79,7 @@ colorama==0.4.6
79
79
  # via
80
80
  # awscli
81
81
  # tox
82
- cryptography==45.0.3
82
+ cryptography==45.0.4
83
83
  # via
84
84
  # -r requirements/reporting.in
85
85
  # django-fernet-fields-v2
@@ -95,7 +95,7 @@ dill==0.4.0
95
95
  # via pylint
96
96
  distlib==0.3.9
97
97
  # via virtualenv
98
- django==4.2.21
98
+ django==4.2.23
99
99
  # via
100
100
  # -c /home/runner/work/edx-enterprise-data/edx-enterprise-data/requirements/common_constraints.txt
101
101
  # -r requirements/base.in
@@ -122,7 +122,7 @@ django-model-utils==5.0.0
122
122
  # via
123
123
  # -r requirements/base.in
124
124
  # edx-rbac
125
- django-waffle==4.2.0
125
+ django-waffle==5.0.0
126
126
  # via
127
127
  # edx-django-utils
128
128
  # edx-drf-extensions
@@ -166,7 +166,7 @@ edx-rest-api-client==6.2.0
166
166
  # via -r requirements/base.in
167
167
  factory-boy==3.3.3
168
168
  # via -r requirements/base.in
169
- faker==37.3.0
169
+ faker==37.4.0
170
170
  # via factory-boy
171
171
  filelock==3.18.0
172
172
  # via
@@ -231,7 +231,7 @@ mysql-connector-python==9.3.0
231
231
  # via -r requirements/base.in
232
232
  nh3==0.2.21
233
233
  # via readme-renderer
234
- numpy==2.2.6
234
+ numpy==2.3.0
235
235
  # via
236
236
  # -r requirements/base.in
237
237
  # pandas
@@ -244,7 +244,7 @@ packaging==25.0
244
244
  # snowflake-connector-python
245
245
  # tox
246
246
  # twine
247
- pandas==2.2.3
247
+ pandas==2.3.0
248
248
  # via -r requirements/base.in
249
249
  pansi==2024.11.0
250
250
  # via py2neo
@@ -316,7 +316,7 @@ pylint-plugin-utils==0.8.2
316
316
  # pylint-django
317
317
  pyminizip==0.2.6
318
318
  # via -r requirements/reporting.in
319
- pymongo==4.13.0
319
+ pymongo==4.13.1
320
320
  # via edx-opaque-keys
321
321
  pynacl==1.5.0
322
322
  # via
@@ -350,7 +350,7 @@ pyyaml==6.0.2
350
350
  # edx-i18n-tools
351
351
  readme-renderer==43.0
352
352
  # via twine
353
- requests==2.32.3
353
+ requests==2.32.4
354
354
  # via
355
355
  # -r requirements/base.in
356
356
  # edx-drf-extensions
@@ -402,7 +402,7 @@ testfixtures==8.3.0
402
402
  # via -r requirements/quality.in
403
403
  text-unidecode==1.3
404
404
  # via python-slugify
405
- tomlkit==0.13.2
405
+ tomlkit==0.13.3
406
406
  # via
407
407
  # pylint
408
408
  # snowflake-connector-python
@@ -410,7 +410,7 @@ tox==4.26.0
410
410
  # via -r requirements/dev-enterprise_data.in
411
411
  twine==6.1.0
412
412
  # via -r requirements/dev-enterprise_data.in
413
- typing-extensions==4.13.2
413
+ typing-extensions==4.14.0
414
414
  # via
415
415
  # edx-opaque-keys
416
416
  # pyopenssl
@@ -0,0 +1 @@
1
+ django==4.2.23
@@ -14,17 +14,17 @@ astroid==3.3.10
14
14
  # via
15
15
  # pylint
16
16
  # pylint-celery
17
- awscli==1.40.26
17
+ awscli==1.40.35
18
18
  # via -r requirements/reporting.in
19
19
  bcrypt==4.3.0
20
20
  # via paramiko
21
21
  billiard==4.2.1
22
22
  # via celery
23
- boto3==1.38.27
23
+ boto3==1.38.36
24
24
  # via
25
25
  # -r requirements/reporting.in
26
26
  # snowflake-connector-python
27
- botocore==1.38.27
27
+ botocore==1.38.36
28
28
  # via
29
29
  # awscli
30
30
  # boto3
@@ -36,7 +36,7 @@ cachetools==6.0.0
36
36
  # via tox
37
37
  celery==5.3.6
38
38
  # via -r requirements/reporting.in
39
- certifi==2025.4.26
39
+ certifi==2025.6.15
40
40
  # via
41
41
  # py2neo
42
42
  # requests
@@ -79,9 +79,9 @@ colorama==0.4.6
79
79
  # via
80
80
  # awscli
81
81
  # tox
82
- coverage[toml]==7.8.2
82
+ coverage[toml]==7.9.1
83
83
  # via pytest-cov
84
- cryptography==45.0.3
84
+ cryptography==45.0.4
85
85
  # via
86
86
  # -r requirements/reporting.in
87
87
  # django-fernet-fields-v2
@@ -99,7 +99,7 @@ dill==0.4.0
99
99
  # via pylint
100
100
  distlib==0.3.9
101
101
  # via virtualenv
102
- django==4.2.21
102
+ django==4.2.23
103
103
  # via
104
104
  # -c /home/runner/work/edx-enterprise-data/edx-enterprise-data/requirements/common_constraints.txt
105
105
  # -r requirements/base.in
@@ -127,7 +127,7 @@ django-model-utils==5.0.0
127
127
  # -r requirements/base.in
128
128
  # -r requirements/test.in
129
129
  # edx-rbac
130
- django-waffle==4.2.0
130
+ django-waffle==5.0.0
131
131
  # via
132
132
  # edx-django-utils
133
133
  # edx-drf-extensions
@@ -173,7 +173,7 @@ factory-boy==3.3.3
173
173
  # via
174
174
  # -r requirements/base.in
175
175
  # -r requirements/test.in
176
- faker==37.3.0
176
+ faker==37.4.0
177
177
  # via factory-boy
178
178
  filelock==3.18.0
179
179
  # via
@@ -246,7 +246,7 @@ mysql-connector-python==9.3.0
246
246
  # via -r requirements/base.in
247
247
  nh3==0.2.21
248
248
  # via readme-renderer
249
- numpy==2.2.6
249
+ numpy==2.3.0
250
250
  # via
251
251
  # -r requirements/base.in
252
252
  # pandas
@@ -260,7 +260,7 @@ packaging==25.0
260
260
  # snowflake-connector-python
261
261
  # tox
262
262
  # twine
263
- pandas==2.2.3
263
+ pandas==2.3.0
264
264
  # via -r requirements/base.in
265
265
  pansi==2024.11.0
266
266
  # via py2neo
@@ -286,6 +286,7 @@ pluggy==1.6.0
286
286
  # via
287
287
  # diff-cover
288
288
  # pytest
289
+ # pytest-cov
289
290
  # tox
290
291
  polib==1.2.0
291
292
  # via edx-i18n-tools
@@ -309,6 +310,7 @@ pygments==2.19.1
309
310
  # via
310
311
  # diff-cover
311
312
  # py2neo
313
+ # pytest
312
314
  # readme-renderer
313
315
  # rich
314
316
  pyjwt[crypto]==2.10.1
@@ -333,7 +335,7 @@ pylint-plugin-utils==0.8.2
333
335
  # pylint-django
334
336
  pyminizip==0.2.6
335
337
  # via -r requirements/reporting.in
336
- pymongo==4.13.0
338
+ pymongo==4.13.1
337
339
  # via edx-opaque-keys
338
340
  pynacl==1.5.0
339
341
  # via
@@ -347,11 +349,11 @@ pyproject-hooks==1.2.0
347
349
  # via
348
350
  # build
349
351
  # pip-tools
350
- pytest==8.3.5
352
+ pytest==8.4.0
351
353
  # via
352
354
  # pytest-cov
353
355
  # pytest-django
354
- pytest-cov==6.1.1
356
+ pytest-cov==6.2.1
355
357
  # via -r requirements/test.in
356
358
  pytest-django==4.11.1
357
359
  # via -r requirements/test.in
@@ -377,7 +379,7 @@ pyyaml==6.0.2
377
379
  # responses
378
380
  readme-renderer==43.0
379
381
  # via twine
380
- requests==2.32.3
382
+ requests==2.32.4
381
383
  # via
382
384
  # -r requirements/base.in
383
385
  # edx-drf-extensions
@@ -434,7 +436,7 @@ testfixtures==8.3.0
434
436
  # -r requirements/test.in
435
437
  text-unidecode==1.3
436
438
  # via python-slugify
437
- tomlkit==0.13.2
439
+ tomlkit==0.13.3
438
440
  # via
439
441
  # pylint
440
442
  # snowflake-connector-python
@@ -442,7 +444,7 @@ tox==4.26.0
442
444
  # via -r requirements/dev-enterprise_data.in
443
445
  twine==6.1.0
444
446
  # via -r requirements/dev-enterprise_data.in
445
- typing-extensions==4.13.2
447
+ typing-extensions==4.14.0
446
448
  # via
447
449
  # edx-opaque-keys
448
450
  # pyopenssl