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

kobotoolbox / kpi / 25781600149
82%
master: 76%

Build:
Build:
LAST BUILD BRANCH: dev-1379-clean-up-unused-code
DEFAULT BRANCH: master
Ran 13 May 2026 06:10AM UTC
Jobs 7
Files 913
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

13 May 2026 06:05AM UTC coverage: 81.702% (-0.02%) from 81.721%
25781600149

push

github

web-flow
feat(metadata): add extra project metadata inputs to project settings DEV-1529  (#6895)

### đŸ“Ŗ Summary
Superuser-defined custom project metadata fields are now supported on
the frontend and appear in the project settings.

### 👀 Preview steps

1. â„šī¸ Have several different types (text, single, multi select) of
"Extra Project Metadata Fields" in the Django admin. Use options and
labels with translations, as in:
Label:
```json
{"pt": "Cor preferida", "default": "Favorite color"}
```

Options:
```json
[{"name": "red", "label": {"pt": "Vermelho", "default": "Red"}}, {"name": "blue", "label": "Blue"}, {"name": "green", "label": "Green"}]
```

3. Log into a regular user account
4. Create a new project
5. đŸŸĸ [on PR] notice that each custom metadata field is present in the
Project Settings modal and takes up one line in the form
6. Play around and ensure that validation and translations work
correctly
7. đŸŸĸ Ensure that all the regular project metadata fields are rendering
correctly

---------

Co-authored-by: James Kiger <68701146+jamesrkiger@users.noreply.github.com>
Co-authored-by: Paulo Amorim <pauloamorimbr@gmail.com>
Co-authored-by: Copilot <copilot@github.com>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

9146 of 12374 branches covered (73.91%)

30153 of 36906 relevant lines covered (81.7%)

3.94 hits per line

Coverage Regressions

Lines Coverage ∆ File
193
57.89
-21.44% kpi/utils/query_parser/canopy_autogenerated_parser/__init__.py
117
61.73
-16.14% kpi/models/import_export_task.py
97
29.35
-48.26% kobo/apps/project_ownership/models/transfer.py
77
0.0
-77.78% kpi/password_validation.py
70
23.4
-74.47% kpi/utils/xlsform_preprocessors/kobomatrix_handler.py
67
59.08
-1.96% kpi/serializers/v2/asset.py
63
32.52
-51.22% kobo/apps/accounts/forms.py
50
83.83
-6.68% kpi/models/asset.py
50
35.5
-21.5% kpi/utils/xml.py
44
60.05
-4.96% kpi/deployment_backends/base_backend.py
39
40.36
-0.33% kpi/deployment_backends/openrosa_backend.py
39
35.2
-31.2% kpi/models/paired_data.py
37
38.83
-35.92% kpi/utils/usage_calculator.py
36
58.92
-2.97% kpi/views/v2/asset.py
35
18.75
-72.92% kpi/utils/xlsform_preprocessors/koborank_handler.py
30
44.29
-41.43% kpi/utils/cache.py
29
64.65
-29.29% kpi/utils/django_orm_helper.py
29
21.95
-70.73% kpi/utils/xlsform_preprocessors/koboscore_handler.py
27
0.0
-72.97% kobo/apps/accounts/adapter.py
27
16.67
-18.0% kobo/apps/project_ownership/utils.py
26
71.72
-17.93% kpi/utils/query_parser/query_parser.py
24
40.0
-53.33% kpi/fields/jsonschema_form_field.py
23
60.41
-9.64% kpi/mixins/formpack_xlsform_utils.py
23
52.38
-13.49% kpi/utils/autoname.py
23
51.06
-48.94% kpi/views/v2/authorized_application_user.py
22
31.58
-38.6% kpi/utils/mailer.py
21
0.0
-70.0% kobo/apps/audit_log/tasks.py
21
23.08
-53.85% kpi/utils/asset_translation_utils.py
21
40.58
-30.43% kpi/utils/data_exports.py
21
26.47
-61.76% kpi/utils/export_cleanup.py
18
35.56
-40.0% kpi/fields/file.py
18
64.66
-15.52% kpi/paginators.py
18
37.84
-48.65% kpi/serializers/v2/create_user.py
18
37.93
-62.07% kpi/views/token.py
17
46.99
-10.24% kobo/apps/organizations/views.py
14
67.27
-25.45% kpi/signals.py
13
37.14
-18.57% hub/utils/i18n.py
13
52.87
-9.2% kpi/tasks.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
71.83
-14.08% kpi/utils/sluggify.py
11
70.41
-4.59% kobo/apps/openrosa/apps/logger/models/instance.py
11
91.36
-2.79% kpi/mixins/object_permission.py
11
28.09
1.69% kpi/serializers/v2/asset_permission_assignment.py
11
69.76
-1.95% kpi/utils/mongo_helper.py
11
55.56
-40.74% kpi/utils/xlsform_preprocessors/base_handlers.py
9
47.62
-21.43% kobo/apps/markdownx_uploader/models.py
9
67.61
-12.68% kobo/apps/project_ownership/models/invite.py
9
35.29
-52.94% kpi/serializers/v1/authorized_application_user.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
8
52.94
-41.18% kpi/utils/strings.py
7
67.74
-22.58% kobo/apps/data_collectors/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
7
82.26
-11.29% kpi/utils/kobo_to_xlsform.py
7
80.0
15.24% kpi/utils/object_permission.py
6
30.19
-3.77% kobo/apps/openrosa/apps/api/permissions.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
6
50.0
-11.9% kpi/utils/urls.py
5
64.98
16.18% 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
6.03% kpi/models/asset_snapshot.py
5
75.0
-20.83% kpi/models/authorized_application.py
5
24.1
-6.02% kpi/utils/storage.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
4
94.25
-2.3% kpi/utils/asset_content_analyzer.py
4
33.33
-66.67% kpi/utils/chunked_delete.py
4
86.67
-10.0% kpi/utils/project_views.py
4
64.29
-14.29% kpi/utils/submission.py
3
78.43
-5.88% hub/models/extra_user_detail.py
3
59.39
-1.82% kobo/apps/organizations/models.py
3
88.57
-8.57% kobo/apps/project_views/models/project_view.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
85.84
-1.77% kpi/exceptions.py
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
20.3% kpi/filters.py
1
67.74
-3.23% kpi/mixins/standardize_searchable_field.py
1
92.0
-2.0% kpi/models/asset_version.py
1
72.73
-4.55% kpi/utils/bugfix.py
Jobs
ID Job ID Ran Files Coverage
1 25781600149.1 13 May 2026 06:10AM UTC 909
52.14
2 25781600149.2 13 May 2026 06:12AM UTC 911
53.34
3 25781600149.3 13 May 2026 06:12AM UTC 911
55.01
4 25781600149.4 13 May 2026 06:13AM UTC 909
59.66
5 25781600149.5 13 May 2026 06:13AM UTC 909
52.44
6 25781600149.6 13 May 2026 06:14AM UTC 911
53.75
7 25781600149.7 13 May 2026 06:15AM UTC 913
67.96
Source Files on build 25781600149
  • Tree
  • List 913
  • Changed 5
  • Source Changed 0
  • Coverage Changed 5
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • 97d78606 on github
  • Prev Build on main (#25759521868)
  • Next Build on main (#25853494831)
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