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
Release files for guillotina-gcloudstorage 7.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| guillotina_gcloudstorage-7.0.0.tar.gz | 20.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| guillotina_gcloudstorage-7.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 38.8 kB
Release files / guillotina_gcloudstorage-7.0.0.tar.gz
| Download URL | guillotina_gcloudstorage-7.0.0.tar.gz |
|---|---|
| Size | 20.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7381011de93755119b8e50240551d315f85866d2163403b79beebf4d86ebf3f9
|
|
BLAKE2b-256 checksum How to use checksums |
be43fcc2f5e5c4fcf6ae77f2a4b3d0c16e4ba752ca1b86796899438031380f8e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.4
|
Release files / guillotina_gcloudstorage-7.0.0-py3-none-any.whl
| Download URL | guillotina_gcloudstorage-7.0.0-py3-none-any.whl |
|---|---|
| Size | 18.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b060194b3d990680873ba7493efafba6f7b6927ccb826eb2c8722c37c22545cc
|
|
BLAKE2b-256 checksum How to use checksums |
fb3e746b7f9be7734503ebb1ef02d18a14ad77a2946538939dc627d3742bc05b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.4
|