kobotoolbox / kpi

kpi is the (frontend) server for KoboToolbox. It includes an API for users to access data and manage their forms, question library, sharing settings, create reports, and export data.
https://www.kobotoolbox.org
GNU Affero General Public License v3.0
126 stars 170 forks source link

Tolerate submissions that lack `<formhub><uuid>` #4957

Closed jnm closed 1 month ago

jnm commented 1 month ago

Checklist

  1. [ ] If you've added code that should be tested, add tests
  2. [ ] If you've changed APIs, update (or create!) the documentation
  3. [x] Ensure the tests pass
  4. [x] Make sure that your code lints and that you've followed our coding style
  5. [x] Write a title and, if necessary, a description of your work suitable for publishing in our release notes
  6. [ ] Mention any related issues in this repository (as #ISSUE) and in other repositories (as kobotoolbox/other#ISSUE)
  7. [ ] Open an issue in the docs if there are UI/UX changes

Description

Fixes a 500 error when trying to access submission data in projects where one or more submissions has non-standard XML.

Notes

These are accepted by KoboCAT but were breaking the submission API because the logic to rewrite attachment URLs required formhub/uuid to be present in the JSON submission representation.

This change tries first to read the form UUID from the KoboCAT API response stored at the asset level (deployment.backend_response) and, if that's somehow missing, only then does it attempt to read the UUID from the submission.