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

kobotoolbox / kpi / 29028964036
81%
master: 76%

Build:
Build:
LAST BUILD BRANCH: hugo/dev-2094-harden-lrm-0024-qpaths
DEFAULT BRANCH: master
Ran 09 Jul 2026 03:23PM UTC
Jobs 4
Files 891
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

09 Jul 2026 03:18PM UTC coverage: 61.232% (-20.2%) from 81.434%
29028964036

push

github

web-flow
fix(supplement): add UUID query fallback to supplement view DEV-2320 (#7222)

### 📣 Summary
Use the fallback query in the supplement view to avoid throwing a 404
error for submissions that didn't get the rootUuid backfilled in mongo.

### 📖 Description
In `kpi/views/v2/data.py`, the method `DataViewSet.supplement` I
replaced the strict `meta/rootUuid` MongoDB query with the method
`_get_submission_by_id_or_root_uuid` that searches both `meta/rootUuid`
and `meta/instanceID` as a fallback. Also added logic to safely inject
the matched uuid into `submission['meta/rootUuid']` if it was missing.

### 👀 Preview steps
Hard to preview, but you could manually remove the `meta/rootUuid` from
a mongodb instance record and then request the supplement endpoint to
test the fallback:

1. Have a deployed asset and submit a record to it.

2. Execute in shell_plus the following snippet to manually strip the
`meta/rootUuid` from MongoDB for that submission:

```
   from django.conf import settings
   
   asset = Asset.objects.get(uid='ASSET_UID')
   submission = list(asset.deployment.get_submissions(asset.owner))[0]
   instance_id = submission['_uuid']
   mongo_id = submission['_id']

   settings.MONGO_DB.instances.update_one(
       {'_id': mongo_id}, 
       {'$unset': {'meta/rootUuid': ""}}
   )
   
   print(f"Use this Instance ID for the URL: {instance_id}")
```
3. Request the supplement endpoint using the instanceID printed above.
You can do this via curl, or by navigating in the browser to:
`https://kf.local.kbtdev.org/api/v2/assets/{YOUR_ASSET_UID}/data/{INSTANCE_ID}/supplement/`.

5. Before this PR the endpoint would return a 404 Not Found because it
strictly queried meta/rootUuid. After this PR it will return a 200 OK
because it successfully falls back to matching the provided UUID against
`meta/instanceID`

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

6192 of 12480 branches covered (49.62%)

1 of 37 new or added lines in 2 files covered. (2.7%)

1666 existing lines in 66 files now uncovered.

22692 of 37059 relevant lines covered (61.23%)

1.93 hits per line

Uncovered Changes

Lines Coverage ∆ File
30
0.0
kobo/apps/long_running_migrations/jobs/0028_sync_mongo_root_uuid.py
6
37.13
-42.28% kpi/views/v2/data.py

Coverage Regressions

Lines Coverage ∆ File
196
26.4
-55.06% kpi/serializers/v2/asset_permission_assignment.py
188
64.26
-29.47% kpi/serializers/v2/asset.py
130
37.13
-42.28% kpi/views/v2/data.py
97
61.89
-23.51% kpi/views/v2/asset.py
87
29.29
-62.14% kpi/serializers/v2/asset_file.py
66
26.85
-61.11% kpi/serializers/v2/paired_data.py
63
34.55
-57.27% kpi/views/v2/paired_data.py
60
31.62
-51.28% kpi/serializers/v2/export_task.py
56
27.68
-50.0% kpi/utils/models.py
53
42.86
-50.48% kpi/views/v2/environment.py
42
49.47
-44.21% kpi/views/v2/asset_permission_assignment.py
41
43.7
-30.37% kpi/views/v2/asset_snapshot.py
32
50.75
-47.76% kpi/views/v2/asset_export_settings.py
30
37.21
-17.44% kpi/serializers/current_user.py
27
83.0
-2.5% kpi/utils/xml.py
26
27.5
-65.0% kpi/serializers/v2/attachment_delete.py
25
31.11
-55.56% kpi/serializers/v2/data.py
24
59.32
-40.68% kpi/views/v2/export_task.py
23
40.48
-54.76% kpi/serializers/v2/deployment.py
23
71.43
-27.38% kpi/serializers/v2/service_usage.py
22
50.98
-43.14% kpi/serializers/v2/asset_snapshot.py
22
55.56
-40.74% kpi/serializers/v2/permission.py
21
38.33
-35.0% kpi/serializers/v2/asset_export_settings.py
19
33.33
-63.33% kpi/utils/paired_data.py
19
51.06
-40.43% kpi/views/v2/import_task.py
19
49.25
-28.36% kpi/views/v2/user.py
18
48.65
-48.65% kpi/views/v2/attachment_audio_duration.py
17
44.12
-50.0% kpi/utils/rename_xls_sheet.py
16
28.0
-64.0% kpi/utils/audio_duration.py
16
62.9
-25.81% kpi/views/v2/attachment.py
13
40.0
-43.33% kpi/serializers/v2/asset_counts.py
13
79.05
-10.48% kpi/utils/object_permission.py
13
30.43
-56.52% kpi/utils/private_storage.py
11
47.69
-16.92% kpi/utils/hash.py
10
78.85
-19.23% kpi/serializers/v2/user.py
10
63.33
-33.33% kpi/views/v2/asset_version.py
9
77.07
-2.93% kpi/utils/mongo_helper.py
9
79.17
-18.75% kpi/views/v2/asset_file.py
8
85.71
-5.71% kpi/utils/cache.py
7
52.94
-41.18% kpi/serializers/v2/reports.py
7
61.9
-14.29% kpi/utils/urls.py
7
74.07
-25.93% kpi/views/v2/attachment_delete.py
7
75.86
-24.14% kpi/views/v2/tag.py
6
80.0
-20.0% kpi/serializers/v2/tag.py
6
65.87
13.49% kpi/utils/autoname.py
5
62.07
9.2% kpi/tasks.py
5
76.0
-20.0% kpi/views/v2/asset_submission_counts.py
5
61.54
-38.46% kpi/views/v2/logout.py
5
73.91
-21.74% kpi/views/v2/user_asset_subscription.py
4
76.19
-19.05% kpi/serializers/v2/user_asset_subscription.py
3
80.0
-20.0% kpi/serializers/v2/attachment_audio_duration.py
3
78.57
-10.71% kpi/utils/submission.py
3
75.0
-25.0% kpi/views/v2/open_rosa.py
3
84.21
-15.79% kpi/views/v2/permission.py
2
96.55
-2.3% kpi/utils/asset_content_analyzer.py
2
91.43
-5.71% kpi/utils/project_views.py
2
85.92
14.08% kpi/utils/sluggify.py
2
88.24
-11.76% kpi/views/v2/service_usage.py
1
91.3
-4.35% kpi/serializers/v2/asset_version.py
1
50.0
-50.0% kpi/utils/export_task.py
1
75.0
-25.0% kpi/utils/gravatar_url.py
1
94.12
11.76% kpi/utils/strings.py
1
74.76
0.97% kpi/utils/usage_calculator.py
1
84.62
-7.69% kpi/versioning.py
1
55.56
-2.22% kpi/views/current_user.py
1
93.33
-6.67% kpi/views/v2/asset_usage.py
Jobs
ID Job ID Ran Files Coverage
1 29028964036.1 09 Jul 2026 03:23PM UTC 889
49.59
2 29028964036.2 09 Jul 2026 03:23PM UTC 889
44.42
3 29028964036.3 09 Jul 2026 03:23PM UTC 889
52.93
4 29028964036.4 09 Jul 2026 03:25PM UTC 891
45.79
Source Files on build 29028964036
  • Tree
  • List 891
  • Changed 278
  • Source Changed 0
  • Coverage Changed 278
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • ff9e6efe on github
  • Prev Build on release/2.026.27 (#28865799815)
  • Next Build on release/2.026.27 (#29029441589)
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