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

kobotoolbox / kpi / 29344763700
82%
master: 76%

Build:
Build:
LAST BUILD BRANCH: beccagraber/dev-2432-no-version-update
DEFAULT BRANCH: master
Ran 14 Jul 2026 03:22PM UTC
Jobs 10
Files 893
Run time 3min
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

14 Jul 2026 03:18PM UTC coverage: 81.51% (+0.005%) from 81.505%
29344763700

push

github

web-flow
perf(asset): fetch permissions once in Asset detail endpoint DEV-1833 (#7238)

### đŸ“Ŗ Summary

Opening a single project or collection is a bit faster — the server does
less redundant work per request.

### 📖 Description

When you open a project or collection, the server was preparing its
permission information twice. It now does that once, so detail pages
load slightly faster. Nothing changes in what you see.

### 💭 Notes

- The Asset **detail** endpoint fetched permission assignments **twice**
— once in `get_permissions()`, once in the `get_access_types()`
fallback. Added a per-request memoized helper so both share **one**
query (verified 2→1 with `CaptureQueriesContext`).
- Output is unchanged: the shared fetch is a superset each method
narrows in-memory. The list path is untouched (it uses the viewset
cache).

Added a regression test
(`test_detail_access_types_reuses_permission_fetch`) that fails if the
fields stop sharing the fetch. Green on both settings axes, darker
clean, no schema drift.

### 👀 Preview steps

1. â„šī¸ have an account with a project or collection, and turn on SQL
query logging (Django debug toolbar, or log `django.db.backends`)
2. `GET /api/v2/assets/<uid>/` for that asset
3. 🔴 [on main] the object-permission table is queried **twice** for that
request
4. đŸŸĸ [on PR] it is queried **once**, and the response body is identical

9332 of 12658 branches covered (73.72%)

1 of 7 new or added lines in 1 file covered. (14.29%)

2493 existing lines in 92 files now uncovered.

30355 of 37241 relevant lines covered (81.51%)

5.52 hits per line

Uncovered Changes

Lines Coverage ∆ File
6
34.68
-29.58% kpi/serializers/v2/asset.py

Coverage Regressions

Lines Coverage ∆ File
311
28.11
-50.24% kpi/models/import_export_task.py
188
58.52
-33.04% kpi/models/asset.py
186
34.68
-29.58% kpi/serializers/v2/asset.py
97
29.35
-48.26% kobo/apps/project_ownership/models/transfer.py
81
0.0
-93.1% kobo/apps/stripe/serializers.py
80
71.12
-21.8% kpi/mixins/object_permission.py
75
0.0
-41.9% kobo/apps/stripe/views.py
71
21.6
-56.8% kobo/apps/stripe/utils/subscription_limits.py
67
25.35
-31.46% kpi/filters.py
64
12.36
-71.91% kobo/apps/reports/report_data.py
63
32.52
-51.22% kobo/apps/accounts/forms.py
63
0.0
-51.64% kobo/apps/stripe/models.py
57
32.58
-64.04% kpi/deployment_backends/mock_backend.py
54
35.34
-40.6% kpi/paginators.py
53
38.71
-8.73% kpi/deployment_backends/openrosa_backend.py
50
54.57
-12.35% kpi/deployment_backends/base_backend.py
49
28.28
-49.49% kpi/password_validation.py
44
37.07
-37.93% kpi/models/asset_snapshot.py
41
45.06
-9.43% kobo/apps/audit_log/models.py
39
35.2
-31.2% kpi/models/paired_data.py
38
34.52
-45.24% kobo/apps/audit_log/base_views.py
36
20.21
-38.3% kobo/apps/stripe/utils/billing_dates.py
35
52.28
-17.77% kpi/mixins/formpack_xlsform_utils.py
32
53.92
-31.37% kpi/models/asset_file.py
27
0.0
-72.97% kobo/apps/accounts/adapter.py
27
16.67
-18.0% kobo/apps/project_ownership/utils.py
24
40.0
-53.33% kpi/fields/jsonschema_form_field.py
24
74.76
-23.3% kpi/utils/usage_calculator.py
21
65.45
-9.55% kpi/permissions.py
21
42.79
-9.77% kpi/renderers.py
20
52.38
-31.75% hub/models/extra_user_detail.py
20
0.0
-68.97% kobo/apps/audit_log/tasks.py
19
0.0
-65.52% kobo/apps/stripe/admin.py
18
35.56
-40.0% kpi/fields/file.py
18
37.84
-48.65% kpi/serializers/v2/create_user.py
17
46.99
-10.24% kobo/apps/organizations/views.py
16
60.0
-11.43% kobo/apps/audit_log/signals.py
16
84.68
-2.88% kobo/apps/openrosa/libs/utils/logger_tools.py
16
31.82
-36.36% kobo/apps/stripe/utils/limit_enforcement.py
13
37.14
-18.57% hub/utils/i18n.py
13
26.09
-56.52% kpi/fields/relative_prefix_hyperlinked_related.py
12
43.06
-16.67% kobo/apps/project_ownership/serializers/invite.py
12
35.0
-60.0% kobo/apps/stripe/utils/import_management.py
11
0.0
-44.0% kobo/apps/stripe/signals.py
11
69.44
-30.56% kpi/models/asset_user_partial_permission.py
11
23.31
-3.09% kpi/serializers/v2/asset_permission_assignment.py
10
60.71
-35.71% kobo/apps/audit_log/utils.py
10
66.2
-14.08% kobo/apps/project_ownership/models/invite.py
10
14.8
-5.1% kobo/apps/subsequences/utils/versioning.py
10
74.0
-20.0% kpi/models/asset_version.py
9
57.58
-5.45% kobo/apps/organizations/models.py
9
0.0
-29.03% kobo/apps/stripe/utils/manual_subscription.py
9
35.29
-52.94% kpi/serializers/v1/authorized_application_user.py
8
0.0
-100.0% kobo/apps/stripe/urls.py
7
50.0
-18.42% kobo/apps/organizations/utils.py
7
61.76
-20.59% kobo/apps/storage_backends/base.py
7
0.0
-100.0% kobo/apps/stripe/apps.py
7
32.14
-25.0% kobo/apps/subsequences/utils/supplement_data.py
7
57.14
-33.33% kpi/fields/paginated_api.py
7
53.33
-46.67% kpi/maintenance_tasks.py
7
70.37
-25.93% kpi/models/extra_project_metadata_field.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
0.0
-100.0% kobo/apps/stripe/exceptions.py
6
0.0
-37.5% kobo/apps/stripe/utils/view_utils.py
6
74.51
-11.76% kpi/context_processors.py
6
42.86
-42.86% kpi/mixins/asset.py
5
30.0
-7.14% kobo/apps/organizations/permissions.py
5
47.22
-13.89% kobo/apps/organizations/tasks.py
5
53.85
-6.41% kpi/deployment_backends/kc_access/utils.py
5
57.14
-23.81% kpi/fields/writable_json.py
5
75.0
-20.83% kpi/models/authorized_application.py
4
53.85
-30.77% kobo/apps/accounts/templatetags/customize_email_content.py
4
77.5
-10.0% kobo/apps/kobo_auth/signals.py
4
89.47
-7.02% kpi/deployment_backends/mixin.py
3
65.79
-7.89% kobo/apps/data_collectors/signals.py
3
31.43
-2.86% kobo/apps/organizations/admin/organization.py
3
89.19
-8.11% kobo/apps/project_views/models/project_view.py
2
64.21
-2.11% kobo/apps/openrosa/libs/utils/middleware.py
2
91.3
-8.7% kobo/apps/project_ownership/views/invite.py
2
83.33
-6.67% kobo/urls.py
2
85.84
-1.77% kpi/exceptions.py
2
64.52
-6.45% kpi/mixins/standardize_searchable_field.py
2
94.74
0.62% kpi/parsers.py
2
82.61
-8.7% kpi/serializers/v2/asset_version.py
1
44.44
-5.56% kobo/apps/accounts/templatetags/get_provider_appname.py
1
86.11
-2.78% kobo/apps/openrosa/apps/logger/fields.py
1
92.31
-7.69% kobo/apps/user_reports/utils/migrations.py
1
67.95
-1.28% kpi/authentication.py
1
57.89
-2.63% kpi/db_routers.py
1
72.73
-4.55% kpi/urls/__init__.py
Jobs
ID Job ID Ran Files Coverage
1 29344763700.1 14 Jul 2026 03:22PM UTC 889
49.6
2 29344763700.2 14 Jul 2026 03:22PM UTC 889
44.44
3 29344763700.3 14 Jul 2026 03:24PM UTC 889
53.01
4 29344763700.4 14 Jul 2026 03:25PM UTC 891
54.27
5 29344763700.5 14 Jul 2026 03:26PM UTC 891
50.94
6 29344763700.6 14 Jul 2026 03:26PM UTC 891
66.77
7 29344763700.7 14 Jul 2026 03:26PM UTC 891
45.8
8 29344763700.8 14 Jul 2026 03:27PM UTC 889
59.01
9 29344763700.9 14 Jul 2026 03:28PM UTC 893
69.08
10 29344763700.10 14 Jul 2026 03:28PM UTC 891
60.17
Source Files on build 29344763700
  • Tree
  • List 893
  • Changed 2
  • Source Changed 0
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • 4af1758f on github
  • Prev Build on main (#29334126027)
  • Next Build on main (#29344749533)
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