edx-enterprise-data 9.2.2__tar.gz → 9.4.0__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 (197) hide show
  1. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/CHANGELOG.rst +9 -0
  2. {edx_enterprise_data-9.2.2/edx_enterprise_data.egg-info → edx_enterprise_data-9.4.0}/PKG-INFO +1 -1
  3. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0/edx_enterprise_data.egg-info}/PKG-INFO +1 -1
  4. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/__init__.py +1 -1
  5. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/admin_analytics/database/queries/fact_engagement_admin_dash.py +51 -61
  6. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/admin_analytics/database/tables/fact_engagement_admin_dash.py +71 -4
  7. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/requirements/base.txt +33 -35
  8. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/requirements/ci.txt +6 -6
  9. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/requirements/constraints.txt +7 -1
  10. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/requirements/dev.txt +58 -54
  11. edx_enterprise_data-9.4.0/requirements/django.txt +1 -0
  12. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/requirements/pip.txt +1 -1
  13. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/requirements/pip_tools.txt +2 -2
  14. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/requirements/quality.txt +60 -56
  15. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/requirements/test-master.txt +34 -36
  16. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/requirements/test-reporting.txt +27 -25
  17. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/requirements/test.txt +35 -37
  18. edx_enterprise_data-9.2.2/requirements/django.txt +0 -1
  19. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/LICENSE +0 -0
  20. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/MANIFEST.in +0 -0
  21. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/README.md +0 -0
  22. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/edx_enterprise_data.egg-info/SOURCES.txt +0 -0
  23. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/edx_enterprise_data.egg-info/dependency_links.txt +0 -0
  24. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/edx_enterprise_data.egg-info/not-zip-safe +0 -0
  25. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/edx_enterprise_data.egg-info/requires.txt +0 -0
  26. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/edx_enterprise_data.egg-info/top_level.txt +0 -0
  27. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/admin_analytics/__init__.py +0 -0
  28. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/admin_analytics/constants.py +0 -0
  29. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/admin_analytics/data_loaders.py +0 -0
  30. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/admin_analytics/database/__init__.py +0 -0
  31. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/admin_analytics/database/queries/__init__.py +0 -0
  32. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/admin_analytics/database/queries/fact_enrollment_admin_dash.py +0 -0
  33. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/admin_analytics/database/queries/skills_daily_rollup_admin_dash.py +0 -0
  34. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/admin_analytics/database/tables/__init__.py +0 -0
  35. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/admin_analytics/database/tables/base.py +0 -0
  36. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/admin_analytics/database/tables/fact_enrollment_admin_dash.py +0 -0
  37. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/admin_analytics/database/tables/skills_daily_rollup_admin_dash.py +0 -0
  38. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/admin_analytics/database/utils.py +0 -0
  39. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/api/__init__.py +0 -0
  40. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/api/urls.py +0 -0
  41. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/api/v0/__init__.py +0 -0
  42. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/api/v0/serializers.py +0 -0
  43. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/api/v0/urls.py +0 -0
  44. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/api/v0/views.py +0 -0
  45. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/api/v1/__init__.py +0 -0
  46. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/api/v1/serializers.py +0 -0
  47. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/api/v1/urls.py +0 -0
  48. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/api/v1/views/__init__.py +0 -0
  49. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/api/v1/views/analytics_completions.py +0 -0
  50. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/api/v1/views/analytics_engagements.py +0 -0
  51. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/api/v1/views/analytics_enrollments.py +0 -0
  52. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/api/v1/views/analytics_leaderboard.py +0 -0
  53. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/api/v1/views/base.py +0 -0
  54. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/api/v1/views/enterprise_admin.py +0 -0
  55. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/api/v1/views/enterprise_learner.py +0 -0
  56. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/api/v1/views/enterprise_offers.py +0 -0
  57. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/apps.py +0 -0
  58. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/clients.py +0 -0
  59. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/constants.py +0 -0
  60. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/filters.py +0 -0
  61. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/fixtures/enterprise_enrollment.json +0 -0
  62. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/fixtures/enterprise_user.json +0 -0
  63. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/management/__init__.py +0 -0
  64. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/management/commands/__init__.py +0 -0
  65. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/management/commands/create_dummy_data.py +0 -0
  66. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/management/commands/create_dummy_data_lpr_v1.py +0 -0
  67. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/management/commands/create_enterprise_enrollment.py +0 -0
  68. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/management/commands/create_enterprise_learner_enrollment_lpr_v1.py +0 -0
  69. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/management/commands/create_enterprise_learner_lpr_v1.py +0 -0
  70. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/management/commands/create_enterprise_offer.py +0 -0
  71. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/management/commands/create_enterprise_user.py +0 -0
  72. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/management/commands/tests/__init__.py +0 -0
  73. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/management/commands/tests/test_create_dummy_data_lpr_v1.py +0 -0
  74. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/management/commands/tests/test_create_enterprise_enrollment.py +0 -0
  75. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/management/commands/tests/test_create_enterprise_learner_enrollment_lpr_v1.py +0 -0
  76. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/management/commands/tests/test_create_enterprise_learner_lpr_v1.py +0 -0
  77. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/management/commands/tests/test_create_enterprise_user.py +0 -0
  78. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0001_initial.py +0 -0
  79. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0002_auto_20180430_1358.py +0 -0
  80. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0003_auto_20180501_0603.py +0 -0
  81. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0004_auto_20180501_0928.py +0 -0
  82. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0004_auto_20180508_1652.py +0 -0
  83. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0005_auto_20180524_2204.py +0 -0
  84. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0006_auto_20180612_0336.py +0 -0
  85. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0007_auto_20180612_0534.py +0 -0
  86. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0008_auto_20180614_0108.py +0 -0
  87. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0009_auto_20180628_1152.py +0 -0
  88. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0010_enterpriseenrollment_created.py +0 -0
  89. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0011_enterpriseuser.py +0 -0
  90. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0012_auto_20180831_1930.py +0 -0
  91. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0013_auto_20180831_1931.py +0 -0
  92. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0014_enterpriseuser_created.py +0 -0
  93. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0015_auto_20180907_1757.py +0 -0
  94. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0016_auto_20180924_2138.py +0 -0
  95. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0017_enterpriseenrollment_unenrollment_timestamp.py +0 -0
  96. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0018_enterprisedatafeaturerole_enterprisedataroleassignment.py +0 -0
  97. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0019_add_enterprise_data_feature_roles.py +0 -0
  98. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0020_add_role_based_access_control_switch.py +0 -0
  99. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0021_auto_20190329_1241.py +0 -0
  100. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0022_remove_role_based_access_control_switch.py +0 -0
  101. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0023_enterpriselearner_enterpriselearnerenrollment.py +0 -0
  102. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0024_auto_20210602_1811.py +0 -0
  103. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0025_auto_20210703_1854.py +0 -0
  104. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0026_auto_20210916_0414.py +0 -0
  105. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0027_enterpriselearnerenrollment_total_learning_time_seconds.py +0 -0
  106. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0028_enterpriselearnerenrollment_offer_id.py +0 -0
  107. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0029_enterpriseoffer.py +0 -0
  108. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0030_auto_20230609_1353.py +0 -0
  109. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0031_auto_20230615_0705.py +0 -0
  110. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0032_auto_20230704_0818.py +0 -0
  111. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0033_enterpriseadminlearnerprogress_enterpriseadminsummarizeinsights.py +0 -0
  112. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0034_auto_20230907_0834.py +0 -0
  113. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0035_auto_20230907_1154.py +0 -0
  114. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0036_enterprisesubsidybudget_subsidy_access_policy_display_name.py +0 -0
  115. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0037_alter_enterpriseenrollment_consent_granted.py +0 -0
  116. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0038_enterpriseoffer_export_timestamp.py +0 -0
  117. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0039_auto_20240212_1403.py +0 -0
  118. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0040_auto_20240718_0536_squashed_0043_alter_enterpriselearnerenrollment_enterprise_enrollment_id.py +0 -0
  119. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/0044_enterpriseexecedlcmoduleperformance.py +0 -0
  120. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/migrations/__init__.py +0 -0
  121. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/models.py +0 -0
  122. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/paginators.py +0 -0
  123. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/renderers.py +0 -0
  124. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/settings/__init__.py +0 -0
  125. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/settings/test.py +0 -0
  126. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/signals.py +0 -0
  127. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/tests/__init__.py +0 -0
  128. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/tests/admin_analytics/__init__.py +0 -0
  129. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/tests/admin_analytics/mock_analytics_data.py +0 -0
  130. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/tests/admin_analytics/mock_enrollments.py +0 -0
  131. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/tests/admin_analytics/test_analytics_engagements.py +0 -0
  132. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/tests/admin_analytics/test_analytics_enrollments.py +0 -0
  133. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/tests/admin_analytics/test_analytics_leaderboard.py +0 -0
  134. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/tests/admin_analytics/test_data_loaders.py +0 -0
  135. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/tests/admin_analytics/test_enterprise_completions.py +0 -0
  136. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/tests/api/__init__.py +0 -0
  137. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/tests/api/v0/__init__.py +0 -0
  138. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/tests/api/v0/test_serializers.py +0 -0
  139. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/tests/api/v1/__init__.py +0 -0
  140. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/tests/api/v1/test_serializers.py +0 -0
  141. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/tests/api/v1/test_views.py +0 -0
  142. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/tests/api/v1/views/__init__.py +0 -0
  143. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/tests/api/v1/views/test_enterprise_admin.py +0 -0
  144. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/tests/factories.py +0 -0
  145. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/tests/mixins.py +0 -0
  146. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/tests/test_clients.py +0 -0
  147. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/tests/test_filters.py +0 -0
  148. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/tests/test_models.py +0 -0
  149. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/tests/test_utils.py +0 -0
  150. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/tests/test_views.py +0 -0
  151. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/urls.py +0 -0
  152. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data/utils.py +0 -0
  153. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data_roles/__init__.py +0 -0
  154. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data_roles/admin.py +0 -0
  155. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data_roles/apps.py +0 -0
  156. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data_roles/constants.py +0 -0
  157. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data_roles/migrations/0001_initial.py +0 -0
  158. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data_roles/migrations/0002_add_enterprise_data_feature_roles.py +0 -0
  159. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data_roles/migrations/0003_add_role_based_access_control_switch.py +0 -0
  160. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data_roles/migrations/0004_enterprisedataroleassignment_enterprise_id.py +0 -0
  161. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data_roles/migrations/0005_turn_on_role_based_access_control_switch.py +0 -0
  162. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data_roles/migrations/0006_remove_role_based_access_control_switch.py +0 -0
  163. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data_roles/migrations/0007_enterprisedataroleassignment_applies_to_all_contexts.py +0 -0
  164. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data_roles/migrations/__init__.py +0 -0
  165. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data_roles/models.py +0 -0
  166. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data_roles/rules.py +0 -0
  167. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data_roles/tests/__init__.py +0 -0
  168. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data_roles/tests/factories.py +0 -0
  169. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_data_roles/tests/test_models.py +0 -0
  170. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_reporting/__init__.py +0 -0
  171. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_reporting/clients/__init__.py +0 -0
  172. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_reporting/clients/enterprise.py +0 -0
  173. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_reporting/clients/s3.py +0 -0
  174. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_reporting/clients/snowflake.py +0 -0
  175. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_reporting/clients/vertica.py +0 -0
  176. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_reporting/delivery_method.py +0 -0
  177. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_reporting/external_resource_link_report.py +0 -0
  178. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_reporting/fixtures/__init__.py +0 -0
  179. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_reporting/fixtures/enterprise_customer_reporting.json +0 -0
  180. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_reporting/reporter.py +0 -0
  181. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_reporting/send_enterprise_reports.py +0 -0
  182. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_reporting/tests/__init__.py +0 -0
  183. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_reporting/tests/test_clients.py +0 -0
  184. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_reporting/tests/test_delivery_method.py +0 -0
  185. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_reporting/tests/test_enterprise_client.py +0 -0
  186. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_reporting/tests/test_external_link_report.py +0 -0
  187. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_reporting/tests/test_reporter.py +0 -0
  188. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_reporting/tests/test_send_enterprise_reports.py +0 -0
  189. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_reporting/tests/test_utils.py +0 -0
  190. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_reporting/tests/test_vertica_client.py +0 -0
  191. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_reporting/tests/utils.py +0 -0
  192. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/enterprise_reporting/utils.py +0 -0
  193. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/requirements/base.in +0 -0
  194. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/requirements/common_constraints.txt +0 -0
  195. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/requirements/reporting.in +0 -0
  196. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/setup.cfg +0 -0
  197. {edx_enterprise_data-9.2.2 → edx_enterprise_data-9.4.0}/setup.py +0 -0
@@ -16,6 +16,15 @@ Unreleased
16
16
 
17
17
  =========================
18
18
 
19
+ [9.4.0] - 2024-09-30
20
+ ---------------------
21
+ * chore: upgrade python requirements
22
+ * pin astriod and edx-lint packages
23
+
24
+ [9.3.0] - 2024-09-30
25
+ ---------------------
26
+ * refactor: Further improvement in SQL queries for leaderboard API endpoint.
27
+
19
28
  [9.2.2] - 2024-09-27
20
29
  ---------------------
21
30
  * fix: remove the cache logging on EnterpriseLearnerEnrollmentViewSet.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: edx-enterprise-data
3
- Version: 9.2.2
3
+ Version: 9.4.0
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.1
2
2
  Name: edx-enterprise-data
3
- Version: 9.2.2
3
+ Version: 9.4.0
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__ = "9.2.2"
5
+ __version__ = "9.4.0"
@@ -111,59 +111,62 @@ class FactEngagementAdminDashQueries:
111
111
  """
112
112
 
113
113
  @staticmethod
114
- def get_all_leaderboard_data_query():
114
+ def get_engagement_data_for_leaderboard_query():
115
115
  """
116
- Get the query to fetch the leaderboard data.
116
+ Get the query to fetch the engagement data for leaderboard.
117
117
 
118
- Query should fetch the leaderboard data for the enterprise customer to show in the data table.
118
+ Query should fetch the engagement data for like learning time, session length of
119
+ the enterprise learners to show in the leaderboard.
119
120
 
120
121
  Returns:
121
- (str): Query to fetch the leaderboard data.
122
+ (str): Query to fetch the engagement data for leaderboard.
122
123
  """
123
124
  return """
124
- WITH Engagement AS (
125
- SELECT
126
- email,
127
- ROUND(SUM(learning_time_seconds) / 3600, 1) as learning_time_hours,
128
- SUM(is_engaged) as session_count,
129
- CASE
130
- WHEN SUM(is_engaged) = 0 THEN 0.0
131
- ELSE ROUND(SUM(learning_time_seconds) / 3600 / SUM(is_engaged), 1)
132
- END AS average_session_length
133
- FROM fact_enrollment_engagement_day_admin_dash
134
- WHERE enterprise_customer_uuid=%(enterprise_customer_uuid)s AND
135
- (activity_date BETWEEN %(start_date)s AND %(end_date)s) AND
136
- is_engaged = 1
137
- GROUP BY email
138
- ),
139
- Completions AS (
140
- SELECT email, count(course_key) as course_completion_count
141
- FROM fact_enrollment_admin_dash
142
- WHERE enterprise_customer_uuid=%(enterprise_customer_uuid)s AND
143
- (passed_date BETWEEN %(start_date)s AND %(end_date)s) AND
144
- has_passed = 1
145
- GROUP BY email
146
- )
147
125
  SELECT
148
- Engagement.email,
149
- Engagement.learning_time_hours,
150
- Engagement.session_count,
151
- Engagement.average_session_length,
152
- Completions.course_completion_count
153
- FROM Engagement
154
- LEFT JOIN Completions
155
- ON Engagement.email = Completions.email
156
- ORDER BY
157
- Engagement.learning_time_hours DESC,
158
- Engagement.session_count DESC,
159
- Completions.course_completion_count DESC
126
+ email,
127
+ ROUND(SUM(learning_time_seconds) / 3600, 1) as learning_time_hours,
128
+ SUM(is_engaged) as session_count,
129
+ CASE
130
+ WHEN SUM(is_engaged) = 0 THEN 0.0
131
+ ELSE ROUND(SUM(learning_time_seconds) / 3600 / SUM(is_engaged), 1)
132
+ END AS average_session_length
133
+ FROM fact_enrollment_engagement_day_admin_dash
134
+ WHERE enterprise_customer_uuid=%(enterprise_customer_uuid)s AND
135
+ (activity_date BETWEEN %(start_date)s AND %(end_date)s) AND
136
+ is_engaged = 1
137
+ GROUP BY email
138
+ ORDER BY learning_time_hours DESC
160
139
  LIMIT %(limit)s OFFSET %(offset)s;
161
140
  """
162
141
 
142
+ @staticmethod
143
+ def get_completion_data_for_leaderboard_query(email_list: list):
144
+ """
145
+ Get the query to fetch the completions data for leaderboard.
146
+
147
+ Query should fetch the completion data for like course completion count of
148
+ the enterprise learners to show in the leaderboard.
149
+
150
+ Arguments:
151
+ email_list (str): List of emails to filter the completions data.
152
+
153
+ Returns:
154
+ (list<str>): Query to fetch the completions data for leaderboard.
155
+ """
156
+ return f"""
157
+ SELECT email, count(course_key) as course_completion_count
158
+ FROM fact_enrollment_admin_dash
159
+ WHERE enterprise_customer_uuid=%(enterprise_customer_uuid)s AND
160
+ (passed_date BETWEEN %(start_date)s AND %(end_date)s) AND
161
+ has_passed = 1 AND
162
+ email IN {str(tuple(email_list))}
163
+ GROUP BY email;
164
+ """
165
+
163
166
  @staticmethod
164
167
  def get_leaderboard_data_count_query():
165
168
  """
166
- Get the query to fetch the leaderboard row count.
169
+ Get the query to fetch the leaderboard row count and null email counter.
167
170
 
168
171
  Query should fetch the count of rows for the leaderboard data for the enterprise customer.
169
172
 
@@ -171,26 +174,13 @@ class FactEngagementAdminDashQueries:
171
174
  (str): Query to fetch the leaderboard row count.
172
175
  """
173
176
  return """
174
- WITH Engagement AS (
175
- SELECT
176
- email
177
- FROM fact_enrollment_engagement_day_admin_dash
178
- WHERE enterprise_customer_uuid=%(enterprise_customer_uuid)s AND
179
- (activity_date BETWEEN %(start_date)s AND %(end_date)s) AND
180
- is_engaged = 1
181
- GROUP BY email
182
- ),
183
- Completions AS (
184
- SELECT email, count(course_key) as course_completion_count
185
- FROM fact_enrollment_admin_dash
186
- WHERE enterprise_customer_uuid=%(enterprise_customer_uuid)s AND
187
- (passed_date BETWEEN %(start_date)s AND %(end_date)s) AND
188
- has_passed = 1
189
- GROUP BY email
190
- )
191
177
  SELECT
192
- count(*)
193
- FROM Engagement
194
- LEFT JOIN Completions
195
- ON Engagement.email = Completions.email
178
+ COUNT(*) OVER () AS record_count,
179
+ sum(case when email is null then 1 else 0 end) null_count
180
+ FROM fact_enrollment_engagement_day_admin_dash
181
+ WHERE enterprise_customer_uuid=%(enterprise_customer_uuid)s AND
182
+ (activity_date BETWEEN %(start_date)s AND %(end_date)s) AND
183
+ is_engaged = 1
184
+ GROUP BY email
185
+ LIMIT 1;
196
186
  """
@@ -153,11 +153,14 @@ class FactEngagementAdminDashTable(BaseTable):
153
153
  as_dict=True,
154
154
  )
155
155
 
156
- def get_all_leaderboard_data(
156
+ def _get_engagement_data_for_leaderboard(
157
157
  self, enterprise_customer_uuid: UUID, start_date: date, end_date: date, limit: int, offset: int
158
158
  ):
159
159
  """
160
- Get the leaderboard data for the given enterprise customer.
160
+ Get the engagement data for leaderboard.
161
+
162
+ The engagement data would include fields like learning time, session length of
163
+ the enterprise learners to show in the leaderboard.
161
164
 
162
165
  Arguments:
163
166
  enterprise_customer_uuid (UUID): The UUID of the enterprise customer.
@@ -167,10 +170,10 @@ class FactEngagementAdminDashTable(BaseTable):
167
170
  offset (int): The number of records to skip.
168
171
 
169
172
  Returns:
170
- list[dict]: The leaderboard data.
173
+ list[dict]: The engagement data for leaderboard.
171
174
  """
172
175
  return run_query(
173
- query=self.queries.get_all_leaderboard_data_query(),
176
+ query=self.queries.get_engagement_data_for_leaderboard_query(),
174
177
  params={
175
178
  'enterprise_customer_uuid': enterprise_customer_uuid,
176
179
  'start_date': start_date,
@@ -181,6 +184,70 @@ class FactEngagementAdminDashTable(BaseTable):
181
184
  as_dict=True,
182
185
  )
183
186
 
187
+ def _get_completion_data_for_leaderboard_query(
188
+ self, enterprise_customer_uuid: UUID, start_date: date, end_date: date, email_list: list
189
+ ):
190
+ """
191
+ Get the completion data for leaderboard.
192
+
193
+ The completion data would include fields like course completion count of enterprise learners of the
194
+ given enterprise customer.
195
+
196
+ Arguments:
197
+ enterprise_customer_uuid (UUID): The UUID of the enterprise customer.
198
+ start_date (date): The start date.
199
+ end_date (date): The end date.
200
+ email_list (list<str>): List of emails of the enterprise learners.
201
+
202
+ Returns:
203
+ list[dict]: The engagement data for leaderboard.
204
+ """
205
+ return run_query(
206
+ query=self.queries.get_completion_data_for_leaderboard_query(email_list),
207
+ params={
208
+ 'enterprise_customer_uuid': enterprise_customer_uuid,
209
+ 'start_date': start_date,
210
+ 'end_date': end_date,
211
+ },
212
+ as_dict=True,
213
+ )
214
+
215
+ def get_all_leaderboard_data(
216
+ self, enterprise_customer_uuid: UUID, start_date: date, end_date: date, limit: int, offset: int
217
+ ):
218
+ """
219
+ Get the leaderboard data for the given enterprise customer.
220
+
221
+ Arguments:
222
+ enterprise_customer_uuid (UUID): The UUID of the enterprise customer.
223
+ start_date (date): The start date.
224
+ end_date (date): The end date.
225
+ limit (int): The maximum number of records to return.
226
+ offset (int): The number of records to skip.
227
+
228
+ Returns:
229
+ list[dict]: The leaderboard data.
230
+ """
231
+ engagement_data = self._get_engagement_data_for_leaderboard(
232
+ enterprise_customer_uuid=enterprise_customer_uuid,
233
+ start_date=start_date,
234
+ end_date=end_date,
235
+ limit=limit,
236
+ offset=offset,
237
+ )
238
+ engagement_data_dict = {engagement['email']: engagement for engagement in engagement_data}
239
+ completion_data = self._get_completion_data_for_leaderboard_query(
240
+ enterprise_customer_uuid=enterprise_customer_uuid,
241
+ start_date=start_date,
242
+ end_date=end_date,
243
+ email_list=list(engagement_data_dict.keys()),
244
+ )
245
+ for completion in completion_data:
246
+ email = completion['email']
247
+ engagement_data_dict[email]['course_completion_count'] = completion['course_completion_count']
248
+
249
+ return list(engagement_data_dict.values())
250
+
184
251
  def get_leaderboard_data_count(self, enterprise_customer_uuid: UUID, start_date: date, end_date: date):
185
252
  """
186
253
  Get the total number of leaderboard records for the given enterprise customer.
@@ -10,27 +10,27 @@ asgiref==3.8.1
10
10
  # via django
11
11
  asn1crypto==1.5.1
12
12
  # via snowflake-connector-python
13
- awscli==1.33.40
13
+ awscli==1.34.29
14
14
  # via -r requirements/reporting.in
15
15
  bcrypt==4.2.0
16
16
  # via paramiko
17
- billiard==4.2.0
17
+ billiard==4.2.1
18
18
  # via celery
19
- boto3==1.34.158
19
+ boto3==1.35.29
20
20
  # via -r requirements/reporting.in
21
- botocore==1.34.158
21
+ botocore==1.35.29
22
22
  # via
23
23
  # awscli
24
24
  # boto3
25
25
  # s3transfer
26
26
  celery==5.3.6
27
27
  # via -r requirements/reporting.in
28
- certifi==2024.7.4
28
+ certifi==2024.8.30
29
29
  # via
30
30
  # py2neo
31
31
  # requests
32
32
  # snowflake-connector-python
33
- cffi==1.17.0
33
+ cffi==1.17.1
34
34
  # via
35
35
  # cryptography
36
36
  # pynacl
@@ -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==42.0.8
57
+ cryptography==43.0.1
58
58
  # via
59
59
  # -r requirements/reporting.in
60
60
  # django-fernet-fields-v2
@@ -63,7 +63,7 @@ cryptography==42.0.8
63
63
  # pyjwt
64
64
  # pyopenssl
65
65
  # snowflake-connector-python
66
- django==4.2.15
66
+ django==4.2.16
67
67
  # via
68
68
  # -c requirements/common_constraints.txt
69
69
  # -r requirements/base.in
@@ -85,7 +85,7 @@ django-fernet-fields-v2==0.9
85
85
  # via -r requirements/base.in
86
86
  django-filter==24.3
87
87
  # via -r requirements/base.in
88
- django-model-utils==4.5.1
88
+ django-model-utils==5.0.0
89
89
  # via
90
90
  # -r requirements/base.in
91
91
  # edx-rbac
@@ -111,25 +111,25 @@ edx-django-utils==5.15.0
111
111
  # -r requirements/base.in
112
112
  # edx-drf-extensions
113
113
  # edx-rest-api-client
114
- edx-drf-extensions==10.3.0
114
+ edx-drf-extensions==10.4.0
115
115
  # via
116
116
  # -r requirements/base.in
117
117
  # edx-rbac
118
- edx-opaque-keys==2.10.0
118
+ edx-opaque-keys==2.11.0
119
119
  # via
120
120
  # -r requirements/base.in
121
121
  # edx-drf-extensions
122
- edx-rbac==1.9.0
122
+ edx-rbac==1.10.0
123
123
  # via -r requirements/base.in
124
- edx-rest-api-client==5.7.1
124
+ edx-rest-api-client==6.0.0
125
125
  # via -r requirements/base.in
126
- factory-boy==3.3.0
126
+ factory-boy==3.3.1
127
127
  # via -r requirements/base.in
128
- faker==26.3.0
128
+ faker==30.0.0
129
129
  # via factory-boy
130
- filelock==3.15.4
130
+ filelock==3.16.1
131
131
  # via snowflake-connector-python
132
- idna==3.7
132
+ idna==3.10
133
133
  # via
134
134
  # requests
135
135
  # snowflake-connector-python
@@ -139,13 +139,13 @@ jmespath==1.0.1
139
139
  # via
140
140
  # boto3
141
141
  # botocore
142
- kombu==5.4.0
142
+ kombu==5.4.2
143
143
  # via celery
144
144
  monotonic==1.6
145
145
  # via py2neo
146
146
  mysql-connector-python==9.0.0
147
147
  # via -r requirements/base.in
148
- newrelic==9.13.0
148
+ newrelic==10.0.0
149
149
  # via edx-django-utils
150
150
  numpy==1.24.4
151
151
  # via
@@ -162,21 +162,21 @@ pandas==2.0.3
162
162
  # -r requirements/base.in
163
163
  pansi==2020.7.3
164
164
  # via py2neo
165
- paramiko==3.4.1
165
+ paramiko==3.5.0
166
166
  # via -r requirements/reporting.in
167
- pbr==6.0.0
167
+ pbr==6.1.0
168
168
  # via stevedore
169
169
  pgpy==0.6.0
170
170
  # via -r requirements/reporting.in
171
- platformdirs==4.2.2
171
+ platformdirs==4.3.6
172
172
  # via snowflake-connector-python
173
- prompt-toolkit==3.0.47
173
+ prompt-toolkit==3.0.48
174
174
  # via click-repl
175
175
  psutil==6.0.0
176
176
  # via edx-django-utils
177
177
  py2neo @ https://github.com/overhangio/py2neo/releases/download/2021.2.3/py2neo-2021.2.3.tar.gz
178
178
  # via -r requirements/reporting.in
179
- pyasn1==0.6.0
179
+ pyasn1==0.6.1
180
180
  # via
181
181
  # pgpy
182
182
  # rsa
@@ -192,7 +192,7 @@ pyjwt[crypto]==2.9.0
192
192
  # snowflake-connector-python
193
193
  pyminizip==0.2.6
194
194
  # via -r requirements/reporting.in
195
- pymongo==4.8.0
195
+ pymongo==4.9.1
196
196
  # via edx-opaque-keys
197
197
  pynacl==1.5.0
198
198
  # via
@@ -207,7 +207,7 @@ python-dateutil==2.9.0.post0
207
207
  # faker
208
208
  # pandas
209
209
  # vertica-python
210
- pytz==2024.1
210
+ pytz==2024.2
211
211
  # via
212
212
  # interchange
213
213
  # pandas
@@ -219,11 +219,10 @@ requests==2.32.3
219
219
  # -r requirements/base.in
220
220
  # edx-drf-extensions
221
221
  # edx-rest-api-client
222
- # slumber
223
222
  # snowflake-connector-python
224
223
  rsa==4.7.2
225
224
  # via awscli
226
- rules==3.4
225
+ rules==3.5
227
226
  # via -r requirements/base.in
228
227
  s3transfer==0.10.2
229
228
  # via
@@ -239,31 +238,30 @@ six==1.16.0
239
238
  # py2neo
240
239
  # python-dateutil
241
240
  # vertica-python
242
- slumber==0.7.1
243
- # via edx-rest-api-client
244
- snowflake-connector-python==3.12.0
241
+ snowflake-connector-python==3.12.2
245
242
  # via -r requirements/reporting.in
246
243
  sortedcontainers==2.4.0
247
244
  # via snowflake-connector-python
248
245
  sqlparse==0.5.1
249
246
  # via django
250
- stevedore==5.2.0
247
+ stevedore==5.3.0
251
248
  # via
252
249
  # edx-django-utils
253
250
  # edx-opaque-keys
254
- tomlkit==0.13.0
251
+ tomlkit==0.13.2
255
252
  # via snowflake-connector-python
256
253
  typing-extensions==4.12.2
257
254
  # via
258
255
  # edx-opaque-keys
259
256
  # snowflake-connector-python
260
- tzdata==2024.1
257
+ tzdata==2024.2
261
258
  # via
262
259
  # celery
260
+ # kombu
263
261
  # pandas
264
262
  unicodecsv==0.14.1
265
263
  # via -r requirements/reporting.in
266
- urllib3==1.26.19
264
+ urllib3==1.26.20
267
265
  # via
268
266
  # -c requirements/constraints.txt
269
267
  # botocore
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # make upgrade
6
6
  #
7
- cachetools==5.4.0
7
+ cachetools==5.5.0
8
8
  # via tox
9
9
  chardet==5.2.0
10
10
  # via tox
@@ -14,7 +14,7 @@ coverage==7.6.1
14
14
  # via -r requirements/ci.in
15
15
  distlib==0.3.8
16
16
  # via virtualenv
17
- filelock==3.15.4
17
+ filelock==3.16.1
18
18
  # via
19
19
  # tox
20
20
  # virtualenv
@@ -22,15 +22,15 @@ packaging==24.1
22
22
  # via
23
23
  # pyproject-api
24
24
  # tox
25
- platformdirs==4.2.2
25
+ platformdirs==4.3.6
26
26
  # via
27
27
  # tox
28
28
  # virtualenv
29
29
  pluggy==1.5.0
30
30
  # via tox
31
- pyproject-api==1.7.1
31
+ pyproject-api==1.8.0
32
32
  # via tox
33
- tox==4.17.1
33
+ tox==4.20.0
34
34
  # via -r requirements/ci.in
35
- virtualenv==20.26.3
35
+ virtualenv==20.26.6
36
36
  # via tox
@@ -20,4 +20,10 @@ backports.zoneinfo; python_version<"3.9"
20
20
  urllib3<2.0.0
21
21
 
22
22
  numpy<=1.24.4
23
- pandas<=2.0.3
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