Skip to content

Commit

Permalink
samples: add cloud client samples from python-docs-samples (googleapi…
Browse files Browse the repository at this point in the history
…s#626)

* Renaming storage gcloud samples folder. (#418)

* Add gcloud-based storage usage samples. (#419)

* Refactor cloud client storage samples. (#421)

* Add more storage samples for the cloud client libraries. (#432)

* Auto-update dependencies. (#456)

* Fix import order lint errors

Change-Id: Ieaf7237fc6f925daec46a07d2e81a452b841198a

* Add storage acl samples

Change-Id: Ib44f9bb42bf0c0607e64905a26369f06ea5fb231

* Address review comments

Change-Id: I94973a839f38ef3d1ec657c3c79f666eca56728b

* Fix lint issue

Change-Id: Ie9cf585303931f200a763d691906ad56221105fd

* Auto-update dependencies. (#540)

* Auto-update dependencies. (#542)

* Move to google-cloud (#544)

* Add new "quickstart" samples (#547)

* Quickstart tests (#569)

* Add tests for quickstarts
* Update secrets

* Add basic readme generator (#580)

* Generate readmes for most service samples (#599)

* Update samples to support latest Google Cloud Python (#656)

* Edited upload/download to perform encryption properly (#667)

* Storage Encryption Key Rotation Sample using Veneer + Tests (#672)

* Auto-update dependencies. (#715)

* Adds storage Pub/Sub notification polling tutorial (#875)

* Remove cloud config fixture (#887)

* Remove cloud config fixture

* Fix client secrets

* Fix bigtable instance

* Auto-update dependencies. (#914)

* Auto-update dependencies.

* xfail the error reporting test

* Fix lint

* Re-generate all readmes

* Add bucket-level IAM samples (#919)

* Add bucket-level IAM samples
* Address review comments

* Auto-update dependencies. (#927)

* Fix README rst links (#962)

* Fix README rst links

* Update all READMEs

* Auto-update dependencies. (#1004)

* Auto-update dependencies.

* Fix natural language samples

* Fix pubsub iam samples

* Fix language samples

* Fix bigquery samples

* Add bucket label samples (#1045)

* Auto-update dependencies. (#1055)

* Auto-update dependencies.

* Explicitly use latest bigtable client

Change-Id: Id71e9e768f020730e4ca9514a0d7ebaa794e7d9e

* Revert language update for now

Change-Id: I8867f154e9a5aae00d0047c9caf880e5e8f50c53

* Remove pdb. smh

Change-Id: I5ff905fadc026eebbcd45512d4e76e003e3b2b43

* Auto-update dependencies. (#1057)

* Auto-update dependencies. (#1073)

* Auto-update dependencies. (#1093)

* Auto-update dependencies.

* Fix storage notification poll sample

Change-Id: I6afbc79d15e050531555e4c8e51066996717a0f3

* Fix spanner samples

Change-Id: I40069222c60d57e8f3d3878167591af9130895cb

* Drop coverage because it's not useful

Change-Id: Iae399a7083d7866c3c7b9162d0de244fbff8b522

* Try again to fix flaky logging test

Change-Id: I6225c074701970c17c426677ef1935bb6d7e36b4

* Auto-update dependencies. (#1097)

* Update all generated readme auth instructions (#1121)

Change-Id: I03b5eaef8b17ac3dc3c0339fd2c7447bd3e11bd2

* Fix TypeError when running Storage notification polling exmaple. (#1135)

* Adds storage Pub/Sub notification polling tutorial

* Fix formatting and add some tests

* Auto-generate README

* Simplify implementation, remove classes

* Simplified example, removed de-duping

* regenerate README

* Remove explicit project parameter.

* Fix notification TypeError on start.

* Fix linter error.

* Fix ordered list ordinals.

* Rerun nox readmegen.

* Add support for overwrite attributes (#1142)

* Add support for overwrite attributes, bug fixes

* Lint fix for overwrite line

* Switch variable to snake_case

* Handle case where attribute not set (#1143)

* Added Link to Python Setup Guide (#1158)

* Update Readme.rst to add Python setup guide

As requested in b/64770713.

This sample is linked in documentation https://cloud.google.com/bigtable/docs/scaling, and it would make more sense to update the guide here than in the documentation.

* Update README.rst

* Update README.rst

* Update README.rst

* Update README.rst

* Update README.rst

* Update install_deps.tmpl.rst

* Updated readmegen scripts and re-generated related README files

* Fixed the lint error

* Auto-update dependencies. (#1138)

* storage requester pays samples (#1122)

* storage requester pays samples

* Added tests and fixed linting issues

* google-cloud-storage version update

* changed get_bucket to bucket for downloading

* small change

* Auto-update dependencies. (#1186)

* Auto-update dependencies. (#1234)

* Auto-update dependencies.

* Drop pytest-logcapture as it's no longer needed

Change-Id: Ia8b9e8aaf248e9770db6bc4842a4532df8383893

* Auto-update dependencies. (#1239)

* Added "Open in Cloud Shell" buttons to README files (#1254)

* Auto-update dependencies. (#1263)

* Auto-update dependencies. (#1272)

* Auto-update dependencies.

* Update requirements.txt

* Auto-update dependencies. (#1282)

* Auto-update dependencies.

* Fix storage acl sample

Change-Id: I413bea899fdde4c4859e4070a9da25845b81f7cf

* Auto-update dependencies. (#1320)

* Auto-update dependencies. (#1359)

* Auto-update dependencies. (#1377)

* Auto-update dependencies.

* Update requirements.txt

* Auto-update dependencies. (#1389)

* Auto-update dependencies.

* Regenerate the README files and fix the Open in Cloud Shell link for some samples (#1441)

* Update READMEs to fix numbering and add git clone (#1464)

* Fix typo. (#1509)

Fixes https://github.com/GoogleCloudPlatform/python-docs-samples/issues/1485

* Storage: add KMS samples (#1510)

* Storage: add KMS samples

* Add CLOUD_KMS_KEY environment variable

* [Storage] Update kms samples (#1517)

* Storage: add KMS samples

* Add CLOUD_KMS_KEY environment variable

* Add region tags around samples

* Add more testing

* Fix tests and lint

* Remove leftover merge conflict. (#1657)

* Add region tag to upload_blob snippet (#1671)

* Bucket lock samples (#1588)

* [Storage] Add spacing in sample code. (#1735)

* Add spacing in sample code.

* remove whitespace

* Auto-update dependencies. (#1846)

ACK, merging.

* Update requirements.txt (#1944)

* Update requirements.txt

* Adding some rate limiting

* Auto-update dependencies. (#1980)

* Auto-update dependencies.

* Update requirements.txt

* Update requirements.txt

* storage: bucket policy only samples (#1976)

* humble beginnings

* Verified integration tests and updated README.rst

* Updating samples to reflect fixed surface

* Use release 1.14.0

* Add sleep to avoid bucket rate limit (#2136)

* feat(storage): Add snippets for v4 signed URLs (#2142)

* feat(storage): Add snippets for v4 signed URLs

* lint

* fix .format()

* add v4 command to switch statement

* fix region tag

* change if => elif to try to make func less complex

* move main to a function

* storage: add list buckets (#2149)

* Add list_buckets sample

* Allow for more if conditions

* Drop xfail for passing test_remove_bucket_label (#2173)

The Python client was fixed in
https://github.com/googleapis/google-cloud-python/issues/3711
so the test now passes.

* Update string reported in snippet and update test

* Update list blobs to use new client.list_blobs() method. (#2296)

* Update list blob samples

* Update requirements.txt

* Fix lint issues

* Use latest storage client

* [Storage] Add comment to clarify which package version is necessary (#2315)

* Add comment to clarify which package version

* Lint and add another comment to related sample

* Storage: HMAC key samples (#2372)

Add samples for HMAC key functionality: list, create, get, activate, deactivate, delete. Includes tests and version bump for client library.

* Remove required argument from list buckets sample (#2394)

* Remove required argument from list buckets sample

* Remove required argument from list buckets sample

* Fixup sample for list_hmac_keys (#2404)

Correct printed metadata to match canonical samples.

* Bucket metadata sample (#2414)

* Remove required argument from list buckets sample

* Bucket metadata sample

* Bucket metadata sample

* Adds updates for samples profiler ... vision (#2439)

* fix: add bucket-name as required arg to v4 snippets (#2502)

* [Storage] Support rename of BPO to UniformBucketLevelAccess (#2335)

* Update BPO -> UBLA

* Update BPO -> UBLA

* Fix region tag (#2515)

* Update documentation for prefix, delimiter search (#2537)

* Update documentation for prefix, delimiter search

* Remove whitespace.

* [Storage] Split samples (#2602)

* split bucket_lock samples and lint

* split samples

* blacken

* fix typos

* Add missing tests and lint

* lint

* fix typos

* fix typo

* typo

* remove README

* Auto-update dependencies. (#2005)

* Auto-update dependencies.

* Revert update of appengine/flexible/datastore.

* revert update of appengine/flexible/scipy

* revert update of bigquery/bqml

* revert update of bigquery/cloud-client

* revert update of bigquery/datalab-migration

* revert update of bigtable/quickstart

* revert update of compute/api

* revert update of container_registry/container_analysis

* revert update of dataflow/run_template

* revert update of datastore/cloud-ndb

* revert update of dialogflow/cloud-client

* revert update of dlp

* revert update of functions/imagemagick

* revert update of functions/ocr/app

* revert update of healthcare/api-client/fhir

* revert update of iam/api-client

* revert update of iot/api-client/gcs_file_to_device

* revert update of iot/api-client/mqtt_example

* revert update of language/automl

* revert update of run/image-processing

* revert update of vision/automl

* revert update testing/requirements.txt

* revert update of vision/cloud-client/detect

* revert update of vision/cloud-client/product_search

* revert update of jobs/v2/api_client

* revert update of jobs/v3/api_client

* revert update of opencensus

* revert update of translate/cloud-client

* revert update to speech/cloud-client

Co-authored-by: Kurtis Van Gent <31518063+kurtisvg@users.noreply.github.com>
Co-authored-by: Doug Mahugh <dmahugh@gmail.com>

* samples(storage): IAM conditions samples (#2730)

* docs(storage): use policy.bindings in Storage/IAM samples

* update view Bucket IAM to use policy.bindings

* update remove Bucket IAM to use policy.bindings

* blacken

* add IAM condition sample

* add conditional iam binding sample

* bump storage requirement to 1.25.0

* fix tests

* remove unused imports

* fix: Use unique resources for storage snippets. (#3029)

* fix: use unique buckets and blobs for acl tests
* fix: use unique buckets and blobs for snippets tests
* fix: reuse test_bucket within module to avoid exhausting quota
* fix: Due to retention policy, don't reuse fixture for bucket lock
* fix: randomize blob names to disperse file edits

* fix: Reuse HMAC key as we have a limit of 5 (#3037)

* fix: Reuse HMAC key as we have a limit of 5

* fix: harden storage test fixtures (#3039)

* fix: improve UBLA test fixtures
* fix: improve IAM test fixtures

* storage: Fix docs for signed URL generation (#3008)

Co-authored-by: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com>
Co-authored-by: Christopher Wilcox <crwilcox@google.com>

* chore(deps): update dependency google-cloud-storage to v1.26.0 (#3046)

* chore(deps): update dependency google-cloud-storage to v1.26.0

* chore(deps): specify dependencies by python version

* chore: up other deps to try to remove errors

Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>
Co-authored-by: Leah Cole <coleleah@google.com>

* feat: add remove conditional binding sample (#3107)

* feat: add remove conditional binding sample

* fix iam test fixture

* fix silly mistake of removing all bindings

* fix ubla test

* address feedback

* revert changes to tests

* Simplify noxfile setup. (#2806)

* chore(deps): update dependency requests to v2.23.0

* Simplify noxfile and add version control.

* Configure appengine/standard to only test Python 2.7.

* Update Kokokro configs to match noxfile.

* Add requirements-test to each folder.

* Remove Py2 versions from everything execept appengine/standard.

* Remove conftest.py.

* Remove appengine/standard/conftest.py

* Remove 'no-sucess-flaky-report' from pytest.ini.

* Add GAE SDK back to appengine/standard tests.

* Fix typo.

* Roll pytest to python 2 version.

* Add a bunch of testing requirements.

* Remove typo.

* Add appengine lib directory back in.

* Add some additional requirements.

* Fix issue with flake8 args.

* Even more requirements.

* Readd appengine conftest.py.

* Add a few more requirements.

* Even more Appengine requirements.

* Add webtest for appengine/standard/mailgun.

* Add some additional requirements.

* Add workaround for issue with mailjet-rest.

* Add responses for appengine/standard/mailjet.

Co-authored-by: Renovate Bot <bot@renovateapp.com>

* [storage] feat: add post policy sample (#3231)

* feat: add post policy sample

* use 1.27.0

* fix

* simplify iterator

Co-authored-by: Jonathan Lui <jonathanlui@google.com>

* Update dependency google-cloud-pubsub to v1.4.2 in Storage and Pub/Sub (#3343)

* Remove name attribute from the input (#3569)

If name='submit' is specified for the input type='submit' the endpoint returns the following error:

<Error>
<Code>InvalidPolicyDocument</Code>
<Message>
The content of the form does not meet the conditions specified in the policy document.
</Message>
<Details>Policy did not reference these fields: submit</Details>
</Error>

Co-authored-by: Takashi Matsuo <tmatsuo@google.com>

* [storage] fix: use unique blob name (#3568)

* [storage] fix: use unique blob name

fixes #3567

* add some comments

* chore(deps): update dependency google-cloud-storage to v1.28.0 (#3260)

Co-authored-by: Takashi Matsuo <tmatsuo@google.com>

* [storage] fix: use a different bucket for requester_pays_test (#3655)

* [storage] fix: use a different bucket for requester_pays_test

fixes #3654

* rename to README.md, added the envvar to the template

* add REQUESTER_PAYS_TEST_BUCKET env var

* just use REQUESTER_PAYS_TEST_BUCKET

* docs(storage): add samples for lifer cycle and versioning  (#3578)

* docs(storage): add samples for lifer cycle and versioning

* docs(storage): nits

* docs(storage): lint fix

Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>

* chore: some lint fixes (#3750)

* chore(deps): update dependency google-cloud-pubsub to v1.4.3 (#3725)

Co-authored-by: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com>
Co-authored-by: Takashi Matsuo <tmatsuo@google.com>

* docs(storage): add samples  (#3687)

* chore(deps): update dependency google-cloud-storage to v1.28.1 (#3785)

* chore(deps): update dependency google-cloud-storage to v1.28.1

* [asset] testing: use uuid instead of time

Co-authored-by: Takashi Matsuo <tmatsuo@google.com>

* docs(storage): add samples for file archive generation and cors configuration (#3794)

* chore(deps): update dependency google-cloud-pubsub to v1.5.0 (#3781)

Co-authored-by: Bu Sun Kim <8822365+busunkim96@users.noreply.github.com>

* Replace GCLOUD_PROJECT with GOOGLE_CLOUD_PROJECT. (#4022)

* [storage] testing: use multiple projects (#4048)

* [storage] testing: use multiple projects

We still need to use the old project for some tests.

fixes #4033
fixes #4029

* remove print

* use uuid instead of time.time()

* lint fix

* chore(deps): update dependency google-cloud-storage to v1.29.0 (#4040)

* Update dependency google-cloud-pubsub to v1.6.0 (#4039)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [google-cloud-pubsub](https://togithub.com/googleapis/python-pubsub) | minor | `==1.5.0` -> `==1.6.0` |

---

### Release Notes

<details>
<summary>googleapis/python-pubsub</summary>

### [`v1.6.0`](https://togithub.com/googleapis/python-pubsub/blob/master/CHANGELOG.md#&#8203;160-httpswwwgithubcomgoogleapispython-pubsubcomparev150v160-2020-06-09)

[Compare Source](https://togithub.com/googleapis/python-pubsub/compare/v1.5.0...v1.6.0)

##### Features

-   Add flow control for message publishing ([#&#8203;96](https://www.github.com/googleapis/python-pubsub/issues/96)) ([06085c4](https://www.github.com/googleapis/python-pubsub/commit/06085c4083b9dccdd50383257799904510bbf3a0))

##### Bug Fixes

-   Fix PubSub incompatibility with api-core 1.17.0+ ([#&#8203;103](https://www.github.com/googleapis/python-pubsub/issues/103)) ([c02060f](https://www.github.com/googleapis/python-pubsub/commit/c02060fbbe6e2ca4664bee08d2de10665d41dc0b))

##### Documentation

-   Clarify that Schedulers shouldn't be used with multiple SubscriberClients ([#&#8203;100](https://togithub.com/googleapis/python-pubsub/pull/100)) ([cf9e87c](https://togithub.com/googleapis/python-pubsub/commit/cf9e87c80c0771f3fa6ef784a8d76cb760ad37ef))
-   Fix update subscription/snapshot/topic samples ([#&#8203;113](https://togithub.com/googleapis/python-pubsub/pull/113)) ([e62c38b](https://togithub.com/googleapis/python-pubsub/commit/e62c38bb33de2434e32f866979de769382dea34a))

##### Internal / Testing Changes

-   Re-generated service implementaton using synth: removed experimental notes from the RetryPolicy and filtering features in anticipation of GA, added DetachSubscription (experimental) ([#&#8203;114](https://togithub.com/googleapis/python-pubsub/pull/114)) ([0132a46](https://togithub.com/googleapis/python-pubsub/commit/0132a4680e0727ce45d5e27d98ffc9f3541a0962))
-   Incorporate will_accept() checks into publish() ([#&#8203;108](https://togithub.com/googleapis/python-pubsub/pull/108)) ([6c7677e](https://togithub.com/googleapis/python-pubsub/commit/6c7677ecb259672bbb9b6f7646919e602c698570))

</details>

---

### Renovate configuration

:date: **Schedule**: At any time (no schedule defined).

:vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

:recycle: **Rebasing**: Never, or you tick the rebase/retry checkbox.

:no_bell: **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#GoogleCloudPlatform/python-docs-samples).

* chore(deps): update dependency google-cloud-pubsub to v1.6.1 (#4242)

Co-authored-by: gcf-merge-on-green[bot] <60162190+gcf-merge-on-green[bot]@users.noreply.github.com>

* chore(deps): update dependency pytest to v5.4.3 (#4279)

* chore(deps): update dependency pytest to v5.4.3

* specify pytest for python 2 in appengine

Co-authored-by: Leah Cole <coleleah@google.com>

* chore(deps): update dependency mock to v4 (#4287)

* chore(deps): update dependency mock to v4

* specify mock version for appengine python 2

Co-authored-by: Leah Cole <coleleah@google.com>

* chore(deps): update dependency google-cloud-pubsub to v1.7.0 (#4290)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [google-cloud-pubsub](https://togithub.com/googleapis/python-pubsub) | minor | `==1.6.1` -> `==1.7.0` |

---

### Release Notes

<details>
<summary>googleapis/python-pubsub</summary>

### [`v1.7.0`](https://togithub.com/googleapis/python-pubsub/blob/master/CHANGELOG.md#&#8203;170-httpswwwgithubcomgoogleapispython-pubsubcomparev161v170-2020-07-13)

[Compare Source](https://togithub.com/googleapis/python-pubsub/compare/v1.6.1...v1.7.0)

##### New Features

-   Add support for server-side flow control. ([#&#8203;143](https://togithub.com/googleapis/python-pubsub/pull/143)) ([04e261c](https://www.github.com/googleapis/python-pubsub/commit/04e261c602a2919cc75b3efa3dab099fb2cf704c))

##### Dependencies

-   Update samples dependency `google-cloud-pubsub` to `v1.6.1`. ([#&#8203;144](https://togithub.com/googleapis/python-pubsub/pull/144)) ([1cb6746](https://togithub.com/googleapis/python-pubsub/commit/1cb6746b00ebb23dbf1663bae301b32c3fc65a88))

##### Documentation

-   Add pubsub/cloud-client samples from the common samples repo (with commit history). ([#&#8203;151](https://togithub.com/googleapis/python-pubsub/pull/151)) 
-   Add flow control section to publish overview. ([#&#8203;129](https://togithub.com/googleapis/python-pubsub/pull/129)) ([acc19eb](https://www.github.com/googleapis/python-pubsub/commit/acc19eb048eef067d9818ef3e310b165d9c6307e))
-   Add a link to Pub/Sub filtering language public documentation to `pubsub.proto`. ([#&#8203;121](https://togithub.com/googleapis/python-pubsub/pull/121)) ([8802d81](https://www.github.com/googleapis/python-pubsub/commit/8802d8126247f22e26057e68a42f5b5a82dcbf0d))

</details>

---

### Renovate configuration

:date: **Schedule**: At any time (no schedule defined).

:vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

:recycle: **Rebasing**: Renovate will not automatically rebase this PR, because other commits have been found.

:no_bell: **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#GoogleCloudPlatform/python-docs-samples).

* Fix mismatched storage region tags (#4194)

* Update dependency google-cloud-storage to v1.30.0

* Update dependency pytest to v6 (#4390)

* chore(deps): update dependency google-cloud-storage to v1.31.0 (#4564)

Co-authored-by: Takashi Matsuo <tmatsuo@google.com>

* chore: fix some more unmatched region tags (#4585)

fixes #4549

Co-authored-by: Dina Graves Portman <dinagraves@google.com>

* Update storage_get_metadata.py (#4615)

Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>

* chore(deps): update dependency google-cloud-storage to v1.31.1 (#4714)

* chore(deps): update dependency google-cloud-storage to v1.31.2 (#4750)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [google-cloud-storage](https://togithub.com/googleapis/python-storage) | patch | `==1.31.1` -> `==1.31.2` |

---

### Release Notes

<details>
<summary>googleapis/python-storage</summary>

### [`v1.31.2`](https://togithub.com/googleapis/python-storage/blob/master/CHANGELOG.md#&#8203;1312-httpswwwgithubcomgoogleapispython-storagecomparev1311v1312-2020-09-23)

[Compare Source](https://togithub.com/googleapis/python-storage/compare/v1.31.1...v1.31.2)

</details>

---

### Renovate configuration

:date: **Schedule**: At any time (no schedule defined).

:vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

:recycle: **Rebasing**: Never, or you tick the rebase/retry checkbox.

:no_bell: **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/GoogleCloudPlatform/python-docs-samples).

* chore(deps): update dependency pytest to v6.1.1 (#4761)

* chore(deps): update dependency google-cloud-storage to v1.32.0 (#4871)

* chore(deps): update dependency pytest to v6.1.2 (#4921)

Co-authored-by: Charles Engelke <engelke@google.com>

* change pprint to print. (#4856)

* change pprint to print.

Line 57 had pprint.pprint.. changing it to print.

* Update storage_get_bucket_metadata.py

Removing pprint import

Co-authored-by: Dina Graves Portman <dinagraves@google.com>
Co-authored-by: Charles Engelke <engelke@google.com>

* chore(deps): update dependency google-cloud-storage to v1.33.0 (#4990)

* Add patch call (#5013)

I believe a call to `blob.patch()` is necessary to actually save the metadata back to GCS.

* fix: add a comment to draw attention to using get_blob, not blob (#5052)

* fix: add a comment to draw attention to using get_blob, not blob

* docs: further elaboration

* docs: add clarifying doc string to download file

* Update storage_download_file.py

* Update storage_download_file.py

* chore(deps): update dependency mock to v4.0.3 (#5062)

* fix(storage): Update comment, prefix should include delimiter (#5064)

* chore(deps): update dependency google-cloud-storage to v1.35.0 (#5074)

* chore(deps): update dependency pytest to v6.2.1 (#5076)

[![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [pytest](https://docs.pytest.org/en/latest/) ([source](https://togithub.com/pytest-dev/pytest)) | minor | `==6.1.2` -> `==6.2.1` |

---

### Release Notes

<details>
<summary>pytest-dev/pytest</summary>

### [`v6.2.1`](https://togithub.com/pytest-dev/pytest/releases/6.2.1)

[Compare Source](https://togithub.com/pytest-dev/pytest/compare/6.2.0...6.2.1)

# pytest 6.2.1 (2020-12-15)

## Bug Fixes

-   [#&#8203;7678](https://togithub.com/pytest-dev/pytest/issues/7678): Fixed bug where `ImportPathMismatchError` would be raised for files compiled in
    the host and loaded later from an UNC mounted path (Windows).
-   [#&#8203;8132](https://togithub.com/pytest-dev/pytest/issues/8132): Fixed regression in `approx`: in 6.2.0 `approx` no longer raises
    `TypeError` when dealing with non-numeric types, falling back to normal comparison.
    Before 6.2.0, array types like tf.DeviceArray fell through to the scalar case,
    and happened to compare correctly to a scalar if they had only one element.
    After 6.2.0, these types began failing, because they inherited neither from
    standard Python number hierarchy nor from `numpy.ndarray`.

    `approx` now converts arguments to `numpy.ndarray` if they expose the array
    protocol and are not scalars. This treats array-like objects like numpy arrays,
    regardless of size.

### [`v6.2.0`](https://togithub.com/pytest-dev/pytest/releases/6.2.0)

[Compare Source](https://togithub.com/pytest-dev/pytest/compare/6.1.2...6.2.0)

# pytest 6.2.0 (2020-12-12)

## Breaking Changes

-   [#&#8203;7808](https://togithub.com/pytest-dev/pytest/issues/7808): pytest now supports python3.6+ only.

## Deprecations

-   [#&#8203;7469](https://togithub.com/pytest-dev/pytest/issues/7469): Directly constructing/calling the following classes/functions is now deprecated:

    -   `_pytest.cacheprovider.Cache`
    -   `_pytest.cacheprovider.Cache.for_config()`
    -   `_pytest.cacheprovider.Cache.clear_cache()`
    -   `_pytest.cacheprovider.Cache.cache_dir_from_config()`
    -   `_pytest.capture.CaptureFixture`
    -   `_pytest.fixtures.FixtureRequest`
    -   `_pytest.fixtures.SubRequest`
    -   `_pytest.logging.LogCaptureFixture`
    -   `_pytest.pytester.Pytester`
    -   `_pytest.pytester.Testdir`
    -   `_pytest.recwarn.WarningsRecorder`
    -   `_pytest.recwarn.WarningsChecker`
    -   `_pytest.tmpdir.TempPathFactory`
    -   `_pytest.tmpdir.TempdirFactory`

    These have always been considered private, but now issue a deprecation warning, which may become a hard error in pytest 7.0.0.

-   [#&#8203;7530](https://togithub.com/pytest-dev/pytest/issues/7530): The `--strict` command-line option has been deprecated, use `--strict-markers` instead.

    We have plans to maybe in the future to reintroduce `--strict` and make it an encompassing flag for all strictness
    related options (`--strict-markers` and `--strict-config` at the moment, more might be introduced in the future).

-   [#&#8203;7988](https://togithub.com/pytest-dev/pytest/issues/7988): The `@pytest.yield_fixture` decorator/function is now deprecated. Use pytest.fixture instead.

    `yield_fixture` has been an alias for `fixture` for a very long time, so can be search/replaced safely.

## Features

-   [#&#8203;5299](https://togithub.com/pytest-dev/pytest/issues/5299): pytest now warns about unraisable exceptions and unhandled thread exceptions that occur in tests on Python>=3.8.
    See unraisable for more information.
-   [#&#8203;7425](https://togithub.com/pytest-dev/pytest/issues/7425): New pytester fixture, which is identical to testdir but its methods return pathlib.Path when appropriate instead of `py.path.local`.

    This is part of the movement to use pathlib.Path objects internally, in order to remove the dependency to `py` in the future.

    Internally, the old Testdir &lt;\_pytest.pytester.Testdir> is now a thin wrapper around Pytester &lt;\_pytest.pytester.Pytester>, preserving the old interface.

-   [#&#8203;7695](https://togithub.com/pytest-dev/pytest/issues/7695): A new hook was added, pytest_markeval_namespace which should return a dictionary.
    This dictionary will be used to augment the "global" variables available to evaluate skipif/xfail/xpass markers.

    Pseudo example

    `conftest.py`:

    ```{.sourceCode .python}
    def pytest_markeval_namespace():
        return {"color": "red"}
    ```

    `test_func.py`:

    ```{.sourceCode .python}
    @&#8203;pytest.mark.skipif("color == 'blue'", reason="Color is not red")
    def test_func():
        assert False
    ```

-   [#&#8203;8006](https://togithub.com/pytest-dev/pytest/issues/8006): It is now possible to construct a ~pytest.MonkeyPatch object directly as `pytest.MonkeyPatch()`,
    in cases when the monkeypatch fixture cannot be used. Previously some users imported it
    from the private \_pytest.monkeypatch.MonkeyPatch namespace.

    Additionally, MonkeyPatch.context &lt;pytest.MonkeyPatch.context> is now a classmethod,
    and can be used as `with MonkeyPatch.context() as mp: ...`. This is the recommended way to use
    `MonkeyPatch` directly, since unlike the `monkeypatch` fixture, an instance created directly
    is not `undo()`-ed automatically.

## Improvements

-   [#&#8203;1265](https://togithub.com/pytest-dev/pytest/issues/1265): Added an `__str__` implementation to the ~pytest.pytester.LineMatcher class which is returned from `pytester.run_pytest().stdout` and similar. It returns the entire output, like the existing `str()` method.
-   [#&#8203;2044](https://togithub.com/pytest-dev/pytest/issues/2044): Verbose mode now shows the reason that a test was skipped in the test's terminal line after the "SKIPPED", "XFAIL" or "XPASS".
-   [#&#8203;7469](https://togithub.com/pytest-dev/pytest/issues/7469) The types of builtin pytest fixtures are now exported so they may be used in type annotations of test functions.
    The newly-exported types are:

    -   `pytest.FixtureRequest` for the request fixture.
    -   `pytest.Cache` for the cache fixture.
    -   `pytest.CaptureFixture[str]` for the capfd and capsys fixtures.
    -   `pytest.CaptureFixture[bytes]` for the capfdbinary and capsysbinary fixtures.
    -   `pytest.LogCaptureFixture` for the caplog fixture.
    -   `pytest.Pytester` for the pytester fixture.
    -   `pytest.Testdir` for the testdir fixture.
    -   `pytest.TempdirFactory` for the tmpdir_factory fixture.
    -   `pytest.TempPathFactory` for the tmp_path_factory fixture.
    -   `pytest.MonkeyPatch` for the monkeypatch fixture.
    -   `pytest.WarningsRecorder` for the recwarn fixture.

    Constructing them is not supported (except for MonkeyPatch); they are only meant for use in type annotations.
    Doing so will emit a deprecation warning, and may become a hard-error in pytest 7.0.

    Subclassing them is also not supported. This is not currently enforced at runtime, but is detected by type-checkers such as mypy.

-   [#&#8203;7527](https://togithub.com/pytest-dev/pytest/issues/7527): When a comparison between namedtuple &lt;collections.namedtuple> instances of the same type fails, pytest now shows the differing field names (possibly nested) instead of their indexes.
-   [#&#8203;7615](https://togithub.com/pytest-dev/pytest/issues/7615): Node.warn &lt;\_pytest.nodes.Node.warn> now permits any subclass of Warning, not just PytestWarning &lt;pytest.PytestWarning>.
-   [#&#8203;7701](https://togithub.com/pytest-dev/pytest/issues/7701): Improved reporting when using `--collected-only`. It will now show the number of collected tests in the summary stats.
-   [#&#8203;7710](https://togithub.com/pytest-dev/pytest/issues/7710): Use strict equality comparison for non-numeric types in pytest.approx instead of
    raising TypeError.

    This was the undocumented behavior before 3.7, but is now officially a supported feature.

-   [#&#8203;7938](https://togithub.com/pytest-dev/pytest/issues/7938): New `--sw-skip` argument which is a shorthand for `--stepwise-skip`.
-   [#&#8203;8023](https://togithub.com/pytest-dev/pytest/issues/8023): Added `'node_modules'` to default value for norecursedirs.
-   [#&#8203;8032](https://togithub.com/pytest-dev/pytest/issues/8032): doClassCleanups &lt;unittest.TestCase.doClassCleanups> (introduced in unittest in Python and 3.8) is now called appropriately.

## Bug Fixes

-   [#&#8203;4824](https://togithub.com/pytest-dev/pytest/issues/4824): Fixed quadratic behavior and improved performance of collection of items using autouse fixtures and xunit fixtures.
-   [#&#8203;7758](https://togithub.com/pytest-dev/pytest/issues/7758): Fixed an issue where some files in packages are getting lost from `--lf` even though they contain tests that failed. Regressed in pytest 5.4.0.
-   [#&#8203;7911](https://togithub.com/pytest-dev/pytest/issues/7911): Directories created by by tmp_path and tmpdir are now considered stale after 3 days without modification (previous value was 3 hours) to avoid deleting directories still in use in long running test suites.
-   [#&#8203;7913](https://togithub.com/pytest-dev/pytest/issues/7913): Fixed a crash or hang in pytester.spawn &lt;\_pytest.pytester.Pytester.spawn> when the readline module is involved.
-   [#&#8203;7951](https://togithub.com/pytest-dev/pytest/issues/7951): Fixed handling of recursive symlinks when collecting tests.
-   [#&#8203;7981](https://togithub.com/pytest-dev/pytest/issues/7981): Fixed symlinked directories not being followed during collection. Regressed in pytest 6.1.0.
-   [#&#8203;8016](https://togithub.com/pytest-dev/pytest/issues/8016): Fixed only one doctest being collected when using `pytest --doctest-modules path/to/an/__init__.py`.

## Improved Documentation

-   [#&#8203;7429](https://togithub.com/pytest-dev/pytest/issues/7429): Add more information and use cases about skipping doctests.
-   [#&#8203;7780](https://togithub.com/pytest-dev/pytest/issues/7780): Classes which should not be inherited from are now marked `final class` in the API reference.
-   [#&#8203;7872](https://togithub.com/pytest-dev/pytest/issues/7872): `_pytest.config.argparsing.Parser.addini()` accepts explicit `None` and `"string"`.
-   [#&#8203;7878](https://togithub.com/pytest-dev/pytest/issues/7878): In pull request section, ask to commit after editing changelog and authors file.

## Trivial/Internal Changes

-   [#&#8203;7802](https://togithub.com/pytest-dev/pytest/issues/7802): The `attrs` dependency requirement is now >=19.2.0 instead of >=17.4.0.
-   [#&#8203;8014](https://togithub.com/pytest-dev/pytest/issues/8014): .pyc files created by pytest's assertion rewriting now conform to the newer PEP-552 format on Python>=3.7.
    (These files are internal and only interpreted by pytest itself.)

</details>

---

### Renovate configuration

:date: **Schedule**: At any time (no schedule defined).

:vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

:recycle: **Rebasing**: Never, or you tick the rebase/retry checkbox.

:no_bell: **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/GoogleCloudPlatform/python-docs-samples).

* chore(deps): update dependency google-cloud-pubsub to v2.2.0 (#4673)

* chore(deps): update dependency google-cloud-pubsub to v2.2.0

* run pubsub script on healthcare/api-client/v1/dicom

* iot pubsub fixes, fix lint

* revert some changes pubsub script made

* try using return_value for mock

* undo previous change

* try adding publish_time in mock

* move publish_time param

* make publish_time a float

* make publish_time a datetime

* try using object instead of datetime

* another attempt

* undo the black stuff that messed up lint

Co-authored-by: Leah Cole <coleleah@google.com>
Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>

* chore(Dockerfile): add Python 3.9 (#4968)

* chore(Dockerfile): add Python 3.9

* Add py3.9 kokoro dir

* fix typo

* Add GPG keys

* Add 3.9 to noxfiles

* Update composer dep to avoid deprecation spam

* fix(storage): add py-3.9 specific key

* update psycopg2-binary, only run test in py-3.9 build

* add libmemcached-dev to the Dockerfile

* disable appengine standard test in py-3.9 build

* disable py-3.9 build for appengine cloud_debugger

* skip py-3.9 build for composer/workflows

* skip tests with pyarrow for py-3.9 build

* avoid ReferenceError in iot builds

* skip some tests due to pip error

* add a temporary statement for debugging

* fix lint

* use correct constant

* disable 2.7 builds

* disable builds due to pip conflict

The conflict is between google-cloud-monitoring==2.0.0 and
opencensus-ext-stackdriver.

* remove temporary debugging statement

* really skip py-3.9 build for pubsub/streaming-analytics

* copyright year fix

* fix(storage): explicitly use the test project for the test bucket

* fix(storage): use correct cloud project

* fix: disable py-3.9 builds

- appengine/standard_python3/bigquery
- data-science-onramp/data-ingestion

* disable py-3.9 build

- dataflow/encryption-keys
- dataflow/flex-templates/streaming_beam

* disable type hint checks

Co-authored-by: Takashi Matsuo <tmatsuo@google.com>

* fix(storage): list all versions (#5325)

## Description
Add the `versions=True` variable to the `list_file_archived_generations function` to actually list all the versions instead of the last one only.
Fixes the incongruency between python and the other languages in the [Listing noncurrent object versions code samples](https://cloud.google.com/storage/docs/using-object-versioning#list).

## Checklist
- [x] I have followed [Sample Guidelines from AUTHORING_GUIDE.MD](https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/AUTHORING_GUIDE.md)
- [x] README is updated to include [all relevant information](https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/AUTHORING_GUIDE.md#readme-file)
- [x] **Tests** pass:   `nox -s py-3.6` (see [Test Environment Setup](https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/AUTHORING_GUIDE.md#test-environment-setup))
- [x] **Lint** pass:   `nox -s lint` (see [Test Environment Setup](https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/AUTHORING_GUIDE.md#test-environment-setup))
- [ ] These samples need a new **API enabled** in testing projects to pass (let us know which ones)
- [ ] These samples need a new/updated **env vars** in testing projects set to pass (let us know which ones)
- [x] Please **merge** this PR for me once it is approved.
- [ ] This sample adds a new sample directory, and I updated the [CODEOWNERS file](https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/.github/CODEOWNERS) with the codeowners for this sample

* docs: address sample feedback issues (#5329)

## Description

Fixes #5180, captures work from #5181 authored by @keegan2149, thank you!

## Checklist
- [x] I have followed [Sample Guidelines from AUTHORING_GUIDE.MD](https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/AUTHORING_GUIDE.md)
- [x] README is updated to include [all relevant information](https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/AUTHORING_GUIDE.md#readme-file)
- [x] **Tests** pass:   `nox -s py-3.6` (see [Test Environment Setup](https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/AUTHORING_GUIDE.md#test-environment-setup))
- [x] **Lint** pass:   `nox -s lint` (see [Test Environment Setup](https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/AUTHORING_GUIDE.md#test-environment-setup))
- [x] Please **merge** this PR for me once it is approved.

* chore(deps): update dependency google-cloud-pubsub to v2.3.0 (#5347)

[![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [google-cloud-pubsub](https://togithub.com/googleapis/python-pubsub) | `==2.2.0` -> `==2.3.0` | [![age](https://badges.renovateapi.com/packages/pypi/google-cloud-pubsub/2.3.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/google-cloud-pubsub/2.3.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/google-cloud-pubsub/2.3.0/compatibility-slim/2.2.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/google-cloud-pubsub/2.3.0/confidence-slim/2.2.0)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>googleapis/python-pubsub</summary>

### [`v2.3.0`](https://togithub.com/googleapis/python-pubsub/blob/master/CHANGELOG.md#&#8203;230-httpswwwgithubcomgoogleapispython-pubsubcomparev220v230-2021-02-08)

[Compare Source](https://togithub.com/googleapis/python-pubsub/compare/v2.2.0...v2.3.0)

##### Features

-   surface SchemaServiceClient in google.cloud.pubsub ([#&#8203;281](https://www.github.com/googleapis/python-pubsub/issues/281)) ([8751bcc](https://www.github.com/googleapis/python-pubsub/commit/8751bcc5eb782df55769b48253629a3bde3d4661))

##### Bug Fixes

-   client version missing from the user agent header ([#&#8203;275](https://www.github.com/googleapis/python-pubsub/issues/275)) ([b112f4f](https://www.github.com/googleapis/python-pubsub/commit/b112f4fcbf6f2bce8dcf37871bdc540b11f54fe3))
-   Don't open the google.cloud package by adding pubsub.py ([#&#8203;269](https://www.github.com/googleapis/python-pubsub/issues/269)) ([542d79d](https://www.github.com/googleapis/python-pubsub/commit/542d79d7c5fb7403016150ba477485756cd4097b))
-   flaky samples tests ([#&#8203;263](https://www.github.com/googleapis/python-pubsub/issues/263)) ([3d6a29d](https://www.github.com/googleapis/python-pubsub/commit/3d6a29de07cc09be663c90a3333f4cd33633994f))
-   Modify synth.py to update grpc transport options ([#&#8203;266](https://www.github.com/googleapis/python-pubsub/issues/266)) ([41dcd30](https://www.github.com/googleapis/python-pubsub/commit/41dcd30636168f3dd1248f1d99170d531fc9bcb8))
-   pass anonymous credentials for emulator ([#&#8203;250](https://www.github.com/googleapis/python-pubsub/issues/250)) ([8eed8e1](https://www.github.com/googleapis/python-pubsub/commit/8eed8e16019510dc8b20fb6b009d61a7ac532d26))
-   remove grpc send/recieve limits ([#&#8203;259](https://www.github.com/googleapis/python-pubsub/issues/259)) ([fd2840c](https://www.github.com/googleapis/python-pubsub/commit/fd2840c10f92b03da7f4b40ac69c602220757c0a))

</details>

---

### Renovate configuration

:date: **Schedule**: At any time (no schedule defined).

:vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

:recycle: **Rebasing**: Never, or you tick the rebase/retry checkbox.

:no_bell: **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/GoogleCloudPlatform/python-docs-samples).

* chore(deps): update dependency google-cloud-storage to v1.35.1 (#5321)

* chore(deps): update dependency google-cloud-pubsub to v2.4.0 (#5399)

* chore(deps): update dependency google-cloud-storage to v1.36.1 (#5353)

* chore(deps): update dependency google-cloud-storage to v1.36.1

* moving media transcoder separately

Co-authored-by: Leah Cole <coleleah@google.com>
Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>

* chore(deps): update dependency google-cloud-storage to v1.36.2 (#5520)

* chore(deps): update dependency google-cloud-storage to v1.37.0 (#5580)

[![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [google-cloud-storage](https://togithub.com/googleapis/python-storage) | `==1.36.2` -> `==1.37.0` | [![age](https://badges.renovateapi.com/packages/pypi/google-cloud-storage/1.37.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/google-cloud-storage/1.37.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/google-cloud-storage/1.37.0/compatibility-slim/1.36.2)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/google-cloud-storage/1.37.0/confidence-slim/1.36.2)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>googleapis/python-storage</summary>

### [`v1.37.0`](https://togithub.com/googleapis/python-storage/blob/master/CHANGELOG.md#&#8203;1370-httpswwwgithubcomgoogleapispython-storagecomparev1362v1370-2021-03-24)

[Compare Source](https://togithub.com/googleapis/python-storage/compare/v1.36.2...v1.37.0)

##### Features

-   add blob.open() for file-like I/O ([#&#8203;385](https://www.github.com/googleapis/python-storage/issues/385)) ([440a0a4](https://www.github.com/googleapis/python-storage/commit/440a0a4ffe00b1f7c562b0e9c1e47dbadeca33e1)), closes [#&#8203;29](https://www.github.com/googleapis/python-storage/issues/29)

##### Bug Fixes

-   update user_project usage and documentation in bucket/client class methods ([#&#8203;396](https://www.github.com/googleapis/python-storage/issues/396)) ([1a2734b](https://www.github.com/googleapis/python-storage/commit/1a2734ba6d316ce51e4e141571331e86196462b9))

##### [1.36.2](https://www.github.com/googleapis/python-storage/compare/v1.36.1...v1.36.2) (2021-03-09)

##### Bug Fixes

-   update batch connection to request api endpoint info from client ([#&#8203;392](https://www.github.com/googleapis/python-storage/issues/392)) ([91fc6d9](https://www.github.com/googleapis/python-storage/commit/91fc6d9870a36308b15a827ed6a691e5b4669b62))

##### [1.36.1](https://www.github.com/googleapis/python-storage/compare/v1.36.0...v1.36.1) (2021-02-19)

##### Bug Fixes

-   allow metadata keys to be cleared ([#&#8203;383](https://www.github.com/googleapis/python-storage/issues/383)) ([79d27da](https://www.github.com/googleapis/python-storage/commit/79d27da9fe842e44a9091076ea0ef52c5ef5ff72)), closes [#&#8203;381](https://www.github.com/googleapis/python-storage/issues/381)
-   allow signed url version v4 without signed credentials ([#&#8203;356](https://www.github.com/googleapis/python-storage/issues/356)) ([3e69bf9](https://www.github.com/googleapis/python-storage/commit/3e69bf92496616c5de28094dd42260b35c3bf982))
-   correctly encode bytes for V2 signature ([#&#8203;382](https://www.github.com/googleapis/python-storage/issues/382)) ([f44212b](https://www.github.com/googleapis/python-storage/commit/f44212b7b91a67ca661898400fe632f9fb3ec8f6))

</details>

---

### Renovate configuration

:date: **Schedule**: At any time (no schedule defined).

:vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

:recycle: **Rebasing**: Never, or you tick the rebase/retry checkbox.

:no_bell: **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/GoogleCloudPlatform/python-docs-samples).

* chore(deps): update dependency google-cloud-pubsub to v2.4.1 (#5610)

[![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [google-cloud-pubsub](https://togithub.com/googleapis/python-pubsub) | `==2.4.0` -> `==2.4.1` | [![age](https://badges.renovateapi.com/packages/pypi/google-cloud-pubsub/2.4.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/google-cloud-pubsub/2.4.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/google-cloud-pubsub/2.4.1/compatibility-slim/2.4.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/google-cloud-pubsub/2.4.1/confidence-slim/2.4.0)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>googleapis/python-pubsub</summary>

### [`v2.4.1`](https://togithub.com/googleapis/python-pubsub/blob/master/CHANGELOG.md#&#8203;241-httpswwwgithubcomgoogleapispython-pubsubcomparev240v241-2021-03-30)

[Compare Source](https://togithub.com/googleapis/python-pubsub/compare/v2.4.0...2.4.1)

##### Bug Fixes

-   Move `await_msg_callbacks` flag to `subscribe()` method, fixing a regression in Pub/Sub Lite client.
    ([#&#8203;320](https://www.github.com/googleapis/python-pubsub/issues/320)) ([d40d027](https://www.github.com/googleapis/python-pubsub/commit/d40d02713c8c189937ae5c21d099b88a3131a59f))
-   SSL error when using the client with the emulator. ([#&#8203;297](https://www.github.com/googleapis/python-pubsub/issues/297)) ([83db672](https://www.github.com/googleapis/python-pubsub/commit/83db67239d3521457138699109f766d574a0a2c4))

##### Implementation Changes

-   (samples) Bump the max_time to 10 minutes for a flaky test. ([#&#8203;311](https://www.github.com/googleapis/python-pubsub/issues/311)) ([e2678d4](https://www.github.com/googleapis/python-pubsub/commit/e2678d47c08e6b03782d2d744a4e630b933fdd51)), closes [#&#8203;291](https://www.github.com/googleapis/python-pubsub/issues/291)
-   (samples) Mark delivery attempts test as flaky. ([#&#8203;326](https://www.github.com/googleapis/python-pubsub/issues/326)) ([5a97ef1](https://www.github.com/googleapis/python-pubsub/commit/5a97ef1bb7512fe814a8f72a43b3e9698434cd8d))
-   (samples) Mitigate flakiness in subscriber_tests. ([#&#8203;304](https://www.github.com/googleapis/python-pubsub/issues/304)) ([271a385](https://www.github.com/googleapis/python-pubsub/commit/271a3856d835967f18f6becdae5ad53d585d0ccf))
-   (samples) Retry `InternalServerError` in dead letter policy test. ([#&#8203;329](https://www.github.com/googleapis/python-pubsub/issues/329)) ([34c9b11](https://www.github.com/googleapis/python-pubsub/commit/34c9b11ae697c280f32642c3101b7f7da971f589)), closes [#&#8203;321](https://www.github.com/googleapis/python-pubsub/issues/321)

##### Documentation

-   Remove EXPERIMENTAL tag for ordering keys in `types.py`. ([#&#8203;323](https://www.github.com/googleapis/python-pubsub/issues/323)) ([659cd7a](https://www.github.com/googleapis/python-pubsub/commit/659cd7ae2784245d4217fbc722dac04bd3222d32))
-   Remove EXPERIMENTAL tag from `Schema` service (via synth). ([#&#8203;307](https://www.github.com/googleapis/python-pubsub/issues/307)) ([ad85202](https://www.github.com/googleapis/python-pubsub/commit/ad852028836520db779c5cc33689ffd7e5458a7d))

</details>

---

### Renovate configuration

:date: **Schedule**: At any time (no schedule defined).

:vertical_traffic_light: **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

:recycle: **Rebasing**: Never, or you tick the rebase/retry checkbox.

:no_bell: **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/GoogleCloudPlatform/python-docs-samples).

* docs: update description of parameters in storage_upload_file (#5707)

* following Java's example https://github.com/googleapis/google-cloud-java/blob/b36db6a957bcfb7b6ccdb77fb12b4cc7fa22b807/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/objects/UploadObject.java#L33-L40

* samples(storage): update storage_set_bucket_public_iam to explicitly set role and member (#5708)

* chore: fix typo on noxfile (#5739)

* chore: add noxfile config

* chore: fix typo on noxfile

* Remove "chore: add noxfile config"

This reverts commit 61972125cbbf110941da1227afed53f169bad3a6.

* chore: fix the base noxfile_config

* fix(storage): retry flaky test (#5744)

Fixes #5684

* chore(deps): update dependency google-api-python-client to v2.3.0 (#5689)

* Update storage_list_files_with_prefix.py (#5747)

* chore(deps): update dependency google-cloud-storage to v1.38.0 (#5640)

Test failures are unrelated

* chore(deps): update dependency pytest to v6.2.4 (#5787)

Co-authored-by: Dan Lee <71398022+dandhlee@users.noreply.github.com>

* chore(deps): update dependency google-cloud-pubsub to v2.4.2 (#5810)

Co-authored-by: Dan Lee <71398022+dandhlee@users.noreply.github.com>

* chore(deps): update dependency google-cloud-pubsub to v2.5.0 (#5845)

* chore(deps): update dependency google-api-python-client to v2.4.0 (#5820)

* chore(deps): update dependency google-api-python-client to v2.5.0 (#5857)

Co-authored-by: Dan Lee <71398022+dandhlee@users.noreply.github.com>

* chore(deps): update dependency google-api-python-client to v2.6.0 (#5890)

Co-authored-by: Dan Lee <71398022+dandhlee@users.noreply.github.com>

* chore(deps): update dependency google-api-python-client to v2.7.0 (#6062)

* chore(deps): update dependency google-cloud-pubsub to v2.6.0 (#6233)

* public access prevention samples & tests (#4971)

* public access prevention samples & tests

* linted files

* respnded to PR comments

* updated docstring

* updated docstring

* refactored fixture code

* renamed samples

* updated location for constants

* updated location for constants

* updated samples to conform to sample guidelines

* added license

* updated headers

* Updating requirements

* used f strings

* linted files

* f string suggestions from code review

Co-authored-by: Dina Graves Portman <dinagraves@google.com>

Co-authored-by: Dina Graves Portman <dinagraves@google.com>

* chore(deps): update dependency google-api-python-client to v2.11.0 (#6101)

* chore(deps): update dependency google-cloud-pubsub to v2.6.1 (#6284)

* chore(deps): update dependency backoff to v1.11.0 (#6285)

Co-authored-by: Dina Graves Portman <dinagraves@google.com>

* chore(deps): update dependency google-cloud-storage to v1.41.0 (#6197)

* chore(deps): update dependency google-cloud-storage to v1.41.0

* revert dataflow flex templates

* revert all dataflow changes

* correct my mistake with dataflow stuff

* restore dataflow file

Co-authored-by: Leah Cole <coleleah@google.com>

* chore(deps): update dependency google-api-python-client to v2.12.0 (#6269)

* chore(deps): update dependency google-api-python-client to v2.12.0

* revert dataflow

* revert dataflow

Co-authored-by: Leah Cole <coleleah@google.com>

* chore(deps): update dependency google-cloud-pubsub to v2.7.0 (#6486)

Co-authored-by: Dan Lee <71398022+dandhlee@users.noreply.github.com>
Co-authored-by: Anthonios Partheniou <partheniou@google.com>

* fix(storage): update service account email for acl tests (#6529)

* fix: update test email for acl tests. previous email was deleted in the project

* update to service account without project editor owner permissions

* update test email to avoid creating new service accounts

* docs(storage): update description in storage_download_file (#6553)

* Add storage move_blob sample and fix confusion with rename (#6554)

* Add storage move_blob sample and fix confusion with rename

* fix license heading issues

* Add descriptive comments to parameters

* Update storage/cloud-client/storage_move_file.py

* Apply suggestions from code review

Add print statement in except clause

Co-authored-by: cojenco <cathyo@google.com>
Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>

* chore(deps): update dependency backoff to v1.11.1 (#6571)

Co-authored-by: Leah E. Cole <6719667+leahecole@users.noreply.github.com>

* chore(deps): update dependency google-api-python-client to v2.15.0 (#6574)

[![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [google-api-python-client](https://togithub.com/googleapis/google-api-python-client) | `==2.12.0` -> `==2.15.0` | [![age](https://badges.renovateapi.com/packages/pypi/google-api-python-client/2.15.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/google-api-python-client/2.15.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/google-api-python-client/2.15.0/compatibility-slim/2.12.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/google-api-python-client/2.15.0/confidence-slim/2.12.0)](https://docs.renovatebot.com/merge-confidence/) |
| [google-api-python-client](https://togithub.com/googleapis/google-api-python-client) | `==2.11.0` -> `==2.15.0` | [![age](https://badges.renovateapi.com/packages/pypi/google-api-python-client/2.15.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/google-api-python-client/2.15.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/google-api-python-client/2.15.0/compatibility-slim/2.11.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/google-api-python-client/2.15.0/confidence-slim/2.11.0)](https://docs.renovatebot.com/merge-confidence/) |
| [google-api-python-client](https://togithub.com/googleapis/google-api-python-client) | `==2.1.0` -> `==2.15.0` | [![age](https://badges.renovateapi.com/packages/pypi/google-api-python-client/2.15.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/pypi/google-api-python-client/2.15.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/pypi/google-api-python-client/2.15.0/compatibility-slim/2.1.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/pypi/google-api-python-client/2.15.0/confidence-slim/2.1.0)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>googleapis/google-api-python-client</summary>

### [`v2.15.0`](https://togithub.com/googleapis/google-api-python-client/blob/master/CHANGELOG.md#&#8203;2150-httpswwwgithubcomgoogleapisgoogle-api-python-clientcomparev2141v2150-2021-07-27)

[Compare Source](https://togithub.com/googleapis/google-api-python-client/compare/v2.14.1...v2.15.0)

##### Features

-   **alertcenter:** update the api https://github.com/googleapis/google-api-python-client/commit/70810a52c85c6d0d6f00d7afb41c8608261eaebc ([a36e3b1](https://www.github.com/googleapis/google-api-python-client/commit/a36e3b130d609dfdc5b3ac0a70ff1b014c4bc75f))
-   **chat:** update the api https://github.com/googleapis/google-api-python-client/commit/a577cd0b71951176bbf849c1f7f139127205da54 ([a36e3b1](https://www.github.com/googleapis/google-api-python-client/commit/a36e3b130d609dfdc5b3ac0a70ff1b014c4bc75f))
-   **cloudbuild:** update the api https://github.com/googleapis/google-api-python-client/commit/9066056a8b106d441fb7686fe84359484d0d58bc ([a36e3b1](https://www.github.com/googleapis/google-api-python-client/commit/a36e3b130d609dfdc5b3ac0a70ff1b014c4bc75f))
-   **content:** update the api https://github.com/googleapis/google-api-python-client/commit/b123349da33c11c0172a8efb3fadef685a30e6e1 ([a36e3b1](https://www.github.com/googleapis/google-api-python-client/commit/a36e3b130d609dfdc5b3ac0a70ff1b014c4bc75f))
-   **displayvideo:** update the api https://github.com/googleapis/google-api-python-client/commit/c525d726ee6cffdd4bc7afd69080d5e52bae83a0 ([a36e3b1](https://www.github.com/googleapis/google-api-python-client/commit/a36e3b130d609dfdc5b3ac0a70ff1b014c4bc75f))
-   **dns:** update the api https://github.com/googleapis/google-api-python-client/commit/13436ccd2b835fda5cb86952ac4ea991ee8651d8 ([a36e3b1](https://www.github.com/googleapis/google-api-python-client/commit/a36e3b130d609dfdc5b3ac0a70ff1b014c4bc75f))
-   **eventarc:** update the api https://github.com/googleapis/google-api-python-client/commit/6be3394a64a5eb509f68ef779680fd36837708ee ([a36e3b1](https://www.github.com/googleapis/google-api-python-client/commit/a36e3b130d609dfdc5b3ac0a70ff1b014c4bc75f))
-   **file:** update the api https://github.com/googleapis/google-api-python-client/commit/817a0e636771445a988ef479bd52740f754b901a ([a36e3b1](https://www.github.com/googleapis/google-api-python-client/commit/a36e3b130d609dfdc5b3ac0a70ff1b014c4bc75f))
-   **monitoring:** update the api https://github.com/googleapis/google-api-python-client/commit/bd32149f308467f0f659119587afc77dcec65b14 ([a36e3b1](https://www.github.com/googleapis/google-api-python-client/commit/a36e3b130d609dfdc5b3ac0a70ff1b014c4bc75f))
-   **people:** update the api https://github.com/googleapis/google-api-python-client/commit/aa6b47df40c5289f33aef6fb6aa007df2d038e20 ([a36e3b1](https://www.github.com/googleapis/google-api-python-client/commit/a36e3b130d609dfdc5b3ac0a70ff1b014c4bc75f))
-   **retail:** update the api https://github.com/googleapis/google-api-python-client/commit/d39f06e2d77034bc837604a41dd52c577f158bf2 ([a36e3b1](https://www.github.com/googleapis/google-api-python-client/commit/a36e3b130d609dfdc5b3ac0a70ff1b014c4bc75f))
-   **securitycenter:** update the api https://github.com/googleapis/google-api-python-client/commit/999fab5178208639c9eef289f9f441052ed832fc ([a36e3b1](https://www.github.com/googleapis/google-api-python-client/commit/a36e3b130d609dfdc5b3ac0a70ff1b014c4bc75f))
-   **speech:** update the api https://github.com/googleapis/google-api-python-client/commit/3b2c0fa62b2a0c86bba1e97f1b18f93250dbd551 ([a36e3b1](https://www.github.com/googleapis/google-api-python-client/commit/a36e3b130d609dfdc5b3ac0a70ff1b014c4bc75f))
-   **sqladmin:** update the api https://github.com/googleapis/google-api-python-client/commit/cef24d829ab5be71563a2b668b8f6cf5dda2c8e4 ([a36e3b1](https://www.github.com/googleapis/google-api-python-client/commit/a36e3b130d609dfd…
  • Loading branch information
Show file tree
Hide file tree
Showing 111 changed files with 6,558 additions and 0 deletions.
10 changes: 10 additions & 0 deletions samples/snippets/README.md
@@ -0,0 +1,10 @@

For requester_pays_test.py, we need to use a different Storage bucket.

The test looks for an environment variable `REQUESTER_PAYS_TEST_BUCKET`.

Also, the service account for the test needs to have `Billing Project
Manager` role in order to make changes on buckets with requester pays
enabled.

We added that role to the test service account.
172 changes: 172 additions & 0 deletions samples/snippets/acl_test.py
@@ -0,0 +1,172 @@
# Copyright 2016 Google, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import os
import uuid

import backoff
from google.cloud import storage
from googleapiclient.errors import HttpError
import pytest

import storage_add_bucket_default_owner
import storage_add_bucket_owner
import storage_add_file_owner
import storage_print_bucket_acl
import storage_print_bucket_acl_for_user
import storage_print_file_acl
import storage_print_file_acl_for_user
import storage_remove_bucket_default_owner
import storage_remove_bucket_owner
import storage_remove_file_owner

# Typically we'd use a @example.com address, but GCS requires a real Google
# account. Retrieve a service account email with storage admin permissions.
TEST_EMAIL = (
"py38-storage-test"
"@python-docs-samples-tests.iam.gserviceaccount.com"
)


@pytest.fixture(scope="module")
def test_bucket():
"""Yields a bucket that is deleted after the test completes."""

# The new projects have uniform bucket-level access and our tests don't
# pass with those buckets. We need to use the old main project for now.
original_value = os.environ['GOOGLE_CLOUD_PROJECT']
os.environ['GOOGLE_CLOUD_PROJECT'] = os.environ['MAIN_GOOGLE_CLOUD_PROJECT']
bucket = None
while bucket is None or bucket.exists():
bucket_name = "acl-test-{}".format(uuid.uuid4())
bucket = storage.Client().bucket(bucket_name)
bucket.create()
yield bucket
bucket.delete(force=True)
# Set the value back.
os.environ['GOOGLE_CLOUD_PROJECT'] = original_value


@pytest.fixture
def test_blob(test_bucket):
"""Yields a blob that is deleted after the test completes."""
bucket = test_bucket
blob = bucket.blob("storage_acl_test_sigil-{}".format(uuid.uuid4()))
blob.upload_from_string("Hello, is it me you're looking for?")
yield blob


def test_print_bucket_acl(test_bucket, capsys):
storage_print_bucket_acl.print_bucket_acl(test_bucket.name)
out, _ = capsys.readouterr()
assert out


def test_print_bucket_acl_for_user(test_bucket, capsys):
test_bucket.acl.user(TEST_EMAIL).grant_owner()
test_bucket.acl.save()

storage_print_bucket_acl_for_user.print_bucket_acl_for_user(
test_bucket.name, TEST_EMAIL
)

out, _ = capsys.readouterr()
assert "OWNER" in out


@backoff.on_exception(backoff.expo, HttpError, max_time=60)
def test_add_bucket_owner(test_bucket):
storage_add_bucket_owner.add_bucket_owner(test_bucket.name, TEST_EMAIL)

test_bucket.acl.reload()
assert "OWNER" in test_bucket.acl.user(TEST_EMAIL).get_roles()


@backoff.on_exception(backoff.expo, HttpError, max_time=60)
def test_remove_bucket_owner(test_bucket):
test_bucket.acl.user(TEST_EMAIL).grant_owner()
test_bucket.acl.save()

storage_remove_bucket_owner.remove_bucket_owner(
test_bucket.name, TEST_EMAIL)

test_bucket.acl.reload()
assert "OWNER" not in test_bucket.acl.user(TEST_EMAIL).get_roles()


@backoff.on_exception(backoff.expo, HttpError, max_time=60)
def test_add_bucket_default_owner(test_bucket):
storage_add_bucket_default_owner.add_bucket_default_owner(
test_bucket.name, TEST_EMAIL
)

test_bucket.default_object_acl.reload()
roles = test_bucket.default_object_acl.user(TEST_EMAIL).get_roles()
assert "OWNER" in roles


@backoff.on_exception(backoff.expo, HttpError, max_time=60)
def test_remove_bucket_default_owner(test_bucket):
test_bucket.acl.user(TEST_EMAIL).grant_owner()
test_bucket.acl.save()

storage_remove_bucket_default_owner.remove_bucket_default_owner(
test_bucket.name, TEST_EMAIL
)

test_bucket.default_object_acl.reload()
roles = test_bucket.default_object_acl.user(TEST_EMAIL).get_roles()
assert "OWNER" not in roles


def test_print_blob_acl(test_blob, capsys):
storage_print_file_acl.print_blob_acl(
test_blob.bucket.name, test_blob.name)
out, _ = capsys.readouterr()
assert out


@backoff.on_exception(backoff.expo, HttpError, max_time=60)
def test_print_blob_acl_for_user(test_blob, capsys):
test_blob.acl.user(TEST_EMAIL).grant_owner()
test_blob.acl.save()

storage_print_file_acl_for_user.print_blob_acl_for_user(
test_blob.bucket.name, test_blob.name, TEST_EMAIL
)

out, _ = capsys.readouterr()
assert "OWNER" in out


@backoff.on_exception(backoff.expo, HttpError, max_time=60)
def test_add_blob_owner(test_blob):
storage_add_file_owner.add_blob_owner(
test_blob.bucket.name, test_blob.name, TEST_EMAIL)

test_blob.acl.reload()
assert "OWNER" in test_blob.acl.user(TEST_EMAIL).get_roles()


@backoff.on_exception(backoff.expo, HttpError, max_time=60)
def test_remove_blob_owner(test_blob):
test_blob.acl.user(TEST_EMAIL).grant_owner()
test_blob.acl.save()

storage_remove_file_owner.remove_blob_owner(
test_blob.bucket.name, test_blob.name, TEST_EMAIL
)

test_blob.acl.reload()
assert "OWNER" not in test_blob.acl.user(TEST_EMAIL).get_roles()
176 changes: 176 additions & 0 deletions samples/snippets/bucket_lock_test.py
@@ -0,0 +1,176 @@
# Copyright 2018 Google Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import time
import uuid

from google.cloud import storage
import pytest

import storage_disable_default_event_based_hold
import storage_enable_default_event_based_hold
import storage_get_default_event_based_hold
import storage_get_retention_policy
import storage_lock_retention_policy
import storage_release_event_based_hold
import storage_release_temporary_hold
import storage_remove_retention_policy
import storage_set_event_based_hold
import storage_set_retention_policy
import storage_set_temporary_hold


BLOB_NAME = "storage_snippets_test_sigil"
BLOB_CONTENT = "Hello, is it me you're looking for?"
# Retention policy for 5 seconds
RETENTION_POLICY = 5


@pytest.fixture
def bucket():
"""Yields a bucket that is deleted after the test completes."""
bucket = None
while bucket is None or bucket.exists():
bucket_name = "bucket-lock-{}".format(uuid.uuid4())
bucket = storage.Client().bucket(bucket_name)
bucket.create()
yield bucket
bucket.delete(force=True)


def test_retention_policy_no_lock(bucket, capsys):
storage_set_retention_policy.set_retention_policy(
bucket.name, RETENTION_POLICY
)
bucket.reload()

assert bucket.retention_period is RETENTION_POLICY
assert bucket.retention_policy_effective_time is not None
assert bucket.retention_policy_locked is None

storage_get_retention_policy.get_retention_policy(bucket.name)
out, _ = capsys.readouterr()
assert "Retention Policy for {}".format(bucket.name) in out
assert "Retention Period: 5" in out
assert "Effective Time: " in out
assert "Retention Policy is locked" not in out

blob = bucket.blob(BLOB_NAME)
blob.upload_from_string(BLOB_CONTENT)

assert blob.retention_expiration_time is not None

storage_remove_retention_policy.remove_retention_policy(bucket.name)
bucket.reload()
assert bucket.retention_period is None

time.sleep(RETENTION_POLICY)


def test_retention_policy_lock(bucket, capsys):
storage_set_retention_policy.set_retention_policy(
bucket.name, RETENTION_POLICY
)
bucket.reload()
assert bucket.retention_policy_locked is None

storage_lock_retention_policy.lock_retention_policy(bucket.name)
bucket.reload()
assert bucket.retention_policy_locked is True

storage_get_retention_policy.get_retention_policy(bucket.name)
out, _ = capsys.readouterr()
assert "Retention Policy is locked" in out


def test_enable_disable_bucket_default_event_based_hold(bucket, capsys):
storage_get_default_event_based_hold.get_default_event_based_hold(
bucket.name
)
out, _ = capsys.readouterr()
assert (
"Default event-based hold is not enabled for {}".format(bucket.name)
in out
)
assert (
"Default event-based hold is enabled for {}".format(bucket.name)
not in out
)

storage_enable_default_event_based_hold.enable_default_event_based_hold(
bucket.name
)
bucket.reload()

assert bucket.default_event_based_hold is True

storage_get_default_event_based_hold.get_default_event_based_hold(
bucket.name
)
out, _ = capsys.readouterr()
assert (
"Default event-based hold is enabled for {}".format(bucket.name) in out
)

# Changes to the bucket will be readable immediately after writing,
# but configuration changes may take time to propagate.
time.sleep(10)

blob = bucket.blob(BLOB_NAME)
blob.upload_from_string(BLOB_CONTENT)
assert blob.event_based_hold is True

storage_release_event_based_hold.release_event_based_hold(
bucket.name, blob.name
)
blob.reload()
assert blob.event_based_hold is False

storage_disable_default_event_based_hold.disable_default_event_based_hold(
bucket.name
)
bucket.reload()
assert bucket.default_event_based_hold is False


def test_enable_disable_temporary_hold(bucket):
blob = bucket.blob(BLOB_NAME)
blob.upload_from_string(BLOB_CONTENT)
assert blob.temporary_hold is None

storage_set_temporary_hold.set_temporary_hold(bucket.name, blob.name)
blob.reload()
assert blob.temporary_hold is True

storage_release_temporary_hold.release_temporary_hold(
bucket.name, blob.name
)
blob.reload()
assert blob.temporary_hold is False


def test_enable_disable_event_based_hold(bucket):
blob = bucket.blob(BLOB_NAME)
blob.upload_from_string(BLOB_CONTENT)
assert blob.event_based_hold is None

storage_set_event_based_hold.set_event_based_hold(bucket.name, blob.name)
blob.reload()
assert blob.event_based_hold is True

storage_release_event_based_hold.release_event_based_hold(
bucket.name, blob.name
)
blob.reload()
assert blob.event_based_hold is False

0 comments on commit e08f638

Please sign in to comment.