Mocker library of Google Cloud Storage with local filesystem mounting.
Project description
cloud-storage-mocker
Mocker library of Google Cloud Storage Python client with local filesystem mounting.
Install
For package users:
pip install cloud-storage-mocker
For package developers:
git clone git@github.com:odashi/cloud-storage-mocker
cd cloud-storage-mocker
python -m venv venv
source venv/bin/activate
pip install -e '.[dev]'
How the package works
This library provides patch
context manager, which replaces following classes on the
google-cloud-storage
package:
Client
Bucket
Blob
patch
takes a list of Mount
objects, which represent mappings between bucket names
and directories on the local filesystem.
Each Mount
has Boolean configs readable
and writable
to control read/write
permissions to the mounted buckets.
A canonical use-case of this package is writing unit tests to check the behavior of the code that works with Google Cloud Storage:
import pathlib
import google.cloud.storage # type: ignore[import]
from cloud_storage_mocker import Mount
from cloud_storage_mocker import patch as gcs_patch
def test_something(tmp_path: pathlib.Path) -> None:
# Creates two temporary directories for readable/writable buckets.
src_dir = tmp_path / "src"
dest_dir = tmp_path / "dest"
src_dir.mkdir()
dest_dir.mkdir()
# A sample file on the readable bucket.
(src_dir / "hello.txt").write_text("Hello.")
# Mounts directories. Empty list is allowed if no actual access is required.
with gcs_patch(
[
Mount("readable", src_dir, readable=True),
Mount("writable", dest_dir, writable=True),
],
):
client = google.cloud.storage.Client()
# Reads a blob.
blob = client.bucket("readable").blob("hello.txt")
assert blob.download_as_text() == "Hello."
# Writes a blob.
blob = client.bucket("writable").blob("world.txt")
blob.upload_from_string("World.")
# Checks if the file is written appropriately.
assert (dest_dir / "world.txt").read_text() == "World."
Patched methods
Methods listed below have specialized behavior to mount the local filesystem.
Other methods are mapped to MagicMock
.
Client()
Client.bucket()
Bucket()
Bucket.blob()
Blob()
Blob.download_to_file()
Blob.download_to_filename()
Blob.download_as_bytes()
Blob.download_as_string()
Blob.download_as_text()
Blob.upload_from_file()
Blob.upload_from_filename()
Blob.upload_from_string()
Caution
This library is basically provided for writing unit tests. DO NOT use this library on any code on the production.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for cloud_storage_mocker-0.2.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 95c17198750d08350377823906b759bb577a437e2bc46b51325bda38486ca293 |
|
MD5 | 7685e6848305d10368215046e961c9e2 |
|
BLAKE2b-256 | 08b3870cf2fb62278e282405e96a011424af1c0ebfc7c7b076e1d97fa75e6c71 |
Hashes for cloud_storage_mocker-0.2.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 84f1f9a5a1bdcc6266f3ffee958c21fe65a0861ca759747397098307c7e66757 |
|
MD5 | 398312988a7ca1dbc722f4e6affab78e |
|
BLAKE2b-256 | b0beeea1b3f11d93b7064411e7d5202aa9cac343c45f9abeaecc897d2b9ce0b3 |