• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

kobotoolbox / kpi / 23179673250
82%
master: 76%

Build:
Build:
LAST BUILD BRANCH: main
DEFAULT BRANCH: master
Ran 17 Mar 2026 05:23AM UTC
Jobs 10
Files 897
Run time 2min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

17 Mar 2026 05:19AM UTC coverage: 82.044% (+0.008%) from 82.036%
23179673250

push

github

web-flow
feat(qual): add per-user throttling for Automatic QA requests DEV-1449 (#6824)

### 📣 Summary
Adds a configurable per-user rate limit for automatic QA requests to
prevent users or scripts from triggering large bursts of Bedrock
requests through the supplement API.

### 📖 Description
Automatic QA requests trigger calls to external LLM providers (AWS
Bedrock). Currently there is no protection against a user sending a
large number of requests in a short time period.

Although the UI does not provide bulk operations, users could easily
send repeated requests via scripts (e.g. curl or API clients).

This PR introduces per-user rate limiting for Automatic QA requests. The
throttle:
- applies only to Automatic Bedrock QA requests (e.g.,
`AUTOMATIC_BEDROCK_QUAL`)
- is enforced on the submission supplement PATCH endpoint
- is per authenticated user
- limits requests to N requests per second (Configurable via Constance
`AUTOMATIC_QA_REQUESTS_PER_SECOND`, default: 5)

If a user exceeds the configured limit, the API returns: `HTTP 429 Too
Many Requests`

7549 of 11659 branches covered (64.75%)

11 of 26 new or added lines in 2 files covered. (42.31%)

900 existing lines in 60 files now uncovered.

29000 of 35347 relevant lines covered (82.04%)

5.81 hits per line

New Missed Lines in Diff

Lines Coverage ∆ File
2
59.93
-0.27% kpi/views/v2/data.py
13
43.48
kobo/apps/subsequences/throttling.py

Uncovered Existing Lines

Lines Coverage ∆ File
1
44.44
-5.56% kobo/apps/accounts/templatetags/get_provider_appname.py
1
45.72
-0.37% kobo/apps/openrosa/apps/viewer/models/data_dictionary.py
1
57.89
-2.63% kobo/apps/organizations/utils.py
1
57.89
-2.63% kpi/db_routers.py
1
79.49
-2.56% kpi/deployment_backends/kc_access/storage.py
1
95.51
-1.12% kpi/deployment_backends/mock_backend.py
1
78.71
-0.5% kpi/filters.py
1
67.74
-3.23% kpi/mixins/standardize_searchable_field.py
1
92.86
-2.38% kpi/models/asset_version.py
1
85.0
-5.0% kpi/urls/__init__.py
2
57.09
-0.79% kobo/apps/openrosa/apps/viewer/models/parsed_instance.py
2
91.3
-8.7% kobo/apps/project_ownership/views/invite.py
2
83.47
-1.65% kpi/exceptions.py
3
78.43
-5.88% hub/models/extra_user_detail.py
3
88.57
-8.57% kobo/apps/project_views/models/project_view.py
4
53.85
-30.77% kobo/apps/accounts/templatetags/customize_email_content.py
4
22.69
-3.36% kobo/apps/stripe/utils/subscription_limits.py
4
89.47
-7.02% kpi/deployment_backends/mixin.py
5
65.28
-1.22% kobo/apps/audit_log/models.py
5
30.0
-7.14% kobo/apps/organizations/permissions.py
5
47.22
-13.89% kobo/apps/organizations/tasks.py
5
90.2
-4.9% kpi/models/asset_file.py
5
81.03
-4.31% kpi/models/asset_snapshot.py
5
75.0
-20.83% kpi/models/authorized_application.py
6
30.19
-3.77% kobo/apps/openrosa/apps/api/permissions.py
6
62.5
-37.5% kobo/apps/organizations/signals.py
6
43.75
-37.5% kobo/apps/project_ownership/filters.py
6
72.09
-13.95% kobo/apps/project_ownership/serializers/transfer.py
6
0.0
-100.0% kobo/apps/project_views/tasks.py
6
74.51
-11.76% kpi/context_processors.py
6
42.86
-42.86% kpi/mixins/asset.py
7
67.74
-22.58% kobo/apps/data_collectors/models.py
7
56.97
-4.24% kobo/apps/organizations/models.py
7
76.4
-7.87% kobo/apps/reports/report_data.py
7
53.33
-46.67% kpi/maintenance_tasks.py
7
70.37
-25.93% kpi/models/extra_project_metadata_field.py
8
35.71
-4.76% kobo/apps/openrosa/apps/main/models/meta_data.py
8
48.94
-8.51% kobo/apps/openrosa/libs/utils/middleware.py
9
47.62
-21.43% kobo/apps/markdownx_uploader/models.py
9
67.61
-12.68% kobo/apps/project_ownership/models/invite.py
11
70.41
-5.61% kobo/apps/openrosa/apps/logger/models/instance.py
12
42.11
-31.58% kobo/apps/data_collectors/signals.py
12
43.06
-16.67% kobo/apps/project_ownership/serializers/invite.py
12
90.91
-3.41% kpi/mixins/object_permission.py
13
35.8
-16.05% hub/utils/i18n.py
13
49.66
-8.97% kobo/apps/organizations/views.py
18
35.56
-40.0% kpi/fields/file.py
18
64.66
-15.52% kpi/paginators.py
21
0.0
-70.0% kobo/apps/audit_log/tasks.py
23
60.41
-11.68% kpi/mixins/formpack_xlsform_utils.py
27
0.0
-72.97% kobo/apps/accounts/adapter.py
27
16.67
-18.0% kobo/apps/project_ownership/utils.py
39
40.36
-6.43% kpi/deployment_backends/openrosa_backend.py
40
85.06
-7.29% kpi/models/asset.py
41
34.65
-32.28% kpi/models/paired_data.py
44
60.05
-10.92% kpi/deployment_backends/base_backend.py
63
32.52
-51.22% kobo/apps/accounts/forms.py
77
0.0
-77.78% kpi/password_validation.py
97
29.35
-48.26% kobo/apps/project_ownership/models/transfer.py
117
61.42
-19.8% kpi/models/import_export_task.py
Jobs
ID Job ID Ran Files Coverage
1 23179673250.1 17 Mar 2026 05:23AM UTC 893
53.19
2 23179673250.2 17 Mar 2026 05:24AM UTC 893
54.74
3 23179673250.3 17 Mar 2026 05:24AM UTC 895
54.43
4 23179673250.4 17 Mar 2026 05:24AM UTC 895
56.01
5 23179673250.5 17 Mar 2026 05:25AM UTC 893
53.23
6 23179673250.6 17 Mar 2026 05:25AM UTC 893
60.32
7 23179673250.7 17 Mar 2026 05:26AM UTC 895
65.98
8 23179673250.8 17 Mar 2026 05:26AM UTC 895
61.47
9 23179673250.9 17 Mar 2026 05:26AM UTC 895
54.6
10 23179673250.10 17 Mar 2026 05:29AM UTC 897
68.26
Source Files on build 23179673250
  • Tree
  • List 897
  • Changed 2
  • Source Changed 0
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • 26f81f01 on github
  • Prev Build on main (#23141457682)
  • Next Build on main (#23198933749)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc