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

kobotoolbox / kpi / 27785128445
82%
master: 76%

Build:
Build:
LAST BUILD BRANCH: main
DEFAULT BRANCH: master
Ran 18 Jun 2026 07:52PM UTC
Jobs 9
Files 887
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

18 Jun 2026 07:47PM UTC coverage: 81.588% (-0.02%) from 81.606%
27785128445

push

github

web-flow
feat(projectViews): creating Project Views with organizations besides countries DEV-2209 (#7138)

### 📣 Summary
Added the capability for server admins to define Project Views based on
organization uid's (Teams), while continuing to support the existing
country-based filtering approach.

### 📖 Description
* Introduced uid_organizations field to ProjectView to store
comma-separated organization uids, defaulting to * (that represents "all
teams") and added this field to the serializer class, the admin list
display
* Implemented `get_uid_organizations()` method for processing and
stripping white spaces from the UID list.
* Updated get_project_view_user_permissions_for_asset logic to include
an intersecting query matching the asset owner's organization against
the `ProjectView.uid_organizations` list.
* Refactored _get_regional_queryset to evaluate and filter the query
sets depending on whether the asset owner or the target user is a member
of any of the specified organizations (using
organizations_organization). If uid_organizations contains *, it behaves
like the original logic without enforcing organizational filtering
* Included basic unit tests for project views filters and permissions
code

### 👀 Preview steps
1. Go to the admin screen for project views
2. Create a new project view and specify organization uids separated by
commas
3. Go to the main screen and select the project view
5. 🟢 It should only show assets from the selected organizations

9060 of 12305 branches covered (73.63%)

15 of 27 new or added lines in 4 files covered. (55.56%)

7043 existing lines in 232 files now uncovered.

29782 of 36503 relevant lines covered (81.59%)

5.1 hits per line

Uncovered Changes

Lines Coverage ∆ File
10
45.6
-1.9% kobo/apps/project_views/views.py
2
91.43
-8.57% kpi/utils/project_views.py

Coverage Regressions

Lines Coverage ∆ File
312
0.0
-91.23% kobo/apps/openrosa/apps/viewer/pandas_mongo_bridge.py
226
26.4
-63.48% kpi/serializers/v2/asset_permission_assignment.py
209
19.15
-51.99% kobo/apps/openrosa/libs/utils/export_tools.py
206
0.0
-86.19% kobo/apps/openrosa/libs/utils/briefcase_client.py
188
27.78
-61.44% kpi/views/v2/data.py
187
64.3
-29.54% kpi/serializers/v2/asset.py
185
14.34
-66.31% kobo/apps/subsequences/tasks.py
166
30.61
-56.46% kobo/apps/subsequences/models.py
159
58.79
-29.12% kobo/apps/openrosa/libs/utils/logger_tools.py
150
40.73
-54.55% kobo/apps/organizations/serializers.py
146
40.69
-21.58% kpi/deployment_backends/openrosa_backend.py
126
31.44
-64.95% kobo/apps/subsequences/actions/automatic_bedrock_qual.py
126
19.9
-64.29% kobo/apps/subsequences/utils/versioning.py
124
35.69
-48.63% kobo/apps/subsequences/actions/base.py
110
29.95
-53.14% kobo/apps/subsequences/serializers.py
107
15.7
-47.98% kobo/apps/superuser_stats/tasks.py
98
61.89
-24.05% kpi/views/v2/asset.py
91
19.51
-73.98% kobo/apps/subsequences/actions/qual.py
87
0.0
-87.88% kobo/apps/openrosa/libs/utils/backup_tools.py
87
29.29
-62.14% kpi/serializers/v2/asset_file.py
86
26.12
-64.18% kobo/apps/trash_bin/utils/trash.py
81
0.0
-93.1% kobo/apps/stripe/serializers.py
77
61.86
-35.81% kpi/permissions.py
75
0.0
-41.9% kobo/apps/stripe/views.py
71
20.58
-29.22% kobo/apps/subsequences/integrations/google/google_translate.py
70
37.21
-40.7% kpi/serializers/current_user.py
69
57.23
-41.57% kobo/apps/organizations/views.py
68
41.03
-43.59% kobo/apps/organizations/admin/organization_user.py
66
33.33
-59.46% kobo/apps/openrosa/apps/viewer/views.py
66
31.62
-56.41% kpi/serializers/v2/export_task.py
66
26.85
-61.11% kpi/serializers/v2/paired_data.py
64
27.2
-51.2% kobo/apps/stripe/utils/subscription_limits.py
64
22.35
-75.29% kobo/apps/subsequences/actions/mixins.py
63
0.0
-51.64% kobo/apps/stripe/models.py
63
34.55
-57.27% kpi/views/v2/paired_data.py
62
27.87
-50.82% kobo/apps/project_ownership/tasks.py
62
19.77
-24.03% kobo/apps/subsequences/integrations/google/google_transcribe.py
60
34.67
-40.0% kobo/apps/project_ownership/utils.py
58
0.0
-90.63% kobo/apps/openrosa/libs/data/query.py
56
27.68
-50.0% kpi/utils/models.py
56
42.86
-53.33% kpi/views/v2/environment.py
50
0.0
-47.17% kobo/apps/openrosa/apps/logger/tasks.py
49
51.59
-38.89% kobo/apps/openrosa/apps/logger/signals.py
49
28.57
-43.75% kobo/apps/openrosa/apps/logger/views.py
44
78.25
7.08% kpi/models/import_export_task.py
43
31.43
-40.95% kobo/apps/organizations/admin/organization.py
42
46.47
-15.61% kobo/apps/openrosa/apps/viewer/models/data_dictionary.py
42
23.29
-57.53% kobo/apps/openrosa/libs/utils/image_tools.py
42
0.0
-79.25% kobo/apps/user_reports/tasks.py
42
49.47
-44.21% kpi/views/v2/asset_permission_assignment.py
41
20.21
-43.62% kobo/apps/stripe/utils/billing_dates.py
41
32.81
-64.06% kobo/apps/trash_bin/utils/account.py
41
52.56
-19.07% kpi/renderers.py
41
43.7
-30.37% kpi/views/v2/asset_snapshot.py
40
58.33
-16.67% kobo/apps/openrosa/apps/viewer/models/parsed_instance.py
40
0.0
-40.82% kobo/apps/openrosa/apps/viewer/xls_writer.py
40
61.21
-24.24% kobo/apps/organizations/models.py
40
51.72
-45.98% kobo/apps/subsequences/views.py
39
23.08
-30.0% kobo/apps/openrosa/apps/viewer/tasks.py
39
65.19
-8.4% kpi/deployment_backends/base_backend.py
38
37.14
-54.29% kobo/apps/organizations/permissions.py
36
24.49
-73.47% kobo/apps/openrosa/apps/logger/import_tools.py
35
24.11
-31.25% kobo/apps/openrosa/apps/logger/utils/instance.py
35
77.61
-17.41% kobo/apps/project_ownership/models/transfer.py
33
49.51
-32.04% kobo/apps/openrosa/apps/viewer/models/export.py
33
66.4
-24.8% kpi/models/paired_data.py
32
50.75
-47.76% kpi/views/v2/asset_export_settings.py
31
26.42
-58.49% kobo/apps/trash_bin/utils/project.py
30
58.33
-25.0% kobo/apps/openrosa/apps/logger/models/attachment.py
28
30.14
-19.18% kobo/apps/openrosa/libs/utils/viewer_tools.py
27
83.0
-12.5% kpi/utils/xml.py
27
45.16
-43.55% kpi/views/v2/attachment.py
26
27.5
-65.0% kpi/serializers/v2/attachment_delete.py
25
31.11
-55.56% kpi/serializers/v2/data.py
24
33.33
-66.67% kobo/apps/openrosa/libs/utils/decorators.py
24
59.72
-33.33% kobo/apps/project_ownership/serializers/invite.py
24
27.63
-31.58% kobo/apps/subsequences/integrations/google/rate_limit.py
24
71.43
-28.57% kpi/serializers/v2/service_usage.py
24
59.32
-40.68% kpi/views/v2/export_task.py
23
27.4
-31.51% kobo/apps/trackers/utils.py
23
40.48
-54.76% kpi/serializers/v2/deployment.py
22
57.62
-9.05% kpi/filters.py
22
50.98
-43.14% kpi/serializers/v2/asset_snapshot.py
22
55.56
-40.74% kpi/serializers/v2/permission.py
21
48.84
-48.84% kobo/apps/trash_bin/models/project.py
21
38.33
-35.0% kpi/serializers/v2/asset_export_settings.py
20
29.67
-21.98% kobo/apps/openrosa/libs/utils/user_auth.py
19
26.0
-38.0% kobo/apps/service_health/views.py
19
0.0
-65.52% kobo/apps/stripe/admin.py
19
47.73
-43.18% kobo/apps/trash_bin/models/attachment.py
19
51.28
-48.72% kobo/apps/trash_bin/tasks/__init__.py
19
72.2
-7.8% kpi/utils/mongo_helper.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
16.22
-45.95% kobo/apps/openrosa/apps/logger/utils/database_query.py
17
44.12
-50.0% kpi/utils/rename_xls_sheet.py
16
0.0
-100.0% kobo/apps/service_health/test_service_health.py
16
31.82
-36.36% kobo/apps/stripe/utils/limit_enforcement.py
16
67.95
-20.51% kpi/authentication.py
16
75.0
-9.48% kpi/models/asset_snapshot.py
16
28.0
-64.0% kpi/utils/audio_duration.py
15
31.71
-36.59% kobo/apps/openrosa/apps/logger/xform_fs.py
15
81.64
-5.86% kobo/apps/openrosa/apps/logger/xform_instance_parser.py
15
28.57
-71.43% kobo/apps/trash_bin/utils/signals.py
15
55.81
-34.88% kpi/backends.py
14
47.62
-8.33% kobo/apps/openrosa/apps/main/models/meta_data.py
14
44.0
-56.0% kobo/apps/openrosa/libs/utils/model_tools.py
14
41.3
-15.22% kobo/apps/subsequences/integrations/google/base.py
13
61.11
-36.11% kobo/apps/organizations/tasks.py
13
60.53
-34.21% kobo/apps/organizations/utils.py
13
45.71
-37.14% kobo/apps/user_reports/seralizers.py
13
75.94
-6.77% kpi/paginators.py
13
40.0
-43.33% kpi/serializers/v2/asset_counts.py
13
79.05
-10.48% kpi/utils/object_permission.py
13
33.33
-48.15% kpi/utils/prerequisite_migration_checker.py
13
30.43
-56.52% kpi/utils/private_storage.py
12
44.9
-24.49% kobo/apps/openrosa/apps/logger/utils/counters.py
12
67.02
-12.77% kobo/apps/openrosa/libs/utils/middleware.py
12
35.0
-60.0% kobo/apps/stripe/utils/import_management.py
12
43.48
-52.17% kobo/apps/subsequences/throttling.py
12
57.14
-42.86% kobo/apps/subsequences/utils/supplement_data.py
11
54.84
-35.48% kobo/apps/openrosa/libs/authentication.py
11
0.0
-44.0% kobo/apps/stripe/signals.py
11
85.29
-5.88% kpi/models/asset_file.py
11
70.18
-10.53% kpi/utils/mailer.py
10
77.32
-5.15% kobo/apps/openrosa/apps/logger/models/instance.py
10
80.28
-14.08% kobo/apps/project_ownership/models/invite.py
10
39.58
-20.83% kobo/apps/subsequences/prompts.py
10
78.85
-19.23% kpi/serializers/v2/user.py
10
47.69
-15.38% kpi/utils/hash.py
10
63.33
-33.33% kpi/views/v2/asset_version.py
9
77.49
-4.71% kobo/apps/openrosa/apps/logger/models/xform.py
9
0.0
-29.03% kobo/apps/stripe/utils/manual_subscription.py
9
41.18
-52.94% kpi/utils/viewset_mixins.py
9
79.17
-18.75% kpi/views/v2/asset_file.py
8
0.0
-100.0% kobo/apps/service_health/test_service_health_minimal.py
8
0.0
-100.0% kobo/apps/stripe/urls.py
8
91.21
14.94% kpi/models/asset.py
8
77.78
31.31% kpi/password_validation.py
8
85.71
-11.43% kpi/utils/cache.py
7
0.0
-100.0% kobo/apps/stripe/apps.py
7
50.0
-31.82% kobo/apps/trash_bin/mixins/admin.py
7
53.33
-46.67% kobo/apps/trash_bin/utils/attachment.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
0.0
-100.0% kobo/apps/stripe/exceptions.py
6
0.0
-37.5% kobo/apps/stripe/utils/view_utils.py
6
68.42
-31.58% kobo/apps/subsequences/schemas.py
6
58.46
-4.62% kobo/apps/trash_bin/admin.py
6
62.96
-22.22% kobo/apps/trash_bin/models/account.py
6
80.0
-20.0% kpi/serializers/v2/tag.py
6
65.87
13.49% kpi/utils/autoname.py
5
84.21
-8.77% kobo/apps/openrosa/apps/logger/exceptions.py
5
72.22
-27.78% kobo/apps/openrosa/apps/logger/models/daily_xform_submission_counter.py
5
75.0
-25.0% kobo/apps/openrosa/apps/logger/models/monthly_xform_submission_counter.py
5
0.0
-38.46% kobo/apps/openrosa/apps/main/context_processors.py
5
57.69
-19.23% kobo/apps/subsequences/integrations/google/locations.py
5
65.22
-21.74% kobo/apps/trash_bin/tasks/project.py
5
82.35
-14.71% kobo/apps/user_reports/views.py
5
92.92
13.35% kpi/mixins/object_permission.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
45.45
-36.36% kobo/apps/openrosa/koboform/__init__.py
4
72.22
-22.22% kobo/apps/subsequences/actions/automatic_google_transcription.py
4
72.22
-22.22% kobo/apps/subsequences/actions/automatic_google_translation.py
4
33.33
-14.81% kobo/apps/subsequences/audit.py
4
83.33
-16.67% kobo/apps/trackers/models.py
4
68.18
-18.18% kobo/apps/trash_bin/tasks/account.py
4
37.5
-5.0% kobo/apps/trash_bin/tasks/attachment.py
4
76.19
-19.05% kpi/serializers/v2/user_asset_subscription.py
4
20.0
-80.0% kpi/utils/placeholders.py
4
39.76
-3.61% kpi/utils/storage.py
3
95.76
-2.54% kobo/apps/openrosa/apps/api/viewsets/xform_submission_api.py
3
80.0
-20.0% kobo/apps/openrosa/apps/viewer/signals.py
3
58.06
-9.68% kobo/apps/organizations/admin/organization_owner.py
3
42.86
-4.29% kobo/apps/project_ownership/admin.py
3
85.71
-8.57% kobo/apps/project_views/models/assignment.py
3
75.0
-25.0% kobo/apps/superuser_stats/admin.py
3
86.27
-5.88% kpi/context_processors.py
3
87.61
-1.77% kpi/exceptions.py
3
70.0
-30.0% kpi/fields/serializer_method_file.py
3
80.0
-20.0% kpi/serializers/v2/attachment_audio_duration.py
3
78.57
-10.71% kpi/utils/submission.py
3
30.67
-4.0% kpi/utils/two_database_configuration_checker.py
3
74.76
-1.94% kpi/utils/usage_calculator.py
3
75.0
-25.0% kpi/views/v2/open_rosa.py
3
84.21
-15.79% kpi/views/v2/permission.py
2
52.9
9.42% kobo/apps/audit_log/models.py
2
95.12
-4.88% kobo/apps/subsequences/exceptions.py
2
42.86
-28.57% kobo/apps/subsequences/utils/time.py
2
83.33
-6.67% kobo/urls.py
2
60.26
-2.56% kpi/deployment_backends/kc_access/utils.py
2
92.73
0.0% kpi/signals.py
2
96.55
-2.3% kpi/utils/asset_content_analyzer.py
2
93.94
2.02% kpi/utils/django_orm_helper.py
2
85.92
14.08% kpi/utils/sluggify.py
2
88.24
-11.76% kpi/views/v2/service_usage.py
1
78.57
44.05% kobo/apps/audit_log/base_views.py
1
69.85
11.03% kobo/apps/audit_log/signals.py
1
0.0
-100.0% kobo/apps/openrosa/apps/logger/constants.py
1
91.3
-4.35% kobo/apps/openrosa/libs/permissions.py
1
94.12
-1.18% kobo/apps/openrosa/libs/renderers/renderers.py
1
68.75
-6.25% kobo/apps/openrosa/libs/utils/string.py
1
45.6
-1.9% kobo/apps/project_views/views.py
1
84.27
50.56% kobo/apps/reports/report_data.py
1
87.5
-12.5% kobo/apps/service_health/middleware.py
1
88.89
-11.11% kobo/apps/subsequences/actions/manual_qual.py
1
92.31
-7.69% kobo/apps/user_reports/utils/migrations.py
1
70.73
-2.44% kpi/admin.py
1
96.67
-3.33% kpi/fields/kpi_uid.py
1
75.0
-25.0% kpi/fields/read_only.py
1
82.61
-4.35% kpi/fields/relative_prefix_hyperlinked_related.py
1
80.95
-4.76% kpi/fields/writable_json.py
1
66.67
-8.33% kpi/mixins/validation_password_permission.py
1
91.3
-4.35% kpi/serializers/v2/asset_version.py
1
72.73
-4.55% kpi/urls/__init__.py
1
62.5
-12.5% kpi/utils/datetime.py
1
81.25
-6.25% kpi/utils/drf_exceptions.py
1
50.0
-50.0% kpi/utils/export_task.py
1
75.0
-25.0% kpi/utils/gravatar_url.py
1
91.43
-8.57% kpi/utils/project_views.py
1
94.12
0.0% kpi/utils/strings.py
1
84.62
-7.69% kpi/versioning.py
1
55.56
-2.22% kpi/views/current_user.py
1
42.5
-2.5% kpi/views/__init__.py
1
93.33
-6.67% kpi/views/v2/asset_usage.py
Jobs
ID Job ID Ran Files Coverage
1 27785128445.1 18 Jun 2026 07:52PM UTC 883
44.91
2 27785128445.2 18 Jun 2026 07:53PM UTC 883
53.52
3 27785128445.3 18 Jun 2026 07:55PM UTC 885
54.8
4 27785128445.4 18 Jun 2026 07:56PM UTC 885
66.6
5 27785128445.5 18 Jun 2026 08:00PM UTC 883
59.54
6 27785128445.6 18 Jun 2026 08:06PM UTC 883
50.16
7 27785128445.7 18 Jun 2026 08:10PM UTC 885
51.52
8 27785128445.8 18 Jun 2026 08:15PM UTC 887
68.95
9 27785128445.9 18 Jun 2026 09:17PM UTC 885
60.72
Source Files on build 27785128445
  • Tree
  • List 887
  • Changed 8
  • Source Changed 0
  • Coverage Changed 8
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • 84f81fe3 on github
  • Prev Build on main (#27771031570)
  • Next Build on main (#27815650762)
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