edx-enterprise-data 10.7.7__tar.gz → 10.8.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 (203) hide show
  1. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/CHANGELOG.rst +8 -0
  2. {edx_enterprise_data-10.7.7/edx_enterprise_data.egg-info → edx_enterprise_data-10.8.1}/PKG-INFO +1 -1
  3. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1/edx_enterprise_data.egg-info}/PKG-INFO +1 -1
  4. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/edx_enterprise_data.egg-info/SOURCES.txt +1 -0
  5. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/__init__.py +1 -1
  6. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/api/v1/serializers.py +14 -0
  7. edx_enterprise_data-10.8.1/enterprise_data/migrations/0047_enterpriseexecedlcmoduleperformance_avg_after_lo_score_and_more.py +28 -0
  8. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/models.py +3 -0
  9. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/utils.py +19 -0
  10. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_reporting/send_enterprise_reports.py +13 -3
  11. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_reporting/tests/test_send_enterprise_reports.py +1 -1
  12. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_reporting/tests/test_utils.py +1 -0
  13. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_reporting/utils.py +2 -5
  14. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/requirements/base.txt +11 -12
  15. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/requirements/ci.txt +2 -2
  16. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/requirements/dev.txt +13 -14
  17. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/requirements/quality.txt +15 -16
  18. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/requirements/test-master.txt +13 -14
  19. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/requirements/test-reporting.txt +6 -6
  20. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/requirements/test.txt +13 -14
  21. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/LICENSE +0 -0
  22. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/MANIFEST.in +0 -0
  23. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/README.md +0 -0
  24. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/edx_enterprise_data.egg-info/dependency_links.txt +0 -0
  25. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/edx_enterprise_data.egg-info/not-zip-safe +0 -0
  26. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/edx_enterprise_data.egg-info/requires.txt +0 -0
  27. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/edx_enterprise_data.egg-info/top_level.txt +0 -0
  28. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/admin_analytics/__init__.py +0 -0
  29. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/admin_analytics/constants.py +0 -0
  30. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/admin_analytics/data_loaders.py +0 -0
  31. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/admin_analytics/database/__init__.py +0 -0
  32. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/admin_analytics/database/queries/__init__.py +0 -0
  33. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/admin_analytics/database/queries/fact_engagement_admin_dash.py +0 -0
  34. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/admin_analytics/database/queries/fact_enrollment_admin_dash.py +0 -0
  35. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/admin_analytics/database/queries/skills_daily_rollup_admin_dash.py +0 -0
  36. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/admin_analytics/database/tables/__init__.py +0 -0
  37. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/admin_analytics/database/tables/base.py +0 -0
  38. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/admin_analytics/database/tables/fact_engagement_admin_dash.py +0 -0
  39. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/admin_analytics/database/tables/fact_enrollment_admin_dash.py +0 -0
  40. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/admin_analytics/database/tables/skills_daily_rollup_admin_dash.py +0 -0
  41. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/admin_analytics/database/utils.py +0 -0
  42. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/api/__init__.py +0 -0
  43. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/api/urls.py +0 -0
  44. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/api/v0/__init__.py +0 -0
  45. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/api/v0/serializers.py +0 -0
  46. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/api/v0/urls.py +0 -0
  47. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/api/v0/views.py +0 -0
  48. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/api/v1/__init__.py +0 -0
  49. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/api/v1/urls.py +0 -0
  50. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/api/v1/views/__init__.py +0 -0
  51. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/api/v1/views/analytics_completions.py +0 -0
  52. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/api/v1/views/analytics_engagements.py +0 -0
  53. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/api/v1/views/analytics_enrollments.py +0 -0
  54. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/api/v1/views/analytics_leaderboard.py +0 -0
  55. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/api/v1/views/base.py +0 -0
  56. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/api/v1/views/enterprise_admin.py +0 -0
  57. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/api/v1/views/enterprise_learner.py +0 -0
  58. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/api/v1/views/enterprise_offers.py +0 -0
  59. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/apps.py +0 -0
  60. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/cache/__init__.py +0 -0
  61. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/cache/decorators.py +0 -0
  62. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/clients.py +0 -0
  63. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/constants.py +0 -0
  64. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/filters.py +0 -0
  65. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/fixtures/enterprise_enrollment.json +0 -0
  66. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/fixtures/enterprise_user.json +0 -0
  67. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/management/__init__.py +0 -0
  68. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/management/commands/__init__.py +0 -0
  69. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/management/commands/create_dummy_data.py +0 -0
  70. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/management/commands/create_dummy_data_lpr_v1.py +0 -0
  71. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/management/commands/create_enterprise_enrollment.py +0 -0
  72. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/management/commands/create_enterprise_learner_enrollment_lpr_v1.py +0 -0
  73. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/management/commands/create_enterprise_learner_lpr_v1.py +0 -0
  74. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/management/commands/create_enterprise_offer.py +0 -0
  75. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/management/commands/create_enterprise_user.py +0 -0
  76. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/management/commands/pre_warm_analytics_cache.py +0 -0
  77. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/management/commands/tests/__init__.py +0 -0
  78. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/management/commands/tests/test_create_dummy_data_lpr_v1.py +0 -0
  79. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/management/commands/tests/test_create_enterprise_enrollment.py +0 -0
  80. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/management/commands/tests/test_create_enterprise_learner_enrollment_lpr_v1.py +0 -0
  81. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/management/commands/tests/test_create_enterprise_learner_lpr_v1.py +0 -0
  82. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/management/commands/tests/test_create_enterprise_user.py +0 -0
  83. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/management/commands/tests/test_pre_warm_analytics_cache.py +0 -0
  84. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0001_initial.py +0 -0
  85. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0002_auto_20180430_1358.py +0 -0
  86. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0003_auto_20180501_0603.py +0 -0
  87. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0004_auto_20180501_0928.py +0 -0
  88. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0004_auto_20180508_1652.py +0 -0
  89. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0005_auto_20180524_2204.py +0 -0
  90. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0006_auto_20180612_0336.py +0 -0
  91. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0007_auto_20180612_0534.py +0 -0
  92. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0008_auto_20180614_0108.py +0 -0
  93. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0009_auto_20180628_1152.py +0 -0
  94. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0010_enterpriseenrollment_created.py +0 -0
  95. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0011_enterpriseuser.py +0 -0
  96. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0012_auto_20180831_1930.py +0 -0
  97. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0013_auto_20180831_1931.py +0 -0
  98. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0014_enterpriseuser_created.py +0 -0
  99. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0015_auto_20180907_1757.py +0 -0
  100. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0016_auto_20180924_2138.py +0 -0
  101. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0017_enterpriseenrollment_unenrollment_timestamp.py +0 -0
  102. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0018_enterprisedatafeaturerole_enterprisedataroleassignment.py +0 -0
  103. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0019_add_enterprise_data_feature_roles.py +0 -0
  104. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0020_add_role_based_access_control_switch.py +0 -0
  105. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0021_auto_20190329_1241.py +0 -0
  106. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0022_remove_role_based_access_control_switch.py +0 -0
  107. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0023_enterpriselearner_enterpriselearnerenrollment.py +0 -0
  108. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0024_auto_20210602_1811.py +0 -0
  109. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0025_auto_20210703_1854.py +0 -0
  110. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0026_auto_20210916_0414.py +0 -0
  111. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0027_enterpriselearnerenrollment_total_learning_time_seconds.py +0 -0
  112. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0028_enterpriselearnerenrollment_offer_id.py +0 -0
  113. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0029_enterpriseoffer.py +0 -0
  114. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0030_auto_20230609_1353.py +0 -0
  115. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0031_auto_20230615_0705.py +0 -0
  116. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0032_auto_20230704_0818.py +0 -0
  117. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0033_enterpriseadminlearnerprogress_enterpriseadminsummarizeinsights.py +0 -0
  118. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0034_auto_20230907_0834.py +0 -0
  119. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0035_auto_20230907_1154.py +0 -0
  120. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0036_enterprisesubsidybudget_subsidy_access_policy_display_name.py +0 -0
  121. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0037_alter_enterpriseenrollment_consent_granted.py +0 -0
  122. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0038_enterpriseoffer_export_timestamp.py +0 -0
  123. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0039_auto_20240212_1403.py +0 -0
  124. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0040_auto_20240718_0536_squashed_0043_alter_enterpriselearnerenrollment_enterprise_enrollment_id.py +0 -0
  125. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0044_enterpriseexecedlcmoduleperformance.py +0 -0
  126. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0045_alter_enterpriseexecedlcmoduleperformance_options_and_more.py +0 -0
  127. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/0046_enterprisegroupmembership.py +0 -0
  128. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/migrations/__init__.py +0 -0
  129. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/paginators.py +0 -0
  130. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/renderers.py +0 -0
  131. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/settings/__init__.py +0 -0
  132. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/settings/test.py +0 -0
  133. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/signals.py +0 -0
  134. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/tests/__init__.py +0 -0
  135. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/tests/admin_analytics/__init__.py +0 -0
  136. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/tests/admin_analytics/mock_analytics_data.py +0 -0
  137. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/tests/admin_analytics/mock_enrollments.py +0 -0
  138. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/tests/admin_analytics/test_analytics_engagements.py +0 -0
  139. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/tests/admin_analytics/test_analytics_enrollments.py +0 -0
  140. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/tests/admin_analytics/test_analytics_leaderboard.py +0 -0
  141. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/tests/admin_analytics/test_data_loaders.py +0 -0
  142. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/tests/admin_analytics/test_enterprise_completions.py +0 -0
  143. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/tests/api/__init__.py +0 -0
  144. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/tests/api/v0/__init__.py +0 -0
  145. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/tests/api/v0/test_serializers.py +0 -0
  146. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/tests/api/v1/__init__.py +0 -0
  147. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/tests/api/v1/test_serializers.py +0 -0
  148. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/tests/api/v1/test_views.py +0 -0
  149. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/tests/api/v1/views/__init__.py +0 -0
  150. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/tests/api/v1/views/test_enterprise_admin.py +0 -0
  151. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/tests/factories.py +0 -0
  152. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/tests/mixins.py +0 -0
  153. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/tests/test_clients.py +0 -0
  154. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/tests/test_filters.py +0 -0
  155. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/tests/test_models.py +0 -0
  156. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/tests/test_utils.py +0 -0
  157. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/tests/test_views.py +0 -0
  158. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data/urls.py +0 -0
  159. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data_roles/__init__.py +0 -0
  160. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data_roles/admin.py +0 -0
  161. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data_roles/apps.py +0 -0
  162. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data_roles/constants.py +0 -0
  163. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data_roles/migrations/0001_initial.py +0 -0
  164. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data_roles/migrations/0002_add_enterprise_data_feature_roles.py +0 -0
  165. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data_roles/migrations/0003_add_role_based_access_control_switch.py +0 -0
  166. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data_roles/migrations/0004_enterprisedataroleassignment_enterprise_id.py +0 -0
  167. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data_roles/migrations/0005_turn_on_role_based_access_control_switch.py +0 -0
  168. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data_roles/migrations/0006_remove_role_based_access_control_switch.py +0 -0
  169. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data_roles/migrations/0007_enterprisedataroleassignment_applies_to_all_contexts.py +0 -0
  170. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data_roles/migrations/__init__.py +0 -0
  171. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data_roles/models.py +0 -0
  172. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data_roles/rules.py +0 -0
  173. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data_roles/tests/__init__.py +0 -0
  174. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data_roles/tests/factories.py +0 -0
  175. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_data_roles/tests/test_models.py +0 -0
  176. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_reporting/__init__.py +0 -0
  177. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_reporting/clients/__init__.py +0 -0
  178. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_reporting/clients/enterprise.py +0 -0
  179. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_reporting/clients/s3.py +0 -0
  180. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_reporting/clients/snowflake.py +0 -0
  181. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_reporting/clients/vertica.py +0 -0
  182. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_reporting/delivery_method.py +0 -0
  183. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_reporting/external_resource_link_report.py +0 -0
  184. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_reporting/fixtures/__init__.py +0 -0
  185. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_reporting/fixtures/enterprise_customer_reporting.json +0 -0
  186. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_reporting/reporter.py +0 -0
  187. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_reporting/tests/__init__.py +0 -0
  188. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_reporting/tests/test_clients.py +0 -0
  189. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_reporting/tests/test_delivery_method.py +0 -0
  190. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_reporting/tests/test_enterprise_client.py +0 -0
  191. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_reporting/tests/test_external_link_report.py +0 -0
  192. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_reporting/tests/test_reporter.py +0 -0
  193. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_reporting/tests/test_vertica_client.py +0 -0
  194. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/enterprise_reporting/tests/utils.py +0 -0
  195. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/requirements/base.in +0 -0
  196. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/requirements/common_constraints.txt +0 -0
  197. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/requirements/constraints.txt +0 -0
  198. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/requirements/django.txt +0 -0
  199. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/requirements/pip.txt +0 -0
  200. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/requirements/pip_tools.txt +0 -0
  201. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/requirements/reporting.in +0 -0
  202. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/setup.cfg +0 -0
  203. {edx_enterprise_data-10.7.7 → edx_enterprise_data-10.8.1}/setup.py +0 -0
@@ -16,6 +16,14 @@ Unreleased
16
16
 
17
17
  =========================
18
18
 
19
+ [10.8.1] - 2025-02-20
20
+ ---------------------
21
+ * feat: Added 2 new columns in module performance report model and exposed them via associated REST API.
22
+
23
+ [10.7.8] - 2025-02-18
24
+ ---------------------
25
+ * chore: bump version from 10.7.7 to 10.7.8 for dependency upgrades
26
+
19
27
  [10.7.7] - 2025-02-11
20
28
  ---------------------
21
29
  * chore: upgrade python requirements
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: edx-enterprise-data
3
- Version: 10.7.7
3
+ Version: 10.8.1
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.2
2
2
  Name: edx-enterprise-data
3
- Version: 10.7.7
3
+ Version: 10.8.1
4
4
  Summary: Enterprise Reporting
5
5
  Home-page: https://github.com/openedx/edx-enterprise-data
6
6
  Author: edX
@@ -117,6 +117,7 @@ enterprise_data/migrations/0040_auto_20240718_0536_squashed_0043_alter_enterpris
117
117
  enterprise_data/migrations/0044_enterpriseexecedlcmoduleperformance.py
118
118
  enterprise_data/migrations/0045_alter_enterpriseexecedlcmoduleperformance_options_and_more.py
119
119
  enterprise_data/migrations/0046_enterprisegroupmembership.py
120
+ enterprise_data/migrations/0047_enterpriseexecedlcmoduleperformance_avg_after_lo_score_and_more.py
120
121
  enterprise_data/migrations/__init__.py
121
122
  enterprise_data/settings/__init__.py
122
123
  enterprise_data/settings/test.py
@@ -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.7.7"
5
+ __version__ = "10.8.1"
@@ -16,6 +16,7 @@ from enterprise_data.models import (
16
16
  EnterpriseOffer,
17
17
  EnterpriseSubsidyBudget,
18
18
  )
19
+ from enterprise_data.utils import calculate_percentage_difference
19
20
 
20
21
 
21
22
  class EnterpriseLearnerEnrollmentSerializer(serializers.ModelSerializer):
@@ -231,6 +232,7 @@ class EnterpriseExecEdLCModulePerformanceSerializer(serializers.ModelSerializer)
231
232
  Serializer for EnterpriseExecEdLCModulePerformance model.
232
233
  """
233
234
  extensions_requested = serializers.SerializerMethodField()
235
+ avg_lo_percentage_difference = serializers.SerializerMethodField()
234
236
 
235
237
  class Meta:
236
238
  model = EnterpriseExecEdLCModulePerformance
@@ -240,6 +242,18 @@ class EnterpriseExecEdLCModulePerformanceSerializer(serializers.ModelSerializer)
240
242
  """Return extensions_requested if not None, otherwise return 0"""
241
243
  return obj.extensions_requested if obj.extensions_requested is not None else 0
242
244
 
245
+ def get_avg_lo_percentage_difference(self, obj):
246
+ """
247
+ Return percentage difference between `avg_before_lo_score` and `avg_after_lo_score` if not None,
248
+ otherwise return None
249
+ """
250
+ if obj.avg_before_lo_score is None or obj.avg_after_lo_score is None:
251
+ return None
252
+ return round(
253
+ calculate_percentage_difference(obj.avg_before_lo_score, obj.avg_after_lo_score),
254
+ 2
255
+ )
256
+
243
257
 
244
258
  class EnterpriseBudgetSerializer(serializers.ModelSerializer):
245
259
  """
@@ -0,0 +1,28 @@
1
+ # Generated by Django 4.2.15 on 2025-02-20 08:08
2
+
3
+ from django.db import migrations, models
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ('enterprise_data', '0046_enterprisegroupmembership'),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AddField(
14
+ model_name='enterpriseexecedlcmoduleperformance',
15
+ name='avg_after_lo_score',
16
+ field=models.DecimalField(decimal_places=6, max_digits=38, null=True),
17
+ ),
18
+ migrations.AddField(
19
+ model_name='enterpriseexecedlcmoduleperformance',
20
+ name='avg_before_lo_score',
21
+ field=models.DecimalField(decimal_places=6, max_digits=38, null=True),
22
+ ),
23
+ migrations.AddField(
24
+ model_name='enterpriseexecedlcmoduleperformance',
25
+ name='question_name',
26
+ field=models.CharField(max_length=500, null=True),
27
+ ),
28
+ ]
@@ -558,6 +558,9 @@ class EnterpriseExecEdLCModulePerformance(models.Model):
558
558
  discussion_forum_activities_completed_count = models.PositiveIntegerField(null=True)
559
559
  discussion_forum_activities_total_count = models.PositiveIntegerField(null=True)
560
560
  pass_grade = models.DecimalField(max_digits=38, decimal_places=2, null=True)
561
+ question_name = models.CharField(max_length=500, null=True)
562
+ avg_before_lo_score = models.DecimalField(max_digits=38, decimal_places=6, null=True)
563
+ avg_after_lo_score = models.DecimalField(max_digits=38, decimal_places=6, null=True)
561
564
 
562
565
  def __str__(self):
563
566
  """
@@ -114,3 +114,22 @@ def find_first(iterable, condition):
114
114
  return next(item for item in iterable if condition(item))
115
115
  except StopIteration:
116
116
  return None
117
+
118
+
119
+ def calculate_percentage_difference(first, second):
120
+ """
121
+ Calculate the percentage difference between two numbers.
122
+
123
+ It will calculate the percentage difference between the two numbers using the formula:
124
+ ((second - first) / (first + second)/2) * 100
125
+
126
+ Arguments:
127
+ first (float): The first number.
128
+ second (float): The second number.
129
+
130
+ Returns:
131
+ float: The percentage difference between the two numbers.
132
+ """
133
+ if first == 0 and second == 0:
134
+ return 0
135
+ return ((second - first) / ((first + second) / 2)) * 100
@@ -4,13 +4,15 @@ Sends an Enterprise Customer's data file to a configured destination.
4
4
  """
5
5
 
6
6
 
7
-
8
7
  import argparse
8
+ import datetime
9
9
  import logging
10
10
  import os
11
11
  import re
12
12
  import sys
13
13
 
14
+ import pytz
15
+
14
16
  from enterprise_reporting.clients.enterprise import EnterpriseAPIClient
15
17
  from enterprise_reporting.reporter import EnterpriseReportSender
16
18
  from enterprise_reporting.utils import is_current_time_in_schedule
@@ -55,11 +57,13 @@ def cleanup_files(enterprise_id):
55
57
  os.remove(os.path.join(directory, f))
56
58
 
57
59
 
58
- def should_deliver_report(args, reporting_config):
60
+ def should_deliver_report(args, reporting_config, current_est_time):
59
61
  """Given CLI arguments and the reporting configuration, determine if delivery should happen."""
60
62
  valid_data_type = reporting_config['data_type'] in (args.data_type or DATA_TYPES)
61
63
  enterprise_customer_specified = bool(args.enterprise_customer)
64
+
62
65
  meets_schedule_requirement = is_current_time_in_schedule(
66
+ current_est_time,
63
67
  reporting_config['frequency'],
64
68
  reporting_config['hour_of_day'],
65
69
  reporting_config['day_of_month'],
@@ -101,6 +105,12 @@ def process_reports():
101
105
  LOGGER.error(f'The enterprise {args.enterprise_customer} does not have a reporting configuration.')
102
106
  sys.exit(1)
103
107
 
108
+ # We are defining the current est time globally because we want the current time for a job
109
+ # to remain same thoughout the job. This ensures that a single report is not processed multiple times.
110
+ # See this comment for more details: https://2u-internal.atlassian.net/browse/ENT-9954?focusedCommentId=5356815
111
+ est_timezone = pytz.timezone('US/Eastern')
112
+ current_est_time = datetime.datetime.now(est_timezone)
113
+
104
114
  error_raised = False
105
115
  for reporting_config in reporting_configs['results']:
106
116
  LOGGER.info('Checking if {}\'s reporting config for {} data in {} format is ready for processing'.format(
@@ -109,7 +119,7 @@ def process_reports():
109
119
  reporting_config['report_type'],
110
120
  ))
111
121
 
112
- if should_deliver_report(args, reporting_config):
122
+ if should_deliver_report(args, reporting_config, current_est_time):
113
123
  if send_data(reporting_config):
114
124
  error_raised = True
115
125
  else:
@@ -33,4 +33,4 @@ class TestSendEnterpriseReports(unittest.TestCase):
33
33
  Command = namedtuple("Command", "data_type enterprise_customer")
34
34
  args = Command('', '')
35
35
 
36
- assert should_deliver_report(args, reporting_config)
36
+ assert should_deliver_report(args, reporting_config, current_est_time)
@@ -165,6 +165,7 @@ class TestUtilities(unittest.TestCase):
165
165
  est_timezone = pytz.timezone('US/Eastern')
166
166
  current_est_time = datetime.datetime.now(est_timezone)
167
167
  assert utils.is_current_time_in_schedule(
168
+ current_est_time,
168
169
  utils.FREQUENCY_TYPE_DAILY,
169
170
  current_est_time.hour,
170
171
  current_est_time.day,
@@ -3,7 +3,6 @@ Utility functions for Enterprise Reporting.
3
3
  """
4
4
 
5
5
 
6
- import datetime
7
6
  import logging
8
7
  import os
9
8
  import re
@@ -16,7 +15,6 @@ from urllib.parse import parse_qs, urlparse
16
15
  import boto3
17
16
  import pgpy
18
17
  import pyminizip
19
- import pytz
20
18
  from cryptography.fernet import Fernet
21
19
  from fernet_fields.hkdf import derive_fernet_key
22
20
 
@@ -149,12 +147,11 @@ def send_email_with_attachment(subject, body, from_email, to_email, attachment_d
149
147
  LOGGER.debug(result)
150
148
 
151
149
 
152
- def is_current_time_in_schedule(frequency, hour_of_day, day_of_month=None, day_of_week=None):
150
+ def is_current_time_in_schedule(current_est_time, frequency, hour_of_day, day_of_month=None, day_of_week=None):
153
151
  """
154
152
  Determine if the current time is in the range specified by this configuration's schedule.
155
153
  """
156
- est_timezone = pytz.timezone('US/Eastern')
157
- current_est_time = datetime.datetime.now(est_timezone)
154
+
158
155
  current_hour_of_day = current_est_time.hour
159
156
  current_day_of_week = current_est_time.weekday()
160
157
  current_day_of_month = current_est_time.day
@@ -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.37.16
13
+ awscli==1.37.21
14
14
  # via -r requirements/reporting.in
15
15
  bcrypt==4.2.1
16
16
  # via paramiko
17
17
  billiard==4.2.1
18
18
  # via celery
19
- boto3==1.36.16
19
+ boto3==1.36.21
20
20
  # via -r requirements/reporting.in
21
- botocore==1.36.16
21
+ botocore==1.36.21
22
22
  # via
23
23
  # awscli
24
24
  # boto3
@@ -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==44.0.0
57
+ cryptography==44.0.1
58
58
  # via
59
59
  # -r requirements/reporting.in
60
60
  # django-fernet-fields-v2
@@ -83,7 +83,7 @@ django-crum==0.7.9
83
83
  # edx-rbac
84
84
  django-fernet-fields-v2==0.9
85
85
  # via -r requirements/base.in
86
- django-filter==24.3
86
+ django-filter==25.1
87
87
  # via -r requirements/base.in
88
88
  django-model-utils==5.0.0
89
89
  # via
@@ -121,11 +121,11 @@ edx-opaque-keys==2.11.0
121
121
  # edx-drf-extensions
122
122
  edx-rbac==1.10.0
123
123
  # via -r requirements/base.in
124
- edx-rest-api-client==6.0.0
124
+ edx-rest-api-client==6.1.0
125
125
  # via -r requirements/base.in
126
126
  factory-boy==3.3.3
127
127
  # via -r requirements/base.in
128
- faker==35.2.0
128
+ faker==36.1.1
129
129
  # via factory-boy
130
130
  filelock==3.17.0
131
131
  # via snowflake-connector-python
@@ -147,7 +147,7 @@ mysql-connector-python==9.2.0
147
147
  # via -r requirements/base.in
148
148
  newrelic==10.6.0
149
149
  # via edx-django-utils
150
- numpy==2.2.2
150
+ numpy==2.2.3
151
151
  # via
152
152
  # -r requirements/base.in
153
153
  # pandas
@@ -171,7 +171,7 @@ platformdirs==4.3.6
171
171
  # via snowflake-connector-python
172
172
  prompt-toolkit==3.0.50
173
173
  # via click-repl
174
- psutil==6.1.1
174
+ psutil==7.0.0
175
175
  # via edx-django-utils
176
176
  py2neo @ https://github.com/overhangio/py2neo/releases/download/2021.2.3/py2neo-2021.2.3.tar.gz
177
177
  # via -r requirements/reporting.in
@@ -191,7 +191,7 @@ pyjwt[crypto]==2.10.1
191
191
  # snowflake-connector-python
192
192
  pyminizip==0.2.6
193
193
  # via -r requirements/reporting.in
194
- pymongo==4.11
194
+ pymongo==4.11.1
195
195
  # via edx-opaque-keys
196
196
  pynacl==1.5.0
197
197
  # via
@@ -203,7 +203,6 @@ python-dateutil==2.9.0.post0
203
203
  # via
204
204
  # botocore
205
205
  # celery
206
- # faker
207
206
  # pandas
208
207
  # vertica-python
209
208
  pytz==2025.1
@@ -251,11 +250,11 @@ tomlkit==0.13.2
251
250
  typing-extensions==4.12.2
252
251
  # via
253
252
  # edx-opaque-keys
254
- # faker
255
253
  # snowflake-connector-python
256
254
  tzdata==2025.1
257
255
  # via
258
256
  # celery
257
+ # faker
259
258
  # kombu
260
259
  # pandas
261
260
  unicodecsv==0.14.1
@@ -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.6.11
13
+ coverage==7.6.12
14
14
  # via -r requirements/ci.in
15
15
  distlib==0.3.9
16
16
  # via virtualenv
@@ -32,5 +32,5 @@ pyproject-api==1.9.0
32
32
  # via tox
33
33
  tox==4.24.1
34
34
  # via -r requirements/ci.in
35
- virtualenv==20.29.1
35
+ virtualenv==20.29.2
36
36
  # via tox
@@ -14,15 +14,15 @@ astroid==3.3.8
14
14
  # via
15
15
  # pylint
16
16
  # pylint-celery
17
- awscli==1.37.16
17
+ awscli==1.37.21
18
18
  # via -r requirements/reporting.in
19
19
  bcrypt==4.2.1
20
20
  # via paramiko
21
21
  billiard==4.2.1
22
22
  # via celery
23
- boto3==1.36.16
23
+ boto3==1.36.21
24
24
  # via -r requirements/reporting.in
25
- botocore==1.36.16
25
+ botocore==1.36.21
26
26
  # via
27
27
  # awscli
28
28
  # boto3
@@ -76,7 +76,7 @@ colorama==0.4.6
76
76
  # via
77
77
  # awscli
78
78
  # tox
79
- cryptography==44.0.0
79
+ cryptography==44.0.1
80
80
  # via
81
81
  # -r requirements/reporting.in
82
82
  # django-fernet-fields-v2
@@ -113,7 +113,7 @@ django-crum==0.7.9
113
113
  # edx-rbac
114
114
  django-fernet-fields-v2==0.9
115
115
  # via -r requirements/base.in
116
- django-filter==24.3
116
+ django-filter==25.1
117
117
  # via -r requirements/base.in
118
118
  django-model-utils==5.0.0
119
119
  # via
@@ -159,11 +159,11 @@ edx-opaque-keys==2.11.0
159
159
  # edx-drf-extensions
160
160
  edx-rbac==1.10.0
161
161
  # via -r requirements/base.in
162
- edx-rest-api-client==6.0.0
162
+ edx-rest-api-client==6.1.0
163
163
  # via -r requirements/base.in
164
164
  factory-boy==3.3.3
165
165
  # via -r requirements/base.in
166
- faker==35.2.0
166
+ faker==36.1.1
167
167
  # via factory-boy
168
168
  filelock==3.17.0
169
169
  # via
@@ -204,7 +204,7 @@ keyring==25.6.0
204
204
  # via twine
205
205
  kombu==5.4.2
206
206
  # via celery
207
- lxml[html-clean,html_clean]==5.3.0
207
+ lxml[html-clean,html_clean]==5.3.1
208
208
  # via
209
209
  # edx-i18n-tools
210
210
  # lxml-html-clean
@@ -230,7 +230,7 @@ newrelic==10.6.0
230
230
  # via edx-django-utils
231
231
  nh3==0.2.20
232
232
  # via readme-renderer
233
- numpy==2.2.2
233
+ numpy==2.2.3
234
234
  # via
235
235
  # -r requirements/base.in
236
236
  # pandas
@@ -272,7 +272,7 @@ polib==1.2.0
272
272
  # via edx-i18n-tools
273
273
  prompt-toolkit==3.0.50
274
274
  # via click-repl
275
- psutil==6.1.1
275
+ psutil==7.0.0
276
276
  # via edx-django-utils
277
277
  py2neo @ https://github.com/overhangio/py2neo/releases/download/2021.2.3/py2neo-2021.2.3.tar.gz
278
278
  # via -r requirements/reporting.in
@@ -314,7 +314,7 @@ pylint-plugin-utils==0.8.2
314
314
  # pylint-django
315
315
  pyminizip==0.2.6
316
316
  # via -r requirements/reporting.in
317
- pymongo==4.11
317
+ pymongo==4.11.1
318
318
  # via edx-opaque-keys
319
319
  pynacl==1.5.0
320
320
  # via
@@ -332,7 +332,6 @@ python-dateutil==2.9.0.post0
332
332
  # via
333
333
  # botocore
334
334
  # celery
335
- # faker
336
335
  # pandas
337
336
  # vertica-python
338
337
  python-slugify==8.0.4
@@ -412,11 +411,11 @@ twine==6.1.0
412
411
  typing-extensions==4.12.2
413
412
  # via
414
413
  # edx-opaque-keys
415
- # faker
416
414
  # snowflake-connector-python
417
415
  tzdata==2025.1
418
416
  # via
419
417
  # celery
418
+ # faker
420
419
  # kombu
421
420
  # pandas
422
421
  unicodecsv==0.14.1
@@ -435,7 +434,7 @@ vine==5.1.0
435
434
  # amqp
436
435
  # celery
437
436
  # kombu
438
- virtualenv==20.29.1
437
+ virtualenv==20.29.2
439
438
  # via tox
440
439
  wcwidth==0.2.13
441
440
  # via prompt-toolkit
@@ -14,15 +14,15 @@ astroid==3.3.8
14
14
  # via
15
15
  # pylint
16
16
  # pylint-celery
17
- awscli==1.37.16
17
+ awscli==1.37.21
18
18
  # via -r requirements/reporting.in
19
19
  bcrypt==4.2.1
20
20
  # via paramiko
21
21
  billiard==4.2.1
22
22
  # via celery
23
- boto3==1.36.16
23
+ boto3==1.36.21
24
24
  # via -r requirements/reporting.in
25
- botocore==1.36.16
25
+ botocore==1.36.21
26
26
  # via
27
27
  # awscli
28
28
  # boto3
@@ -76,9 +76,9 @@ colorama==0.4.6
76
76
  # via
77
77
  # awscli
78
78
  # tox
79
- coverage[toml]==7.6.11
79
+ coverage[toml]==7.6.12
80
80
  # via pytest-cov
81
- cryptography==44.0.0
81
+ cryptography==44.0.1
82
82
  # via
83
83
  # -r requirements/reporting.in
84
84
  # django-fernet-fields-v2
@@ -117,7 +117,7 @@ django-crum==0.7.9
117
117
  # edx-rbac
118
118
  django-fernet-fields-v2==0.9
119
119
  # via -r requirements/base.in
120
- django-filter==24.3
120
+ django-filter==25.1
121
121
  # via -r requirements/base.in
122
122
  django-model-utils==5.0.0
123
123
  # via
@@ -164,13 +164,13 @@ edx-opaque-keys==2.11.0
164
164
  # edx-drf-extensions
165
165
  edx-rbac==1.10.0
166
166
  # via -r requirements/base.in
167
- edx-rest-api-client==6.0.0
167
+ edx-rest-api-client==6.1.0
168
168
  # via -r requirements/base.in
169
169
  factory-boy==3.3.3
170
170
  # via
171
171
  # -r requirements/base.in
172
172
  # -r requirements/test.in
173
- faker==35.2.0
173
+ faker==36.1.1
174
174
  # via factory-boy
175
175
  filelock==3.17.0
176
176
  # via
@@ -217,7 +217,7 @@ keyring==25.6.0
217
217
  # via twine
218
218
  kombu==5.4.2
219
219
  # via celery
220
- lxml[html-clean,html_clean]==5.3.0
220
+ lxml[html-clean,html_clean]==5.3.1
221
221
  # via
222
222
  # edx-i18n-tools
223
223
  # lxml-html-clean
@@ -245,7 +245,7 @@ newrelic==10.6.0
245
245
  # via edx-django-utils
246
246
  nh3==0.2.20
247
247
  # via readme-renderer
248
- numpy==2.2.2
248
+ numpy==2.2.3
249
249
  # via
250
250
  # -r requirements/base.in
251
251
  # pandas
@@ -289,7 +289,7 @@ polib==1.2.0
289
289
  # via edx-i18n-tools
290
290
  prompt-toolkit==3.0.50
291
291
  # via click-repl
292
- psutil==6.1.1
292
+ psutil==7.0.0
293
293
  # via edx-django-utils
294
294
  py2neo @ https://github.com/overhangio/py2neo/releases/download/2021.2.3/py2neo-2021.2.3.tar.gz
295
295
  # via -r requirements/reporting.in
@@ -331,7 +331,7 @@ pylint-plugin-utils==0.8.2
331
331
  # pylint-django
332
332
  pyminizip==0.2.6
333
333
  # via -r requirements/reporting.in
334
- pymongo==4.11
334
+ pymongo==4.11.1
335
335
  # via edx-opaque-keys
336
336
  pynacl==1.5.0
337
337
  # via
@@ -351,13 +351,12 @@ pytest==8.3.4
351
351
  # pytest-django
352
352
  pytest-cov==6.0.0
353
353
  # via -r requirements/test.in
354
- pytest-django==4.9.0
354
+ pytest-django==4.10.0
355
355
  # via -r requirements/test.in
356
356
  python-dateutil==2.9.0.post0
357
357
  # via
358
358
  # botocore
359
359
  # celery
360
- # faker
361
360
  # freezegun
362
361
  # pandas
363
362
  # vertica-python
@@ -444,11 +443,11 @@ twine==6.1.0
444
443
  typing-extensions==4.12.2
445
444
  # via
446
445
  # edx-opaque-keys
447
- # faker
448
446
  # snowflake-connector-python
449
447
  tzdata==2025.1
450
448
  # via
451
449
  # celery
450
+ # faker
452
451
  # kombu
453
452
  # pandas
454
453
  unicodecsv==0.14.1
@@ -468,7 +467,7 @@ vine==5.1.0
468
467
  # amqp
469
468
  # celery
470
469
  # kombu
471
- virtualenv==20.29.1
470
+ virtualenv==20.29.2
472
471
  # via tox
473
472
  wcwidth==0.2.13
474
473
  # via prompt-toolkit