fix(storage): skip downloading blobs whose name contain ":" eg: C: D: etc when application runs in Windows.#1774
Conversation
…load_many_to_path
… in download_many_to_path
Summary of ChangesHello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request enhances the robustness of path handling within the storage client, specifically addressing an edge case with Windows full paths containing colons. It introduces a dedicated Highlights
Changelog
Activity
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
There was a problem hiding this comment.
Code Review
This pull request introduces an InvalidPathError exception to handle Windows paths with colons in the transfer_manager.py file. The _resolve_path function now raises this exception when encountering such paths on Windows, and the download_many_to_path function catches this exception, issues a warning, and skips the download. Unit tests have been added to verify the new functionality. The review comments suggest further opportunities to improve code readability, error messaging, and test robustness.
| def test__resolve_path_raises_invalid_path_error_on_windows(): | ||
| from google.cloud.storage.transfer_manager import _resolve_path, InvalidPathError | ||
|
|
||
| with mock.patch("os.name", "nt"): | ||
| with pytest.raises(InvalidPathError) as exc_info: | ||
| _resolve_path("C:\\target", "C:\\target\\file.txt") | ||
| assert "cannot be downloaded into" in str(exc_info.value) |
There was a problem hiding this comment.
The assertion message cannot be downloaded into is too specific and duplicates the implementation detail. It would be better to assert a more general message indicating that the path is invalid, which is less prone to break if the implementation changes.
with pytest.raises(InvalidPathError) as exc_info:
_resolve_path("C:\\target", "C:\\target\\file.txt")
assert "Invalid path" in str(exc_info.value)|
/gcbrun(948de5f) |
":" eg: C: D: etc when application runs in Windows.
PR created by the Librarian CLI to initialize a release. Merging this PR will auto trigger a release. Librarian Version: v1.0.2-0.20251119154421-36c3e21ad3ac Language Image: us-central1-docker.pkg.dev/cloud-sdk-librarian-prod/images-prod/python-librarian-generator@sha256:8e2c32496077054105bd06c54a59d6a6694287bc053588e24debe6da6920ad91 <details><summary>google-cloud-storage: 3.10.0</summary> ## [3.10.0](v3.9.0...v3.10.0) (2026-03-18) ### Features * [Bucket Encryption Enforcement] add support for bucket encryption enforcement config (#1742) ([2a6e8b0](2a6e8b0)) ### Perf Improvments * [Rapid Buckets Reads] Use raw proto access for read resumption strategy (#1764) ([14cfd61](14cfd61)) * [Rapid Buckets Benchmarks] init mp pool & grpc client once, use os.sched_setaffinity (#1751) ([a9eb82c](a9eb82c)) * [Rapid Buckets Writes] don't flush at every append, results in bad perf (#1746) ([ab62d72](ab62d72)) ### Bug Fixes * [Windows] skip downloading blobs whose name contain `":" ` eg: `C:` `D:` etc when application runs in Windows. (#1774) ([5581988](5581988)) * [Path Traversal] Prevent path traversal in `download_many_to_path` (#1768) ([700fec3](700fec3)) * [Rapid Buckets] pass token correctly, '&' instead of ',' (#1756) ([d8dd1e0](d8dd1e0)) </details>
skip downloading blobs whose name contain
":"eg:C:D:etc when application runs in Windows.