Skip to content

Releases: kobotoolbox/kpi

2.025.43e

28 Nov 17:07
97862a0

Choose a tag to compare

What's Changed

  • build: use latest version of Formpack to add big-image support DEV-1172 by @rajpatel24 in #6476
  • fix(submission): fix anonymous submission failures from KoboCollect DEV-1347 by @rajpatel24 in #6499

Full Changelog: 2.025.43d...2.025.43e

2.025.43d

21 Nov 14:18
c7498dc

Choose a tag to compare

What's changed

Bug Fixes (1)
  • submission: handle missing xml file with digest authentication (#6428)

    Prevent server errors when clients using Digest authentication send empty submission requests to the openrosa /<username>/submission endpoint.

Performance (2)
  • auditLogs: remove count from API response (#6489)

    Improve audit log performance by removing the expensive count
    calculation from the response.

    This change removes the count field from the audit logs API response
    because calculating the total number of documents is a major bottleneck
    on large datasets. The count query requires scanning the entire
    collection, significantly slowing down the endpoint. Clients still
    receive the paginated results as before, just without the heavy count
    operation.

  • make reversion_version table deletion faster (#6493)

    Improve background maintenance by making cleanup of the
    reversion_version table significantly faster.


Full Changelog: https://github.com/kobotoolbox/kpi/compare/2.025.43c..2.025.43d

2.025.43c

19 Nov 16:48
4ee8d57

Choose a tag to compare

What's changed

Bug Fixes (2)
  • account: delete account button wrongly displayed (#6483)

    Delete account button was wrongly being displayed on environments with
    the feature being disabled.

  • data table: correct order of NLP columns (#6478)

    Corrects sorting of data table columns to ensure NLP/QA supplemental
    data is placed after relevant questions.


Full Changelog: 2.025.43b...2.025.43c

2.025.43b

19 Nov 16:47

Choose a tag to compare

What's Changed

  • feat(celery): add dedicated worker for long-running tasks by @noliveleger in #6470
  • fix(api): make REST Services settings and sub_fields optional again DEV-1288 by @noliveleger in #6480

Full Changelog: 2.025.43a...2.025.43b

2.025.37g

17 Nov 16:49
fb8596c

Choose a tag to compare

For more information, please see https://github.com/kobotoolbox/kpi/releases/tag/2.025.37g

What's Changed

  • fix(api): make REST Services settings and sub_fields optional again

Full Changelog: 2.025.37f...2.025.37g

2.025.43a

14 Nov 15:51
a34bb9d

Choose a tag to compare

For more information, please see https://github.com/kobotoolbox/kpi/releases/tag/2.025.43a

What's Changed

Bug Fixes (2)
  • formbuilder: skip "add a condition" for 9 unhandled question types (#6468)

    In formbuilder, hide the not working "add a condition" button for 9
    affect question types - Select One, Select Many, Point, Photo, Audio,
    Video, Line, Area, Acknowledge.

  • formbuilder: validation criteria for Select question types (#6469)

    Fix UI for the validation criteria of question types Select One and
    Select Many.


Full Changelog: 2.025.43...2.025.43a

2.025.43

13 Nov 18:50
284c224

Choose a tag to compare

What's Changed

Features (23)
  • account: delete account UI (#6259)

    Add option to safely and irreverseably delete account to Account
    Settings → Profile. The change is hidden behind feature flag.

  • account: use env flag instead of feature flag for delete account banner (#6283)

  • api: add filtering and ordering support for /api/v2/user-reports endpoint (#6342)

    Adds robust filtering and ordering capabilities to the
    /api/v2/user-reports API endpoint, enabling users and admins to query
    large user datasets efficiently by date, usage metrics, and subscription
    attributes, all backed by the optimized materialized view for scalable
    performance on millions of records.

    This PR introduces the filtering and ordering layer for the
    /api/v2/user-reports endpoint, built on top of the existing
    materialized view (user_reports_userreportsmv) that aggregates
    user-level billing and usage data.

    Also, added targeted indexes in 0003_add_user_reports_mv_indexes.py on
    high-cardinality numeric and timestamp columns to support range queries
    without full table scans.

    Examples of usage:

    • Filter by username (case-insensitive, starts with):
      /api/v2/user-reports/?q=username__icontains:raj

    • Filter by email (case-insensitive, starts with):
      /api/v2/user-reports/?q=email:[email protected]

    • Filter by total storage bytes (greater than or equal to):
      /api/v2/user-reports/?q=service_usage__total_storage_bytes__gte:1

    • Filter by total storage bytes (less than or equal to):
      /api/v2/user-reports/?q=service_usage__total_storage_bytes__lte:1


    Part of #6243

  • billing: update addon copy (#6288)

    Updates copy describing addons on the addons page.

  • billing: bypass limit enforcement for submission edits (#6281)

    Bypasses restrictions on submissions based on usage limit enforcement
    when users are submitting edits.

  • constanceSettings: make self account deletion feature disabled by default (#6380)

  • dataCollectors: update enketo links when data collectors change (#6198)

    Create/update enketo links for data collectors when assigning data
    collectors to groups or rotating tokens.

  • dataCollectors: allow DCs access to read-only OpenRosa endpoints (#6258)

    Allow data collectors to view surveys in Enketo.

    Updates the OpenRosa endpoints to allow urls of the form
    /key/<token>/endpoint and provide the correct response if the data
    collector with the relevant token is part of a group that has access to
    the xform.

  • dataCollectors: allow data collectors to submit responses (#6328)

    Allow data collectors to add submissions to specified assets.

  • dataCollectors: improve Django Admin UX for data collector groups (#6337)

    Make data collector group management easier by adding autocomplete
    fields and a two-column selector for choosing projects.

  • dataCollectors: display collection client URLs in Django Admin (#6355)

    Show ready-to-use links for Enketo Express and KoboCollect on Data
    Collector pages in Django Admin

  • dataCollectors: change key to collector (#6365)

    Use "collector" instead of "key" for data collector URLs.

  • dataCollectors: cleanup admin UI (#6369)

    Minor improvements to the Django admin UI for data collectors and data
    collector groups.

    Order data collectors and data collector groups by date created in the
    list view. Also change the kobocat url "link" to plain text when in the
    edit view for a data collector to make it clear that it's not actually a
    link, just an example of the base url that Kobocat will use for this DC.

  • environment: use Constance setting to toggle user account deletion (#6280)

    Add a configurable flag ALLOW_SELF_ACCOUNT_DELETION to enable or
    disable user account deletion through the Constance admin.

  • massEmails: parameterize users query functions in mass emails app (#6279)

    Added custom parameters for users query functions in the mass emails app

    With the new model MassEmailQueryParam you can customize the parameters
    passed to the user query functions in the mass emails app. To do this
    successfully you have to check the function parameters names and their
    type hints. For now this only supports the types (int, float, str),
    which are easily converted. WARNING: If the value provided for the
    parameter can't be converted to the type, it will leave the parameter
    use the default value. All parameters MUST have a default value in case
    they are not customized in the MassEmailConfig instance.

  • projectHistoryLogs: add data collector group info to submissions (#6356)

    Add data collector group name and uid to project history logs when
    submissions are from data collectors.

  • usageLimits: conditional over usage limit error message (#6254)

    This PR implements a conditional error message based on the usage type
    for submissions failed due to account being over limit.

  • usageLimits: Check all users storage usage to get their ExceededLimitCounter's (#6267)

    A new long running process is added to backfill exceeded limits counters
    for storage usage type.

  • userReports: add /api/v2/user-reports/ endpoint for superusers (#6243)

    Add a new superuser-only endpoint, /api/v2/user-reports/, to access
    and filter all user usage data.

  • userReports: add extra_details with data related to removing users (#6453)

  • userReports: add organization website to API response (#6457)

    Add organization website to /api/v2/user-reports/ API response.

  • userReports: remove done_storage_limits_check from API response (#6461)

    Remove extra_details.data.done_storage_limits_check from
    /api/v2/user-reports/ response. This field is useless for the report.

  • userReports: add last_updated to API response (#6460)

    This PR exposes the latest snapshot update timestamp
    (BillingAndUsageSnapshot.date_modified) as last_updated in the
    /api/v2/user-reports/ endpoint.

Bug Fixes (43)
  • CI: pin darker dependency in CI (#6263)

    Pins version of darker used in GitHub CI for backend lint action.

  • account: disallow editing email if linked to social account (#6265)

  • account: clearing fields operated by Selects (#6340)

    Removing country, sector, gender, and organization type is possible
    again.

  • accountSettings: adjust delete banner message (#6302)

  • accountSettings: error handling in email section (#6350)

    Displays error in UI when changing email and API validates the proposed
    email as invalid.

  • accountSettings: change label (#6391)

  • accounts: block self-deletion when the account still owns data (#6334)

    Prevent users from deleting their own account if it still contains
    projects, collections, blocks, questions, templates, or other owned
    resources.

  • accounts: retain uid for placeholder users (#6452)

    Retain a user's uid when they are set to inactive (ie trashed with a
    placeholder).

  • api: Set all the required fields for service usage data schemas ([#6236](#623...

Read more

2.025.37f

06 Nov 19:36
4805001

Choose a tag to compare

What's Changed

Performance (1)
  • users: further optimize /api/v2/users list endpoint for large datasets (kpi#6450)

    Fix remaining performance issues on the /api/v2/users endpoint when handling very large datasets not covered by #6447.

Full Changelog: 2.025.37e...2.025.37f

2.025.37e

06 Nov 18:37
be3de51

Choose a tag to compare

What's changed

Bug Fixes (1)
  • openrosa: sync anonymous submission permission during deployment (kpi#6449)

    Ensure anonymous submission permission is correctly propagated to OpenRosa so Enketo doesn’t ask for login when anonymous collection is enabled.

Performance (1)
  • users: optimize /api/v2/users queryset for list endpoint (kpi#6447)

    Greatly improve performance of the /api/v2/users list endpoint to prevent timeouts and 502 errors.


Full Changelog: https://github.com/kobotoolbox/kpi/compare/2.025.37d..2.025.37e

2.025.37d

04 Nov 14:44
f8f980c

Choose a tag to compare

What's Changed

PR Description
kpi#6440 Fix error when loading data tables for submissions created before validation_statuses were added
kpi#6430 Ensure that submissions remain attributed to their original submitter even if the user account is deleted, and that the _submitted_by value continues to persist correctly during edits and bulk updates
kpi#6433 Fixes an issue where anonymous users received a 500 error when accessing the asset snapshots list endpoint. Anonymous requests now safely return an empty response instead of causing a server error
kpi#6435 Fixes a CI installation issue caused by an incompatibility between pip 25.3 and pip-tools 7.x.
kpi#6432 Allow superusers to see inactive users in API response
kpi#6431 Prevent submissions from being deleted when a user is removed by setting the user field to null instead
kpi#6421 Reverts the forced download behavior introduced in #6407 and allows safe file types (such as images, audio, and video) to open directly in the browser again, while keeping potentially unsafe files downloaded instead
kpi#6420 Prevent the media_file_name field from being overwritten when it already has a value.
kpi#6418 Improve how data responses with URLs and generators are displayed when viewed directly in the browser
kpi#6423 Fixes a server error in bulk update by handling None results gracefully
kpi#6412 Fixes a bug where org admins were no longer allowed to view projects or make submissions

Full Changelog: 2.025.37c...2.025.37d