DEV-14971: Python SDK storage-service compatibility unit tests#459
DEV-14971: Python SDK storage-service compatibility unit tests#459
Conversation
…ervice response shapes Audit confirms no client patches needed — storage-service produces the same response shapes Rainbow does: - /files/store: path/name/upload_type match what UploadDocument expects - indico-file:// URI construction/round-trip via CreateStorageURLs works - RetrieveStorageObject strips indico-file:// prefix correctly Tests mock at the HTTP level; no running service required. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
Storage migration freeze checkpoint (2026-04-15): PR remains under NOT MERGE policy, but is still failing from 2026-04-12. Requesting a CI rerun to refresh review evidence while keeping this PR unmerged. |
|
Correction: failing check context is publish_python_sdk-unit_tests. Please rerun this CI context for fresh freeze-period validation signal (PR remains NOT MERGE). |
|
Escalation: check context publish_python_sdk-unit_tests is still stale (last started 2026-04-12T00:02:54Z) after rerun request. Requesting CI run owners/maintainers to trigger a fresh Harness run so we can refresh freeze-period validation evidence. PR remains NOT MERGE. |
|
@goatrocks @Sung96kim @jacobmanderson @nicholas-lockhart @arsandhu and @IndicoDataSolutions/pr-be-indicodata-ai: targeted rerun request for stale Harness context publish_python_sdk-unit_tests (still on 2026-04-12T00:02:54Z). Please trigger/own a fresh run for freeze-period validation evidence. PR remains NOT MERGE. |
jacobmanderson
left a comment
There was a problem hiding this comment.
Blocking on the failing code-check path: the new storage tests depend on an ambient API token, so a clean tox run fails before the mocked storage calls execute. I reproduced the failure with uv run --extra test tox -e py313; the narrow uv run pytest path only passed because the ambient environment was more permissive.
- Jacob's AI Assistant
|
|
||
| @pytest.fixture | ||
| def cfg(): | ||
| return IndicoConfig(protocol="mock", host="mock") |
There was a problem hiding this comment.
These new storage tests still let IndicoConfig resolve an API token from the environment or ~/indico_api_token.txt. In a clean tox/code-check environment that does not provide INDICO_API_TOKEN, setup fails before the HTTP mocks run, which matches the currently failing publish_python_sdk-code_checks signal. Please pass a dummy token in the test configs, e.g. IndicoConfig(protocol="mock", host="mock", api_token="test-token"); the inline redirect test at line 237 needs the same treatment.
- Jacob's AI Assistant
|
Ran a clean local reproduction of the previously failing path on latest head ():\n\n- .pkg: _optional_hooks> python /home/chris/indico/indico-client-python/.venv/lib/python3.12/site-packages/pyproject_api/_backend.py True hatchling.build tests/unit/test_filters.py::test_filter PASSED =============================== warnings summary =============================== -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html |
|
Verification on latest head
I pushed |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
There are 2 total unresolved issues (including 1 from previous review).
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit a86cbd6. Configure here.
|
Pushed follow-up commit 92bd191 to address a reproducible code-check blocker:\n\n- Fixed 124 files already formatted violations in and .\n- Re-ran locally on the branch:\n - 104 files already formatted ✅\n - .pkg: _optional_hooks> python /home/chris/indico/indico-client-python/.venv/lib/python3.12/site-packages/pyproject_api/_backend.py True hatchling.build tests/unit/test_filters.py::test_filter PASSED =============================== warnings summary =============================== -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html |
|
Pushed follow-up commit
Current gate state after push: PR checks are re-running on the new head commit. |
|
Addressed Changes in commit
Validation:
|

Summary
/files/storereturnspath/name/upload_typematching exactly whatUploadDocumentexpects;indico-file://URI handling is unchangedUploadDocument,CreateStorageURLs, andRetrieveStorageObjectagainst theLegacyUploadResponseItemresponse shapeTest plan
test_upload_document_posts_to_storage_files_store— confirms POST target pathtest_upload_document_processes_path_name_upload_type— confirms response field mappingtest_upload_document_handles_multiple_files— multi-file upload batchtest_create_storage_urls_builds_indico_file_uris— URI construction from responsetest_create_storage_urls_round_trips_through_retrieve— round-trip URI → pathtest_retrieve_storage_object_strips_indico_file_scheme— path extractiontest_retrieve_storage_object_accepts_dict_with_url_key— dict input varianttest_retrieve_storage_object_fetches_content— end-to-end GET with mock responseAll 8 tests pass. No network required.
Part of DEV-14699 storage-service migration epic.
🤖 Generated with Claude Code
Note
Low Risk
Mostly adds tests and dev/test dependencies; runtime behavior is unchanged aside from potential CI/environment dependency resolution differences.
Overview
Adds HTTP-mocked unit tests to validate the SDK’s storage flows remain compatible with storage-service responses:
UploadDocumentPOSTs to/storage/files/storeand parsespath/name/upload_type,CreateStorageURLsbuildsindico-file:///storage…URIs, andRetrieveStorageObjectcorrectly converts those URIs to GET paths (including a redirect-following scenario).Adds a small unit test to ensure the
uv-dynamic-versioningrelease tag regex inpyproject.tomlmatches standard, prerelease, and.posttags.Updates dev/test tooling by expanding the
devdependency group (addspytest-asyncio,requests-mock,msgpack) and tweakingtox.inito installtomlion Python <3.11; includes a minor assertion formatting change in an integration gallery test.Reviewed by Cursor Bugbot for commit 5bb0cf9. Bugbot is set up for automated code reviews on this repo. Configure here.