Skip to main content

Google Cloud Storage blob storage for Guillotina 7.

Example config.json entry:

...
"cloud_storage": "guillotina_gcloudstorage.interfaces.IGCloudFileField",
"cloud_datamanager": "redis",
"load_utilities": {
    "gcloud": {
        "provides": "guillotina_gcloudstorage.interfaces.IGCloudBlobStore",
        "factory": "guillotina_gcloudstorage.storage.GCloudBlobStore",
        "settings": {
            "uniform_bucket_level_access": True,
            "json_credentials": "/path/to/credentials.json",
            "bucket": "name-of-bucket",
            "project": "name-of-project",
            "bucket_name_format": "{container}-foobar{delimiter}{base}",
            "bucket_labels": {
                "foo": "bar"
            }
        }
    }
}
...

Getting started with development

Using pip (requires Python 3.10 or newer):

python3.10 -m venv .
./bin/pip install -e .[test]
pre-commit install

Running tests

The test suite uses a Google Cloud Storage bucket. Configure these environment variables before running it:

export GCLOUD_CREDENTIALS=/absolute/path/to/google-cloud-service-account.json
export GCLOUD_BUCKET=name-of-test-bucket
export GCLOUD_PROJECT=name-of-project
make tests

7.0.0 (2026-05-22)

  • Drop Python 3.7, 3.8, and 3.9 support. CI now validates Python 3.10, 3.11, and 3.12.

  • Require Guillotina 7.

  • Upgrade runtime dependencies for the Python 3.10+ stack, including google-cloud-storage, google-auth, aiohttp, and backoff.

  • Replace legacy oauth2client service account credentials with google-auth.

  • Remove unused or legacy setup dependencies: gcloud, ujson, protobuf, setuptools, pytest-runner, and tests_require.

  • Upgrade test and lint tooling: pytest, pytest-aiohttp, pytest-docker-fixtures, flake8, mypy, mypy-zope, isort, and black.

  • Generate copied Google Cloud Storage object names from the destination storage manager instead of the source storage manager.

6.0.3 (2023-03-21)

  • Add delete method

6.0.2 (2021-05-05)

  • Allow to delete multiattachment fields [bloodbare]

6.0.1 (2021-02-04)

  • Get get access token in executor [vangheem]

  • Use IFileNameGenerator adapter to generate file name

  • black, isort reformat [qiwn]

6.0.0 (2020-07-29)

  • Moving to Guillotina 6

  • Added github actions

  • Linting: black and isort [lferran]

5.0.14 (2020-06-08)

  • Handle Conflict error when creating bucket. This can happen when multiple pods are attempting to create bucket at the same time. [vangheem]

5.0.13 (2020-02-20)

  • Allow configuring uniform bucket level access by setting uniform_bucket_level_access [vangheem]

  • Do not update bucket labels if they have not changed [vangheem]

5.0.12 (2020-01-02)

  • Add missing range_supported [vangheem]

5.0.11 (2020-01-02)

  • Add range support [vangheem]

  • Apply black to code

5.0.10 (2019-12-20)

  • Handle 404 on delete [vangheem]

5.0.9 (2019-12-20)

  • Handle 401 error [vangheem]

5.0.8 (2019-12-20)

  • Handle 410 errors from google on upload [vangheem]

5.0.7 (2019-12-19)

  • More logging info [vangheem]

5.0.6 (2019-12-19)

  • More error handling and retries [vangheem]

5.0.5 (2019-12-18)

  • No backoff on iter_data [vangheem]

5.0.4 (2019-12-18)

  • More backoff decorators to address intermittent API issues [vangheem]

5.0.3 (2019-11-08)

  • Fix GCloudFileManager.append() [qiwn]

5.0.2 (2019-11-01)

  • Be able to import types [vangheem]

5.0.1 (2019-08-30)

  • Fix get_client to not be called in executor because context vars do not work in task vars [vangheem]

5.0.0 (2019-06-23)

  • Upgrade to work with latest guillotina >= 5 [vangheem]

2.0.12 (2019-06-18)

  • restrict guillotina version

2.0.11 (2019-06-06)

  • fix release

2.0.10 (2019-06-06)

  • Reuse aiohttp client session [vangheem]

2.0.9 (2019-05-07)

  • Fix creating buckets with different versions of google cloud storage [vangheem]

2.0.8 (2019-04-12)

  • Fix bug creating buckets [vangheem]

2.0.7 (2019-04-09)

  • Add get_client and _create_bucket methods to GCloudBlobStore [vangheem]

2.0.6 (2019-03-21)

  • Adding location parameter [bloodbare]

2.0.5 (2019-03-08)

  • Add bucket_name_format and bucket_labels settings [vangheem]

2.0.4 (2019-01-17)

  • Credentials compatiblity [bloodbare]

2.0.3 (2019-01-15)

  • Raise 404 if object no longer available [vangheem]

2.0.2 (2019-01-15)

  • Implement exists for head requests [vangheem]

2.0.1 (2018-12-07)

  • Use quote_plus when starting multi part upload. Fixes issues with + in content ids not working.

  • No need to run get_access_token in executor [lferran]

2.0.0 (2018-06-07)

  • Upgrade to guillotina 4 [vangheem] [vangheem]

1.1.7 (2018-06-07)

  • Pin version of guillotina [vangheem]

1.1.6 (2018-06-07)

  • Handle 404 when copying files [vangheem]

1.1.5 (2018-05-12)

  • bump

1.1.4 (2018-05-12)

  • More strict object checks [vangheem]

1.1.3 (2018-03-20)

  • Another logging fix [vangheem]

1.1.2 (2018-03-20)

  • Fix logging issue [vangheem]

1.1.1 (2018-03-19)

  • Be able to use iter_data with custom uri [vangheem]

1.1.0 (2018-03-19)

  • Upgrade to latest guillotina file management to simplify code-base [vangheem]

1.0.36 (2018-03-09)

  • Fix saving previous file [vangheem]

1.0.35 (2018-03-01)

  • Change when we store previous file info [vangheem]

1.0.34 (2018-02-22)

  • Customize more of the download [vangheem]

1.0.33 (2018-02-22)

  • Be able to specify uri to download [vangheem]

1.0.32 (2018-02-21)

  • Tweak IFileCleanup [vangheem]

1.0.31 (2018-02-20)

  • Implement IFileCleanup [vangheem]

1.0.30 (2018-01-02)

  • Retry google cloud exceptions [vangheem]

1.0.29 (2017-10-30)

  • Handle file size being zero for download reporting [vangheem]

1.0.28 (2017-10-12)

  • Make sure to register write on object for behavior files [vangheem]

1.0.27 (2017-10-11)

  • Return NotFound response when no file found on context [vangheem]

1.0.26 (2017-10-04)

  • Handle google cloud error when deleting existing files [vangheem]

1.0.25 (2017-10-03)

  • Check type instead of None for existing value [vangheem]

1.0.24 (2017-10-02)

  • Use latest guillotina base classes [vangheem]

  • Use field context if set [vangheem]

1.0.23 (2017-10-02)

  • Add copy_cloud_file method [vangheem]

1.0.22 (2017-09-29)

  • Limit request limit cache size to a max of the CHUNK_SIZE [vangheem]

1.0.21 (2017-09-29)

  • Cache data on request object in case of request conflict errors [vangheem]

1.0.20 (2017-09-27)

  • Do not timeout when downloading for gcloud [vangheem]

  • Make sure to use async with syntax with aiohttp requests [vangheem]

1.0.19 (2017-09-11)

  • Make sure CORS headers are applied before we start sending a download result [vangheem]

1.0.18 (2017-09-11)

  • Be able to override disposition of download [vangheem]

1.0.17 (2017-09-01)

  • Implement save_file method [vangheem]

1.0.16 (2017-08-15)

  • Provide iter_data method [vangheem]

1.0.15 (2017-06-15)

  • Guess content type if none provided when downloading file [vangheem]

1.0.14 (2017-06-14)

  • Be able to customize content disposition header of file download [vangheem]

1.0.13 (2017-06-12)

  • Remove GCloudBlobStore._service property [vangheem]

  • Change GCloudBlobStore._bucket to GCloudBlobStore._bucket_name [vangheem]

  • Remove GCloudBlobStore._client property [vangheem]

  • Rename GCloudBlobStore.bucket property to coroutine:GCloudBlobStore.get_bucket_name() [vangheem]

  • Make everything async and use executor if necessary so we don’t block [vangheem]

1.0.12 (2017-05-19)

  • Provide iterate_bucket method [vangheem]

1.0.11 (2017-05-19)

  • provide method to rename object [vangheem]

  • Use keys that use the object’s oid [vangheem]

  • Make delete async [vangheem]

1.0.10 (2017-05-02)

  • Convert bytes to string for content_type [vangheem]

1.0.9 (2017-05-02)

  • contentType was renamed to content_type [vangheem]

1.0.8 (2017-05-02)

  • Make sure to register the object for writing to the database [vangheem]

1.0.7 (2017-05-01)

  • Fix reference to _md5hash instead of _md5 so serializing works [vangheem]

1.0.6 (2017-05-01)

  • Fix bytes serialization issue [vangheem]

1.0.5 (2017-05-01)

  • Fix import error [vangheem]

1.0.4 (2017-05-01)

  • Do not inherit from BaseObject [vangheem]

1.0.3 (2017-05-01)

  • Allow GCloudFile to take all arguments [vangheem]

1.0.2 (2017-04-26)

  • Need to be able to provide loop param in constructor of utility [vangheem]

1.0.1 (2017-04-25)

  • Compatibility fixes with aiohttp 2 [vangheem]

1.0.0 (2017-04-24)

  • initial release

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

guillotina_gcloudstorage-7.0.0.tar.gz (20.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

guillotina_gcloudstorage-7.0.0-py3-none-any.whl (18.5 kB view details)

Uploaded Python 3

File details

Details for the file guillotina_gcloudstorage-7.0.0.tar.gz.

File metadata

  • Download URL: guillotina_gcloudstorage-7.0.0.tar.gz
  • Upload date:
  • Size: 20.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.4

File hashes

Hashes for guillotina_gcloudstorage-7.0.0.tar.gz
Algorithm Hash digest
SHA256 7381011de93755119b8e50240551d315f85866d2163403b79beebf4d86ebf3f9
MD5 23a71ebfecab9b3a18b8b40b86a49601
BLAKE2b-256 be43fcc2f5e5c4fcf6ae77f2a4b3d0c16e4ba752ca1b86796899438031380f8e

See more details on using hashes here.

File details

Details for the file guillotina_gcloudstorage-7.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for guillotina_gcloudstorage-7.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b060194b3d990680873ba7493efafba6f7b6927ccb826eb2c8722c37c22545cc
MD5 cf48b8da84407934a7cdf2fa11c209df
BLAKE2b-256 fb3e746b7f9be7734503ebb1ef02d18a14ad77a2946538939dc627d3742bc05b

See more details on using hashes here.

Release history Release notifications | RSS feed

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page