Uh oh!
There was an error while loading. Please reload this page.
added support for generation-based query and delete of blobs. - #1435
added support for generation-based query and delete of blobs.#1435tsinha wants to merge 14 commits into
Conversation
googlebot
commented
Feb 1, 2016
Thanks for your pull request. It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA). 📝 Please visit https://cla.developers.google.com/ to sign. Once you've signed, please reply here (e.g.
|
tsinha
commented
Feb 1, 2016
I signed the CLA as Vital Labs, Inc. |
This comment was marked as spam.
This comment was marked as spam.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
This comment was marked as spam.
This comment was marked as spam.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
This comment was marked as spam.
This comment was marked as spam.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
This comment was marked as spam.
This comment was marked as spam.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
This comment was marked as spam.
This comment was marked as spam.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
dhermes
commented
Feb 1, 2016
@tsinha You can ignore the AppVeyor failure for Updating @jgeewax What should be done about matching his signature of the CLA with his GitHub handle? |
tsinha
commented
Feb 1, 2016
I'll look at the blob level methods and make sure everything works with the bucket level query, or refactor as you suggested if needed. I'll post an update shortly. |
googlebot
commented
Feb 1, 2016
CLAs look good, thanks! |
…I paths. added generation support to blob.delete and blob.exists.
tsinha
commented
Feb 2, 2016
@dhermes I looked over and fixed blob.exists and blob.delete. Still unsure about adding generation param directly into blob.path It doesn't seem as clean as having the api_request create the appropriate paths via blob.path and query_params at the bucket level. Otherwise, I think this PR should be ready to go. |
dhermes
commented
Feb 3, 2016
@tsinha the generation is required to be in the path, since it uniquely defines the object if specified.
|
tsinha
commented
Feb 3, 2016
@dhermes Thanks for the feedback. Can you help me brainstorm how to reconcile the way in which api_requests are made with embedding the generation query parameter at the blob level? This confounds my current WIP, which will enable the renaming of blobs while preserving versions, since the 'copyTo' API end-point requires another query param ('sourceGeneration') to copy the right version. If we move generation into blob.path, I'd end up with something like the following: But I may not be thinking it through completely... any advice you have would be helpful. |
dhermes
commented
Feb 3, 2016
I think you've just thought about it more than I had 😀 However, I'd still rather special case You could also leave |
…l to help with generation based queries of blobs. also added version-based blob copying and renaming. fixed a typo in _helpers.py.
tsinha
commented
Feb 4, 2016
@dhermes I've added a new blob.path_with_params function to alleviate some of the checking at the bucket level: here and here. I've also got a working version of the copy_blob and rename_blob functions with versioning support here and here. I changed the API for copy_blob a little to fit into the existing rename_blob logic... that is, if versioned copy is enabled, copy_blob returns a tuple of two lists that contain the old and new blobs... rename_blobs takes the old_blobs list from this tuple and deletes them, and then returns the new_blobs list. If versioning is not enabled, then copy_blobs's return parameters are unchanged from the existing API. What do you think about this approach? I can add testing around this if it looks reasonable. |
dhermes
commented
Feb 5, 2016
@tsinha Sorry for the review delay. I'm traveling and won't have a chance to look at this until next Monday. (I feel bad, sorry for the negative experience.) |
tsinha
commented
Feb 5, 2016
No worries... I look forward to your feedback next week. Safe travels. |
| params = {} | ||
| if self.generation is not None: | ||
| params = {'generation': self.generation} | ||
This comment was marked as spam.
This comment was marked as spam.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
This comment was marked as spam.
This comment was marked as spam.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.
tsinha
commented
Feb 29, 2016
@dhermes I have not forgotten about this. Tied up with some other stuff and will get back to this ASAP. |
dhermes
commented
Feb 29, 2016
Thanks for the update |
dhermes
commented
Jun 30, 2017
@tillahoffmann There have been lots of changes to Peeking at the code, at least the |
tillahoffmann
commented
Jul 1, 2017
@dhermes, thanks for the update. Do you have any recommendations on how to access md5 and crc32c hashes given a generation number from python? |
dhermes
commented
Jul 1, 2017
Sure thing. Here is a somewhat icky hack (but it'll work for now). For a file with multiple versions: If you >>>fromgoogle.cloudimportstorage>>>>>>client=storage.Client()
>>>bucket=client.bucket('some-bucket')
>>>blob_normal=bucket.blob('file.txt')
>>>blob_normal.reload()
>>>blob_normal._properties
{u'bucket': u'some-bucket',
u'contentType': u'text/plain',
u'crc32c': u'JcxYOQ==',
u'etag': u'CLH7moCB59QCEAE=',
u'generation': u'1498875135704497',
u'id': u'some-bucket/file.txt/1498875135704497',
u'kind': u'storage#object',
u'md5Hash': u'F/IyVDfyzIWJW12F0xO6+Q==',
u'mediaLink': u'https://www.googleapis.com/download/storage/v1/b/some-bucket/o/file.txt?generation=1498875135704497&alt=media',
u'metageneration': u'1',
u'name': u'file.txt',
u'selfLink': u'https://www.googleapis.com/storage/v1/b/some-bucket/o/file.txt',
u'size': u'1672',
u'storageClass': u'MULTI_REGIONAL',
u'timeCreated': u'2017-07-01T02:12:15.663Z',
u'timeStorageClassUpdated': u'2017-07-01T02:12:15.663Z',
u'updated': u'2017-07-01T02:12:15.663Z'}However, if you manually patch >>>fromgoogle.cloud.storage.blobimport_quote>>>>>>GENERATION='1498874876972049'>>>>>>defreload(self, client=None):
... client=self._require_client(client)
... query_params= {'projection': 'noAcl', 'generation': GENERATION}
... api_response=client._connection.api_request(
... method='GET', path=self.path, query_params=query_params,
... _target_object=self)
... self._set_properties(api_response)
...
>>>>>>blob_patched=bucket.blob('file.txt')
>>>blob_patched.reload=reload.__get__(blob_patched)
>>>blob_patched._properties
{u'bucket': u'some-bucket',
u'contentType': u'text/plain',
u'crc32c': u'MO9tZQ==',
u'etag': u'CJGY64SA59QCEAE=',
u'generation': u'1498874876972049',
u'id': u'some-bucket/file.txt/1498874876972049',
u'kind': u'storage#object',
u'md5Hash': u'zPc9wCyNcKGiYV3ijiB2iw==',
u'mediaLink': u'https://www.googleapis.com/download/storage/v1/b/some-bucket/o/file.txt?generation=1498874876972049&alt=media',
u'metageneration': u'1',
u'name': u'file.txt',
u'selfLink': u'https://www.googleapis.com/storage/v1/b/some-bucket/o/file.txt',
u'size': u'1635',
u'storageClass': u'MULTI_REGIONAL',
u'timeCreated': u'2017-07-01T02:07:56.965Z',
u'timeDeleted': u'2017-07-01T02:12:15.704Z',
u'timeStorageClassUpdated': u'2017-07-01T02:07:56.965Z',
u'updated': u'2017-07-01T02:07:56.965Z'} |
Hi If there are any outstanding issues remaining, feel free to re-open (or open a new issue). |
…tform/python-docs-samples#1435) * remove face detection samples * update docstring * linter * linter
Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
* deps: remove upper bound on packaging dependency Towards #1435 * install prerelease version of packaging * bump minimum packaging version Co-authored-by: Anthonios Partheniou <partheniou@google.com>
🤖 I have created a release *beep* *boop* --- ## [3.1.0](https://togithub.com/googleapis/python-storage/compare/v3.0.0...v3.1.0) (2025-02-27) ### Features * Add api_key argument to Client constructor ([#1441](https://togithub.com/googleapis/python-storage/issues/1441)) ([c869e15](https://togithub.com/googleapis/python-storage/commit/c869e15ec535a0aa50029d30b6a3ce64ff119b5f)) * Add Bucket.move_blob() for HNS-enabled buckets ([#1431](https://togithub.com/googleapis/python-storage/issues/1431)) ([24c000f](https://togithub.com/googleapis/python-storage/commit/24c000fb7b9f576e6d6c6ec5733f3971fe133655)) --- This PR was generated with [Release Please](https://togithub.com/googleapis/release-please). See [documentation](https://togithub.com/googleapis/release-please#release-please).
Small modifications to get_blob and delete_blob to handle generation ids when querying buckets that have versioning enabled.