Skip to main content

bucket-locker

Concurrency-safe local copies of Google Cloud Storage (GCS) blobs in Python.

Why?

You need this library if:

  • You are using a GCS bucket.
  • Your system, app, or service downloads files from that bucket, works on local copies, and then uploads them back.

What it does

bucket-locker helps you:

  • Avoid data races
    • between accesses to the same local copy (e.g. multiple threads/tasks), and
    • between different local copies of the same blob (e.g. multiple processes/instances).
  • Avoid redundant I/O
    • skip downloads if your local copy is already in sync,
    • skip uploads if the blob hasn’t changed.

Installation

pip install bucket-locker

Usage

import asyncio
from pathlib import Path
from bucket_locker import Locker, BlobNotFound

async def main():
    locker = Locker(bucket_name="my-bucket", local_dir=Path("/tmp/bucket"))

    # Safe read–write access
    try:
        async with locker.owned_local_copy("data.json") as handle:
            # work on the local file
            data = handle.path.read_text()
            handle.path.write_text(data + "\nextra line")
            # changes will be uploaded automatically on exit
    except BlobNotFound:
        print("Blob not found in GCS")

    # Safe read-only access: does not lock the blob
    async with locker.readonly_local_copy("config.yaml") as handle:
        config = handle.path.read_text()
        print(config)

asyncio.run(main())

License

This project is licensed under the MIT License. See the LICENSE file for details.

Metadata

Release files for bucket-locker 1.0.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for bucket-locker 1.0.8
File Size Uploaded
bucket_locker-1.0.8.tar.gz 11.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for bucket-locker 1.0.8
File Interpreter ABI Platform
bucket_locker-1.0.8-py3-none-any.whl Python 3 none any Details

Total release size: 19.6 kB

Release files / bucket_locker-1.0.8.tar.gz

Download URL bucket_locker-1.0.8.tar.gz
Size 11.9 kB
Tags Source
SHA-256 checksum
How to use checksums
fb05144c7bcb9f623c544fba1b67b7f1e3dfac7e3585e7a2c2a40572618f3eb4
BLAKE2b-256 checksum
How to use checksums
d1c7877692ecf2adc5e8545a860bb6759059bffba544cb1d243b9944fcea09c1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release files / bucket_locker-1.0.8-py3-none-any.whl

Download URL bucket_locker-1.0.8-py3-none-any.whl
Size 7.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d383dc837ee0140f6533330655b48904560bb19edea95dbef01f27f5eace9657
BLAKE2b-256 checksum
How to use checksums
05748fa390ad6a08c78b49da6dc9c76f59aca0d06e2cce9b1b7aed4a8170d8d1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.2

Release history Release notifications | RSS feed

This release

1.0.8 This release

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page