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

kobotoolbox / kpi / 22778573038
81%
master: 76%

Build:
Build:
LAST BUILD BRANCH: dev-1815-groups-serviceproviderconfig-endpoints
DEFAULT BRANCH: master
Ran 06 Mar 2026 07:59PM UTC
Jobs 2
Files 894
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

06 Mar 2026 07:24PM UTC coverage: 82.134% (+0.01%) from 82.123%
22778573038

push

github

web-flow
feat(metadata): add `ExtraProjectMetadataField` model DEV-1523 (#6789)

### đŸ—’ī¸ Checklist

1. [X] run linter locally
2. [X] update developer docs (API, README, inline, etc.), if any
3. [X] for user-facing doc changes create a Zulip thread at `#Support
Docs Updates`, if any
4. [X] draft PR with a title `<type>(<scope>)<!>: <title> DEV-1234`
5. [X] assign yourself, tag PR: at least `Front end` and/or `Back end`
or `workflow`
6. [X] fill in the template below and delete template comments
7. [X] review thyself: read the diff and repro the preview as written
8. [X] open PR & confirm that CI passes & request reviewers, if needed
9. [ ] delete this section before merging

### đŸ“Ŗ Summary
Add the `ExtraProjectMetadataField` model to support customizable
project metadata on private servers.

### 👀 Preview steps
There are no changes visible in the UI, validate these changes through
creating a model in the shell.

2. â„šī¸ Run migrations: `python manage.py migrate kpi`
3. Open the Django shell
5. đŸŸĸ [on PR] Test a successful creation of the model:
```
from kpi.models import ExtraProjectMetadataField
field = ExtraProjectMetadataField(
    name="donor_id", 
    type="text", 
    label={"default": "Donor ID"}
)
field.full_clean()
field.save()
print(f"Created: {field.name}")
```
7. Test validation failure:
```
try:
    bad_field = ExtraProjectMetadataField(name="sector", type="single_select")
    bad_field.full_clean() # This triggers the clean() method
except Exception as e:
    print(f"Caught expected error: {e}")
```
8. đŸŸĸ Should output this error: `{'options': ['Options are required for
select fields.']}`

7536 of 11616 branches covered (64.88%)

27 of 28 new or added lines in 2 files covered. (96.43%)

28926 of 35218 relevant lines covered (82.13%)

1.62 hits per line

New Missed Lines in Diff

Lines Coverage ∆ File
1
96.3
kpi/models/extra_project_metadata_field.py
Jobs
ID Job ID Ran Files Coverage
1 22778573038.1 06 Mar 2026 07:59PM UTC 892
79.82
2 22778573038.2 06 Mar 2026 08:05PM UTC 894
82.09
Source Files on build 22778573038
  • Tree
  • List 894
  • Changed 1
  • Source Changed 0
  • Coverage Changed 1
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • 4d94f62e on github
  • Prev Build on main (#22776046063)
  • Next Build on main (#22778670892)
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