edx-enterprise-data 10.10.1__tar.gz → 10.11.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.
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/CHANGELOG.rst +9 -0
- {edx_enterprise_data-10.10.1/edx_enterprise_data.egg-info → edx_enterprise_data-10.11.1}/PKG-INFO +3 -2
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1/edx_enterprise_data.egg-info}/PKG-INFO +3 -2
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/edx_enterprise_data.egg-info/SOURCES.txt +9 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/__init__.py +1 -1
- edx_enterprise_data-10.11.1/enterprise_data/admin_analytics/database/filters/__init__.py +5 -0
- edx_enterprise_data-10.11.1/enterprise_data/admin_analytics/database/filters/base.py +7 -0
- edx_enterprise_data-10.11.1/enterprise_data/admin_analytics/database/filters/fact_enrollment_admin_dash.py +51 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/admin_analytics/database/queries/fact_enrollment_admin_dash.py +19 -18
- edx_enterprise_data-10.11.1/enterprise_data/admin_analytics/database/query_filters/__init__.py +7 -0
- edx_enterprise_data-10.11.1/enterprise_data/admin_analytics/database/query_filters/base.py +68 -0
- edx_enterprise_data-10.11.1/enterprise_data/admin_analytics/database/query_filters/between.py +30 -0
- edx_enterprise_data-10.11.1/enterprise_data/admin_analytics/database/query_filters/equal.py +27 -0
- edx_enterprise_data-10.11.1/enterprise_data/admin_analytics/database/query_filters/in_.py +28 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/admin_analytics/database/tables/fact_enrollment_admin_dash.py +144 -34
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/api/v1/serializers.py +1 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/api/v1/views/analytics_enrollments.py +12 -5
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/api/v1/views/enterprise_learner.py +13 -22
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/clients.py +39 -7
- edx_enterprise_data-10.11.1/enterprise_data/exceptions.py +21 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/management/commands/pre_warm_analytics_cache.py +14 -8
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/tests/admin_analytics/mock_enrollments.py +5 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data_roles/tests/test_models.py +0 -1
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/requirements/base.txt +15 -15
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/requirements/ci.txt +4 -4
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/requirements/dev.txt +20 -20
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/requirements/pip.txt +1 -1
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/requirements/quality.txt +23 -23
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/requirements/test-master.txt +18 -18
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/requirements/test-reporting.txt +13 -13
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/requirements/test.txt +18 -18
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/LICENSE +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/MANIFEST.in +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/README.md +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/edx_enterprise_data.egg-info/dependency_links.txt +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/edx_enterprise_data.egg-info/not-zip-safe +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/edx_enterprise_data.egg-info/requires.txt +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/edx_enterprise_data.egg-info/top_level.txt +0 -0
- {edx_enterprise_data-10.10.1/enterprise_reporting/tests → edx_enterprise_data-10.11.1/enterprise_data/admin_analytics}/__init__.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/admin_analytics/constants.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/admin_analytics/data_loaders.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/admin_analytics/database/__init__.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/admin_analytics/database/queries/__init__.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/admin_analytics/database/queries/fact_engagement_admin_dash.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/admin_analytics/database/queries/skills_daily_rollup_admin_dash.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/admin_analytics/database/tables/__init__.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/admin_analytics/database/tables/base.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/admin_analytics/database/tables/fact_engagement_admin_dash.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/admin_analytics/database/tables/skills_daily_rollup_admin_dash.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/admin_analytics/database/utils.py +0 -0
- {edx_enterprise_data-10.10.1/enterprise_reporting/fixtures → edx_enterprise_data-10.11.1/enterprise_data/api}/__init__.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/api/urls.py +0 -0
- {edx_enterprise_data-10.10.1/enterprise_data/api/v1 → edx_enterprise_data-10.11.1/enterprise_data/api/v0}/__init__.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/api/v0/serializers.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/api/v0/urls.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/api/v0/views.py +0 -0
- {edx_enterprise_data-10.10.1/enterprise_data/api/v0 → edx_enterprise_data-10.11.1/enterprise_data/api/v1}/__init__.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/api/v1/urls.py +0 -0
- {edx_enterprise_data-10.10.1/enterprise_data_roles/tests → edx_enterprise_data-10.11.1/enterprise_data/api/v1/views}/__init__.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/api/v1/views/analytics_completions.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/api/v1/views/analytics_engagements.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/api/v1/views/analytics_leaderboard.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/api/v1/views/base.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/api/v1/views/enterprise_admin.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/api/v1/views/enterprise_offers.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/apps.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/cache/__init__.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/cache/decorators.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/constants.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/filters.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/fixtures/enterprise_enrollment.json +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/fixtures/enterprise_user.json +0 -0
- {edx_enterprise_data-10.10.1/enterprise_data_roles/migrations → edx_enterprise_data-10.11.1/enterprise_data/management}/__init__.py +0 -0
- {edx_enterprise_data-10.10.1/enterprise_data/tests/api/v1/views → edx_enterprise_data-10.11.1/enterprise_data/management/commands}/__init__.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/management/commands/create_dummy_data.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/management/commands/create_dummy_data_lpr_v1.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/management/commands/create_enterprise_enrollment.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/management/commands/create_enterprise_learner_enrollment_lpr_v1.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/management/commands/create_enterprise_learner_lpr_v1.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/management/commands/create_enterprise_offer.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/management/commands/create_enterprise_user.py +0 -0
- {edx_enterprise_data-10.10.1/enterprise_data/tests/api/v1 → edx_enterprise_data-10.11.1/enterprise_data/management/commands/tests}/__init__.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/management/commands/tests/test_create_dummy_data_lpr_v1.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/management/commands/tests/test_create_enterprise_enrollment.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/management/commands/tests/test_create_enterprise_learner_enrollment_lpr_v1.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/management/commands/tests/test_create_enterprise_learner_lpr_v1.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/management/commands/tests/test_create_enterprise_user.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/management/commands/tests/test_pre_warm_analytics_cache.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0001_initial.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0002_auto_20180430_1358.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0003_auto_20180501_0603.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0004_auto_20180501_0928.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0004_auto_20180508_1652.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0005_auto_20180524_2204.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0006_auto_20180612_0336.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0007_auto_20180612_0534.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0008_auto_20180614_0108.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0009_auto_20180628_1152.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0010_enterpriseenrollment_created.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0011_enterpriseuser.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0012_auto_20180831_1930.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0013_auto_20180831_1931.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0014_enterpriseuser_created.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0015_auto_20180907_1757.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0016_auto_20180924_2138.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0017_enterpriseenrollment_unenrollment_timestamp.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0018_enterprisedatafeaturerole_enterprisedataroleassignment.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0019_add_enterprise_data_feature_roles.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0020_add_role_based_access_control_switch.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0021_auto_20190329_1241.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0022_remove_role_based_access_control_switch.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0023_enterpriselearner_enterpriselearnerenrollment.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0024_auto_20210602_1811.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0025_auto_20210703_1854.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0026_auto_20210916_0414.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0027_enterpriselearnerenrollment_total_learning_time_seconds.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0028_enterpriselearnerenrollment_offer_id.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0029_enterpriseoffer.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0030_auto_20230609_1353.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0031_auto_20230615_0705.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0032_auto_20230704_0818.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0033_enterpriseadminlearnerprogress_enterpriseadminsummarizeinsights.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0034_auto_20230907_0834.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0035_auto_20230907_1154.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0036_enterprisesubsidybudget_subsidy_access_policy_display_name.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0037_alter_enterpriseenrollment_consent_granted.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0038_enterpriseoffer_export_timestamp.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0039_auto_20240212_1403.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0040_auto_20240718_0536_squashed_0043_alter_enterpriselearnerenrollment_enterprise_enrollment_id.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0044_enterpriseexecedlcmoduleperformance.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0045_alter_enterpriseexecedlcmoduleperformance_options_and_more.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0046_enterprisegroupmembership.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0047_enterpriseexecedlcmoduleperformance_avg_after_lo_score_and_more.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/migrations/0048_alter_enterpriseexecedlcmoduleperformance_avg_after_lo_score_and_more.py +0 -0
- {edx_enterprise_data-10.10.1/enterprise_data/tests/api/v0 → edx_enterprise_data-10.11.1/enterprise_data/migrations}/__init__.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/models.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/paginators.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/renderers.py +0 -0
- {edx_enterprise_data-10.10.1/enterprise_data/tests/api → edx_enterprise_data-10.11.1/enterprise_data/settings}/__init__.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/settings/test.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/signals.py +0 -0
- {edx_enterprise_data-10.10.1/enterprise_data/tests/admin_analytics → edx_enterprise_data-10.11.1/enterprise_data/tests}/__init__.py +0 -0
- {edx_enterprise_data-10.10.1/enterprise_data/tests → edx_enterprise_data-10.11.1/enterprise_data/tests/admin_analytics}/__init__.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/tests/admin_analytics/mock_analytics_data.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/tests/admin_analytics/test_analytics_engagements.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/tests/admin_analytics/test_analytics_enrollments.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/tests/admin_analytics/test_analytics_leaderboard.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/tests/admin_analytics/test_data_loaders.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/tests/admin_analytics/test_enterprise_completions.py +0 -0
- {edx_enterprise_data-10.10.1/enterprise_data/settings → edx_enterprise_data-10.11.1/enterprise_data/tests/api}/__init__.py +0 -0
- {edx_enterprise_data-10.10.1/enterprise_data/migrations → edx_enterprise_data-10.11.1/enterprise_data/tests/api/v0}/__init__.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/tests/api/v0/test_serializers.py +0 -0
- {edx_enterprise_data-10.10.1/enterprise_data/management/commands/tests → edx_enterprise_data-10.11.1/enterprise_data/tests/api/v1}/__init__.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/tests/api/v1/test_serializers.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/tests/api/v1/test_views.py +0 -0
- {edx_enterprise_data-10.10.1/enterprise_data/management/commands → edx_enterprise_data-10.11.1/enterprise_data/tests/api/v1/views}/__init__.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/tests/api/v1/views/test_enterprise_admin.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/tests/factories.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/tests/mixins.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/tests/test_clients.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/tests/test_filters.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/tests/test_models.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/tests/test_utils.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/tests/test_views.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/urls.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data/utils.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data_roles/__init__.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data_roles/admin.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data_roles/apps.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data_roles/constants.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data_roles/migrations/0001_initial.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data_roles/migrations/0002_add_enterprise_data_feature_roles.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data_roles/migrations/0003_add_role_based_access_control_switch.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data_roles/migrations/0004_enterprisedataroleassignment_enterprise_id.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data_roles/migrations/0005_turn_on_role_based_access_control_switch.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data_roles/migrations/0006_remove_role_based_access_control_switch.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data_roles/migrations/0007_enterprisedataroleassignment_applies_to_all_contexts.py +0 -0
- {edx_enterprise_data-10.10.1/enterprise_data/management → edx_enterprise_data-10.11.1/enterprise_data_roles/migrations}/__init__.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data_roles/models.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data_roles/rules.py +0 -0
- {edx_enterprise_data-10.10.1/enterprise_data/api/v1/views → edx_enterprise_data-10.11.1/enterprise_data_roles/tests}/__init__.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_data_roles/tests/factories.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_reporting/__init__.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_reporting/clients/__init__.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_reporting/clients/enterprise.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_reporting/clients/s3.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_reporting/clients/snowflake.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_reporting/clients/vertica.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_reporting/constants.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_reporting/delivery_method.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_reporting/external_resource_link_report.py +0 -0
- {edx_enterprise_data-10.10.1/enterprise_data/api → edx_enterprise_data-10.11.1/enterprise_reporting/fixtures}/__init__.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_reporting/fixtures/enterprise_customer_reporting.json +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_reporting/reporter.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_reporting/send_enterprise_reports.py +0 -0
- {edx_enterprise_data-10.10.1/enterprise_data/admin_analytics → edx_enterprise_data-10.11.1/enterprise_reporting/tests}/__init__.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_reporting/tests/test_clients.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_reporting/tests/test_delivery_method.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_reporting/tests/test_enterprise_client.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_reporting/tests/test_external_link_report.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_reporting/tests/test_reporter.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_reporting/tests/test_send_enterprise_reports.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_reporting/tests/test_utils.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_reporting/tests/test_vertica_client.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_reporting/tests/utils.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/enterprise_reporting/utils.py +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/requirements/base.in +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/requirements/common_constraints.txt +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/requirements/constraints.txt +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/requirements/django.txt +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/requirements/pip_tools.txt +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/requirements/reporting.in +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/setup.cfg +0 -0
- {edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/setup.py +0 -0
@@ -15,6 +15,15 @@ Unreleased
|
|
15
15
|
----------
|
16
16
|
|
17
17
|
=========================
|
18
|
+
[10.11.1] - 2025-04-08
|
19
|
+
---------------------
|
20
|
+
* fix: Fixed a bug in group_uuid based filtering.
|
21
|
+
|
22
|
+
|
23
|
+
[10.11.0] - 2025-03-25
|
24
|
+
---------------------
|
25
|
+
* feat: Added the ability to filter enrollments by group_uuid in the enterprise enrollments API.
|
26
|
+
|
18
27
|
[10.10.1] - 2025-03-18
|
19
28
|
---------------------
|
20
29
|
* fix: Updated FROM email address to a provisioned email address.
|
{edx_enterprise_data-10.10.1/edx_enterprise_data.egg-info → edx_enterprise_data-10.11.1}/PKG-INFO
RENAMED
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.4
|
2
2
|
Name: edx-enterprise-data
|
3
|
-
Version: 10.
|
3
|
+
Version: 10.11.1
|
4
4
|
Summary: Enterprise Reporting
|
5
5
|
Home-page: https://github.com/openedx/edx-enterprise-data
|
6
6
|
Author: edX
|
@@ -45,6 +45,7 @@ Dynamic: classifier
|
|
45
45
|
Dynamic: description
|
46
46
|
Dynamic: home-page
|
47
47
|
Dynamic: license
|
48
|
+
Dynamic: license-file
|
48
49
|
Dynamic: provides-extra
|
49
50
|
Dynamic: requires-dist
|
50
51
|
Dynamic: summary
|
{edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1/edx_enterprise_data.egg-info}/PKG-INFO
RENAMED
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.4
|
2
2
|
Name: edx-enterprise-data
|
3
|
-
Version: 10.
|
3
|
+
Version: 10.11.1
|
4
4
|
Summary: Enterprise Reporting
|
5
5
|
Home-page: https://github.com/openedx/edx-enterprise-data
|
6
6
|
Author: edX
|
@@ -45,6 +45,7 @@ Dynamic: classifier
|
|
45
45
|
Dynamic: description
|
46
46
|
Dynamic: home-page
|
47
47
|
Dynamic: license
|
48
|
+
Dynamic: license-file
|
48
49
|
Dynamic: provides-extra
|
49
50
|
Dynamic: requires-dist
|
50
51
|
Dynamic: summary
|
{edx_enterprise_data-10.10.1 → edx_enterprise_data-10.11.1}/edx_enterprise_data.egg-info/SOURCES.txt
RENAMED
@@ -13,6 +13,7 @@ enterprise_data/__init__.py
|
|
13
13
|
enterprise_data/apps.py
|
14
14
|
enterprise_data/clients.py
|
15
15
|
enterprise_data/constants.py
|
16
|
+
enterprise_data/exceptions.py
|
16
17
|
enterprise_data/filters.py
|
17
18
|
enterprise_data/models.py
|
18
19
|
enterprise_data/paginators.py
|
@@ -25,10 +26,18 @@ enterprise_data/admin_analytics/constants.py
|
|
25
26
|
enterprise_data/admin_analytics/data_loaders.py
|
26
27
|
enterprise_data/admin_analytics/database/__init__.py
|
27
28
|
enterprise_data/admin_analytics/database/utils.py
|
29
|
+
enterprise_data/admin_analytics/database/filters/__init__.py
|
30
|
+
enterprise_data/admin_analytics/database/filters/base.py
|
31
|
+
enterprise_data/admin_analytics/database/filters/fact_enrollment_admin_dash.py
|
28
32
|
enterprise_data/admin_analytics/database/queries/__init__.py
|
29
33
|
enterprise_data/admin_analytics/database/queries/fact_engagement_admin_dash.py
|
30
34
|
enterprise_data/admin_analytics/database/queries/fact_enrollment_admin_dash.py
|
31
35
|
enterprise_data/admin_analytics/database/queries/skills_daily_rollup_admin_dash.py
|
36
|
+
enterprise_data/admin_analytics/database/query_filters/__init__.py
|
37
|
+
enterprise_data/admin_analytics/database/query_filters/base.py
|
38
|
+
enterprise_data/admin_analytics/database/query_filters/between.py
|
39
|
+
enterprise_data/admin_analytics/database/query_filters/equal.py
|
40
|
+
enterprise_data/admin_analytics/database/query_filters/in_.py
|
32
41
|
enterprise_data/admin_analytics/database/tables/__init__.py
|
33
42
|
enterprise_data/admin_analytics/database/tables/base.py
|
34
43
|
enterprise_data/admin_analytics/database/tables/fact_engagement_admin_dash.py
|
@@ -0,0 +1,51 @@
|
|
1
|
+
"""
|
2
|
+
Query filters for enrollments table.
|
3
|
+
"""
|
4
|
+
from enterprise_data.admin_analytics.database.filters.base import BaseFilter
|
5
|
+
from enterprise_data.admin_analytics.database.query_filters import BetweenQueryFilter, EqualQueryFilter, INQueryFilter
|
6
|
+
|
7
|
+
|
8
|
+
class FactEnrollmentAdminDashFilters(BaseFilter):
|
9
|
+
"""
|
10
|
+
Query filters for enrollments table.
|
11
|
+
"""
|
12
|
+
@staticmethod
|
13
|
+
def enterprise_customer_uuid_filter(enterprise_customer_uuid_params_key: str) -> EqualQueryFilter:
|
14
|
+
"""
|
15
|
+
Filter by enterprise customer uuid.
|
16
|
+
|
17
|
+
Arguments:
|
18
|
+
enterprise_customer_uuid_params_key: The key against which value will be passed in the query.
|
19
|
+
"""
|
20
|
+
return EqualQueryFilter(
|
21
|
+
column='enterprise_customer_uuid',
|
22
|
+
value_placeholder=enterprise_customer_uuid_params_key,
|
23
|
+
)
|
24
|
+
|
25
|
+
@staticmethod
|
26
|
+
def enterprise_enrollment_date_range_filter(
|
27
|
+
start_date_params_key: str, end_date_params_key: str
|
28
|
+
) -> BetweenQueryFilter:
|
29
|
+
"""
|
30
|
+
Filter by enrollment date to be in the given range.
|
31
|
+
|
32
|
+
Arguments:
|
33
|
+
start_date_params_key (str): The start date key against which value will be passed in the query.
|
34
|
+
end_date_params_key (str): The end date key against which value will be passed in the query.
|
35
|
+
"""
|
36
|
+
return BetweenQueryFilter(
|
37
|
+
column='enterprise_enrollment_date',
|
38
|
+
range_placeholders=(start_date_params_key, end_date_params_key),
|
39
|
+
)
|
40
|
+
|
41
|
+
@staticmethod
|
42
|
+
def enterprise_user_id_in_filter(
|
43
|
+
enterprise_user_id_param_keys: list,
|
44
|
+
) -> INQueryFilter:
|
45
|
+
"""
|
46
|
+
Filter by enterprise user id.
|
47
|
+
"""
|
48
|
+
return INQueryFilter(
|
49
|
+
column='enterprise_user_id',
|
50
|
+
values_placeholders=enterprise_user_id_param_keys
|
51
|
+
)
|
@@ -1,6 +1,7 @@
|
|
1
1
|
"""
|
2
2
|
Module containing queries for the fact_enrollment_admin_dash table.
|
3
3
|
"""
|
4
|
+
from ..query_filters import QueryFilters
|
4
5
|
|
5
6
|
|
6
7
|
class FactEnrollmentAdminDashQueries:
|
@@ -20,27 +21,25 @@ class FactEnrollmentAdminDashQueries:
|
|
20
21
|
"""
|
21
22
|
|
22
23
|
@staticmethod
|
23
|
-
def get_enrollment_count_query():
|
24
|
+
def get_enrollment_count_query(query_filters: QueryFilters) -> str:
|
24
25
|
"""
|
25
26
|
Get the query to fetch the total number of enrollments for an enterprise customer.
|
26
27
|
"""
|
27
|
-
return """
|
28
|
+
return f"""
|
28
29
|
SELECT count(*)
|
29
30
|
FROM fact_enrollment_admin_dash
|
30
|
-
WHERE
|
31
|
-
enterprise_enrollment_date BETWEEN %(start_date)s AND %(end_date)s;
|
31
|
+
WHERE {query_filters.to_sql()};
|
32
32
|
"""
|
33
33
|
|
34
34
|
@staticmethod
|
35
|
-
def get_all_enrollments_query():
|
35
|
+
def get_all_enrollments_query(query_filters: QueryFilters) -> str:
|
36
36
|
"""
|
37
37
|
Get the query to fetch all enrollments.
|
38
38
|
"""
|
39
|
-
return """
|
39
|
+
return f"""
|
40
40
|
SELECT email, course_title, course_subject, enroll_type, enterprise_enrollment_date
|
41
41
|
FROM fact_enrollment_admin_dash
|
42
|
-
WHERE
|
43
|
-
enterprise_enrollment_date BETWEEN %(start_date)s AND %(end_date)s
|
42
|
+
WHERE {query_filters.to_sql()}
|
44
43
|
ORDER BY ENTERPRISE_ENROLLMENT_DATE DESC LIMIT %(limit)s OFFSET %(offset)s
|
45
44
|
"""
|
46
45
|
|
@@ -98,21 +97,21 @@ class FactEnrollmentAdminDashQueries:
|
|
98
97
|
"""
|
99
98
|
|
100
99
|
@staticmethod
|
101
|
-
def get_top_courses_by_enrollments_query(record_count=10):
|
100
|
+
def get_top_courses_by_enrollments_query(query_filters: QueryFilters, record_count: int = 10) -> str:
|
102
101
|
"""
|
103
102
|
Get the query to fetch the enrollment count by courses.
|
104
103
|
|
105
104
|
Query will fetch the top N courses by enrollment count. Where N is the value of record_count.
|
106
105
|
|
107
106
|
Arguments:
|
107
|
+
query_filters (QueryFilters): List of query filters.
|
108
108
|
record_count (int): Number of records to fetch.
|
109
109
|
"""
|
110
110
|
return f"""
|
111
111
|
WITH filtered_data AS (
|
112
112
|
SELECT *
|
113
113
|
FROM fact_enrollment_admin_dash
|
114
|
-
WHERE
|
115
|
-
enterprise_enrollment_date BETWEEN %(start_date)s AND %(end_date)s
|
114
|
+
WHERE {query_filters.to_sql()}
|
116
115
|
),
|
117
116
|
top_10_courses AS (
|
118
117
|
SELECT course_key
|
@@ -134,7 +133,7 @@ class FactEnrollmentAdminDashQueries:
|
|
134
133
|
"""
|
135
134
|
|
136
135
|
@staticmethod
|
137
|
-
def get_top_subjects_by_enrollments_query(record_count=10):
|
136
|
+
def get_top_subjects_by_enrollments_query(query_filters: QueryFilters, record_count: int = 10) -> str:
|
138
137
|
"""
|
139
138
|
Get the query to fetch the enrollment count by subjects.
|
140
139
|
|
@@ -142,13 +141,13 @@ class FactEnrollmentAdminDashQueries:
|
|
142
141
|
|
143
142
|
Arguments:
|
144
143
|
record_count (int): Number of records to fetch.
|
144
|
+
query_filters (QueryFilters): List of query filters.
|
145
145
|
"""
|
146
146
|
return f"""
|
147
147
|
WITH filtered_data AS (
|
148
148
|
SELECT *
|
149
149
|
FROM fact_enrollment_admin_dash
|
150
|
-
WHERE
|
151
|
-
enterprise_enrollment_date BETWEEN %(start_date)s AND %(end_date)s
|
150
|
+
WHERE {query_filters.to_sql()}
|
152
151
|
),
|
153
152
|
top_10_subjects AS (
|
154
153
|
SELECT course_subject
|
@@ -168,15 +167,17 @@ class FactEnrollmentAdminDashQueries:
|
|
168
167
|
"""
|
169
168
|
|
170
169
|
@staticmethod
|
171
|
-
def get_enrolment_time_series_data_query():
|
170
|
+
def get_enrolment_time_series_data_query(query_filters: QueryFilters) -> str:
|
172
171
|
"""
|
173
172
|
Get the query to fetch the enrollment time series data with daily aggregation.
|
173
|
+
|
174
|
+
Arguments:
|
175
|
+
query_filters (QueryFilters): A list of filters for this query.
|
174
176
|
"""
|
175
|
-
return """
|
177
|
+
return f"""
|
176
178
|
SELECT enterprise_enrollment_date, enroll_type, COUNT(*) as enrollment_count
|
177
179
|
FROM fact_enrollment_admin_dash
|
178
|
-
WHERE
|
179
|
-
enterprise_enrollment_date BETWEEN %(start_date)s AND %(end_date)s
|
180
|
+
WHERE {query_filters.to_sql()}
|
180
181
|
GROUP BY enterprise_enrollment_date, enroll_type
|
181
182
|
ORDER BY enterprise_enrollment_date;
|
182
183
|
"""
|
@@ -0,0 +1,68 @@
|
|
1
|
+
"""
|
2
|
+
Base Query Filter.
|
3
|
+
"""
|
4
|
+
from abc import ABC, abstractmethod
|
5
|
+
|
6
|
+
|
7
|
+
class QueryFilter(ABC):
|
8
|
+
"""
|
9
|
+
Base Query filter class for functionality common to all filters.
|
10
|
+
"""
|
11
|
+
@abstractmethod
|
12
|
+
def to_sql(self) -> str:
|
13
|
+
"""
|
14
|
+
Convert the filter to a SQL string.
|
15
|
+
"""
|
16
|
+
raise NotImplementedError
|
17
|
+
|
18
|
+
@staticmethod
|
19
|
+
def validate_argument_exclusivity(value, value_placeholder):
|
20
|
+
"""
|
21
|
+
Validate that that arguments are mutually exclusive.
|
22
|
+
|
23
|
+
This method will make sure that at-least one of the value or value_placeholder is provided. it will also
|
24
|
+
make sure that both value and value_placeholder are not provided at the same time.
|
25
|
+
|
26
|
+
Arguments:
|
27
|
+
value: The value of the filter.
|
28
|
+
value_placeholder: The placeholder for the value.
|
29
|
+
"""
|
30
|
+
if value is not None and value_placeholder is not None:
|
31
|
+
raise ValueError('Both value and value_placeholder cannot be provided at the same time.')
|
32
|
+
if value is None and value_placeholder is None:
|
33
|
+
raise ValueError('Either value or value_placeholder must be provided.')
|
34
|
+
return True
|
35
|
+
|
36
|
+
def value_to_sql(self, value):
|
37
|
+
"""
|
38
|
+
Convert the given value to a string in a way that it can be used inside WHERE clause of SQL query.
|
39
|
+
|
40
|
+
Note: This method is meant to evolve according to user needs. currently it handles the following data types.
|
41
|
+
More types can be added as needed.
|
42
|
+
|
43
|
+
1. str: Encloses the string in single quotes.
|
44
|
+
2. list<str>: Encloses the list of strings in a tuple after calling this method recursively on each item.
|
45
|
+
|
46
|
+
Arguments:
|
47
|
+
value (Any): The value to format.
|
48
|
+
|
49
|
+
Returns:
|
50
|
+
(Any): The formatted value.
|
51
|
+
"""
|
52
|
+
if isinstance(value, str):
|
53
|
+
return f"'{value}'"
|
54
|
+
if isinstance(value, list):
|
55
|
+
return [self.value_to_sql(item) for item in value]
|
56
|
+
|
57
|
+
return value
|
58
|
+
|
59
|
+
|
60
|
+
class QueryFilters(list):
|
61
|
+
"""
|
62
|
+
A list of QueryFilter objects.
|
63
|
+
"""
|
64
|
+
def to_sql(self) -> str:
|
65
|
+
"""
|
66
|
+
Convert the filters to a SQL string.
|
67
|
+
"""
|
68
|
+
return ' AND '.join([_filter.to_sql() for _filter in self])
|
@@ -0,0 +1,30 @@
|
|
1
|
+
"""
|
2
|
+
Query filter for between operation.
|
3
|
+
"""
|
4
|
+
from .base import QueryFilter
|
5
|
+
|
6
|
+
|
7
|
+
class BetweenQueryFilter(QueryFilter):
|
8
|
+
"""
|
9
|
+
Query filter for between operation.
|
10
|
+
"""
|
11
|
+
|
12
|
+
def __init__(self, column: str, _range: tuple = None, range_placeholders: tuple = None):
|
13
|
+
"""
|
14
|
+
Initialize the filter.
|
15
|
+
|
16
|
+
This will also validate arguments.
|
17
|
+
"""
|
18
|
+
self.validate_argument_exclusivity(_range, range_placeholders)
|
19
|
+
|
20
|
+
self.column = column
|
21
|
+
self.range = _range
|
22
|
+
self.range_placeholders = range_placeholders
|
23
|
+
|
24
|
+
def to_sql(self) -> str:
|
25
|
+
if self.range:
|
26
|
+
lower, upper = self.range
|
27
|
+
return f'{self.column} BETWEEN {self.value_to_sql(lower)} AND {self.value_to_sql(upper)}'
|
28
|
+
else:
|
29
|
+
lower_placeholder, upper_placeholder = self.range_placeholders
|
30
|
+
return f'{self.column} BETWEEN %({lower_placeholder})s AND %({upper_placeholder})s'
|
@@ -0,0 +1,27 @@
|
|
1
|
+
"""
|
2
|
+
Query filter for equal operation.
|
3
|
+
"""
|
4
|
+
from .base import QueryFilter
|
5
|
+
|
6
|
+
|
7
|
+
class EqualQueryFilter(QueryFilter):
|
8
|
+
"""
|
9
|
+
Query filter for equal operation.
|
10
|
+
"""
|
11
|
+
def __init__(self, column: str, value: str = None, value_placeholder: str = None):
|
12
|
+
"""
|
13
|
+
Initialize the filter.
|
14
|
+
|
15
|
+
This will also validate arguments.
|
16
|
+
"""
|
17
|
+
self.validate_argument_exclusivity(value, value_placeholder)
|
18
|
+
|
19
|
+
self.column = column
|
20
|
+
self.value = value
|
21
|
+
self.value_placeholder = value_placeholder
|
22
|
+
|
23
|
+
def to_sql(self) -> str:
|
24
|
+
if self.value is not None:
|
25
|
+
return f'{self.column} = {self.value_to_sql(self.value)}'
|
26
|
+
else:
|
27
|
+
return f'{self.column} = %({self.value_placeholder})s'
|
@@ -0,0 +1,28 @@
|
|
1
|
+
"""
|
2
|
+
Query filter for between operation.
|
3
|
+
"""
|
4
|
+
from .base import QueryFilter
|
5
|
+
|
6
|
+
|
7
|
+
class INQueryFilter(QueryFilter):
|
8
|
+
"""
|
9
|
+
Query filter for IN operation.
|
10
|
+
"""
|
11
|
+
|
12
|
+
def __init__(self, column: str, values: list = None, values_placeholders: list = None):
|
13
|
+
"""
|
14
|
+
Initialize the filter.
|
15
|
+
|
16
|
+
This will also validate arguments.
|
17
|
+
"""
|
18
|
+
self.validate_argument_exclusivity(values, values_placeholders)
|
19
|
+
|
20
|
+
self.column = column
|
21
|
+
self.values = values
|
22
|
+
self.values_placeholders = values_placeholders
|
23
|
+
|
24
|
+
def to_sql(self) -> str:
|
25
|
+
if self.values is not None:
|
26
|
+
return f'{self.column} IN {str(tuple(self.value_to_sql(self.values)))}'
|
27
|
+
else:
|
28
|
+
return f'{self.column} IN {tuple(f"%({item})s" for item in self.values_placeholders)}'
|