diff --git a/.github/.OwlBot.lock.yaml b/.github/.OwlBot.lock.yaml
index a3da1b0d4..40bf99731 100644
--- a/.github/.OwlBot.lock.yaml
+++ b/.github/.OwlBot.lock.yaml
@@ -13,5 +13,5 @@
# limitations under the License.
docker:
image: gcr.io/cloud-devrel-public-resources/owlbot-python:latest
- digest: sha256:3e3800bb100af5d7f9e810d48212b37812c1856d20ffeafb99ebe66461b61fc7
-# created: 2023-08-02T10:53:29.114535628Z
+ digest: sha256:230f7fe8a0d2ed81a519cfc15c6bb11c5b46b9fb449b8b1219b3771bcb520ad2
+# created: 2023-12-09T15:16:25.430769578Z
diff --git a/.github/blunderbuss.yml b/.github/blunderbuss.yml
new file mode 100644
index 000000000..687c7f91b
--- /dev/null
+++ b/.github/blunderbuss.yml
@@ -0,0 +1,6 @@
+# Configuration for the Blunderbuss GitHub app. For more info see
+# https://github.com/googleapis/repo-automation-bots/tree/main/packages/blunderbuss
+assign_issues:
+ - pradn
+assign_prs:
+ - pradn
\ No newline at end of file
diff --git a/.github/sync-repo-settings.yaml b/.github/sync-repo-settings.yaml
index edda0b570..77c1a4fb5 100644
--- a/.github/sync-repo-settings.yaml
+++ b/.github/sync-repo-settings.yaml
@@ -15,4 +15,16 @@ branchProtectionRules:
- 'Samples - Python 3.8'
- 'Samples - Python 3.9'
- 'Samples - Python 3.10'
+ - 'Samples - Python 3.11'
+ - 'Samples - Python 3.12'
- 'OwlBot Post Processor'
+ - 'docs'
+ - 'docfx'
+ - 'lint'
+ - 'unit (3.7)'
+ - 'unit (3.8)'
+ - 'unit (3.9)'
+ - 'unit (3.10)'
+ - 'unit (3.11)'
+ - 'unit (3.12)'
+ - 'cover'
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index e97d89e48..698fbc5c9 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -8,9 +8,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
- name: Setup Python
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: "3.9"
- name: Install nox
@@ -24,11 +24,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
- name: Setup Python
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
- python-version: "3.9"
+ python-version: "3.10"
- name: Install nox
run: |
python -m pip install --upgrade setuptools pip wheel
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 16d5a9e90..4866193af 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -8,9 +8,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
- name: Setup Python
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: "3.8"
- name: Install nox
diff --git a/.github/workflows/unittest.yml b/.github/workflows/unittest.yml
index 8057a7691..d6ca65627 100644
--- a/.github/workflows/unittest.yml
+++ b/.github/workflows/unittest.yml
@@ -8,12 +8,12 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
- python: ['3.7', '3.8', '3.9', '3.10', '3.11']
+ python: ['3.7', '3.8', '3.9', '3.10', '3.11', '3.12']
steps:
- name: Checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
- name: Setup Python
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python }}
- name: Install nox
@@ -37,9 +37,9 @@ jobs:
- unit
steps:
- name: Checkout
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
- name: Setup Python
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: "3.8"
- name: Install coverage
diff --git a/.gitignore b/.gitignore
index b4243ced7..d083ea1dd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -50,6 +50,7 @@ docs.metadata
# Virtual environment
env/
+venv/
# Test logs
coverage.xml
diff --git a/.kokoro/requirements.txt b/.kokoro/requirements.txt
index 029bd342d..e5c1ffca9 100644
--- a/.kokoro/requirements.txt
+++ b/.kokoro/requirements.txt
@@ -4,91 +4,75 @@
#
# pip-compile --allow-unsafe --generate-hashes requirements.in
#
-argcomplete==2.0.0 \
- --hash=sha256:6372ad78c89d662035101418ae253668445b391755cfe94ea52f1b9d22425b20 \
- --hash=sha256:cffa11ea77999bb0dd27bb25ff6dc142a6796142f68d45b1a26b11f58724561e
+argcomplete==3.1.4 \
+ --hash=sha256:72558ba729e4c468572609817226fb0a6e7e9a0a7d477b882be168c0b4a62b94 \
+ --hash=sha256:fbe56f8cda08aa9a04b307d8482ea703e96a6a801611acb4be9bf3942017989f
# via nox
-attrs==22.1.0 \
- --hash=sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6 \
- --hash=sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c
+attrs==23.1.0 \
+ --hash=sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04 \
+ --hash=sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015
# via gcp-releasetool
-bleach==5.0.1 \
- --hash=sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a \
- --hash=sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c
- # via readme-renderer
-cachetools==5.2.0 \
- --hash=sha256:6a94c6402995a99c3970cc7e4884bb60b4a8639938157eeed436098bf9831757 \
- --hash=sha256:f9f17d2aec496a9aa6b76f53e3b614c965223c061982d434d160f930c698a9db
+cachetools==5.3.2 \
+ --hash=sha256:086ee420196f7b2ab9ca2db2520aca326318b68fe5ba8bc4d49cca91add450f2 \
+ --hash=sha256:861f35a13a451f94e301ce2bec7cac63e881232ccce7ed67fab9b5df4d3beaa1
# via google-auth
certifi==2023.7.22 \
--hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \
--hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9
# via requests
-cffi==1.15.1 \
- --hash=sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5 \
- --hash=sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef \
- --hash=sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104 \
- --hash=sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426 \
- --hash=sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405 \
- --hash=sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375 \
- --hash=sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a \
- --hash=sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e \
- --hash=sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc \
- --hash=sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf \
- --hash=sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185 \
- --hash=sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497 \
- --hash=sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3 \
- --hash=sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35 \
- --hash=sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c \
- --hash=sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83 \
- --hash=sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21 \
- --hash=sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca \
- --hash=sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984 \
- --hash=sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac \
- --hash=sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd \
- --hash=sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee \
- --hash=sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a \
- --hash=sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2 \
- --hash=sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192 \
- --hash=sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7 \
- --hash=sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585 \
- --hash=sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f \
- --hash=sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e \
- --hash=sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27 \
- --hash=sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b \
- --hash=sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e \
- --hash=sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e \
- --hash=sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d \
- --hash=sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c \
- --hash=sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415 \
- --hash=sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82 \
- --hash=sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02 \
- --hash=sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314 \
- --hash=sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325 \
- --hash=sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c \
- --hash=sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3 \
- --hash=sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914 \
- --hash=sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045 \
- --hash=sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d \
- --hash=sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9 \
- --hash=sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5 \
- --hash=sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2 \
- --hash=sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c \
- --hash=sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3 \
- --hash=sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2 \
- --hash=sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8 \
- --hash=sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d \
- --hash=sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d \
- --hash=sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9 \
- --hash=sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162 \
- --hash=sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76 \
- --hash=sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4 \
- --hash=sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e \
- --hash=sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9 \
- --hash=sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6 \
- --hash=sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b \
- --hash=sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01 \
- --hash=sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0
+cffi==1.16.0 \
+ --hash=sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc \
+ --hash=sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a \
+ --hash=sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417 \
+ --hash=sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab \
+ --hash=sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520 \
+ --hash=sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36 \
+ --hash=sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743 \
+ --hash=sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8 \
+ --hash=sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed \
+ --hash=sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684 \
+ --hash=sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56 \
+ --hash=sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324 \
+ --hash=sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d \
+ --hash=sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235 \
+ --hash=sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e \
+ --hash=sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088 \
+ --hash=sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000 \
+ --hash=sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7 \
+ --hash=sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e \
+ --hash=sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673 \
+ --hash=sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c \
+ --hash=sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe \
+ --hash=sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2 \
+ --hash=sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098 \
+ --hash=sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8 \
+ --hash=sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a \
+ --hash=sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0 \
+ --hash=sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b \
+ --hash=sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896 \
+ --hash=sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e \
+ --hash=sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9 \
+ --hash=sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2 \
+ --hash=sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b \
+ --hash=sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6 \
+ --hash=sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404 \
+ --hash=sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f \
+ --hash=sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0 \
+ --hash=sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4 \
+ --hash=sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc \
+ --hash=sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936 \
+ --hash=sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba \
+ --hash=sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872 \
+ --hash=sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb \
+ --hash=sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614 \
+ --hash=sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1 \
+ --hash=sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d \
+ --hash=sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969 \
+ --hash=sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b \
+ --hash=sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4 \
+ --hash=sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627 \
+ --hash=sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956 \
+ --hash=sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357
# via cryptography
charset-normalizer==2.1.1 \
--hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \
@@ -109,78 +93,74 @@ colorlog==6.7.0 \
# via
# gcp-docuploader
# nox
-commonmark==0.9.1 \
- --hash=sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60 \
- --hash=sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9
- # via rich
-cryptography==41.0.3 \
- --hash=sha256:0d09fb5356f975974dbcb595ad2d178305e5050656affb7890a1583f5e02a306 \
- --hash=sha256:23c2d778cf829f7d0ae180600b17e9fceea3c2ef8b31a99e3c694cbbf3a24b84 \
- --hash=sha256:3fb248989b6363906827284cd20cca63bb1a757e0a2864d4c1682a985e3dca47 \
- --hash=sha256:41d7aa7cdfded09b3d73a47f429c298e80796c8e825ddfadc84c8a7f12df212d \
- --hash=sha256:42cb413e01a5d36da9929baa9d70ca90d90b969269e5a12d39c1e0d475010116 \
- --hash=sha256:4c2f0d35703d61002a2bbdcf15548ebb701cfdd83cdc12471d2bae80878a4207 \
- --hash=sha256:4fd871184321100fb400d759ad0cddddf284c4b696568204d281c902fc7b0d81 \
- --hash=sha256:5259cb659aa43005eb55a0e4ff2c825ca111a0da1814202c64d28a985d33b087 \
- --hash=sha256:57a51b89f954f216a81c9d057bf1a24e2f36e764a1ca9a501a6964eb4a6800dd \
- --hash=sha256:652627a055cb52a84f8c448185922241dd5217443ca194d5739b44612c5e6507 \
- --hash=sha256:67e120e9a577c64fe1f611e53b30b3e69744e5910ff3b6e97e935aeb96005858 \
- --hash=sha256:6af1c6387c531cd364b72c28daa29232162010d952ceb7e5ca8e2827526aceae \
- --hash=sha256:6d192741113ef5e30d89dcb5b956ef4e1578f304708701b8b73d38e3e1461f34 \
- --hash=sha256:7efe8041897fe7a50863e51b77789b657a133c75c3b094e51b5e4b5cec7bf906 \
- --hash=sha256:84537453d57f55a50a5b6835622ee405816999a7113267739a1b4581f83535bd \
- --hash=sha256:8f09daa483aedea50d249ef98ed500569841d6498aa9c9f4b0531b9964658922 \
- --hash=sha256:95dd7f261bb76948b52a5330ba5202b91a26fbac13ad0e9fc8a3ac04752058c7 \
- --hash=sha256:a74fbcdb2a0d46fe00504f571a2a540532f4c188e6ccf26f1f178480117b33c4 \
- --hash=sha256:a983e441a00a9d57a4d7c91b3116a37ae602907a7618b882c8013b5762e80574 \
- --hash=sha256:ab8de0d091acbf778f74286f4989cf3d1528336af1b59f3e5d2ebca8b5fe49e1 \
- --hash=sha256:aeb57c421b34af8f9fe830e1955bf493a86a7996cc1338fe41b30047d16e962c \
- --hash=sha256:ce785cf81a7bdade534297ef9e490ddff800d956625020ab2ec2780a556c313e \
- --hash=sha256:d0d651aa754ef58d75cec6edfbd21259d93810b73f6ec246436a21b7841908de
+cryptography==41.0.6 \
+ --hash=sha256:068bc551698c234742c40049e46840843f3d98ad7ce265fd2bd4ec0d11306596 \
+ --hash=sha256:0f27acb55a4e77b9be8d550d762b0513ef3fc658cd3eb15110ebbcbd626db12c \
+ --hash=sha256:2132d5865eea673fe6712c2ed5fb4fa49dba10768bb4cc798345748380ee3660 \
+ --hash=sha256:3288acccef021e3c3c10d58933f44e8602cf04dba96d9796d70d537bb2f4bbc4 \
+ --hash=sha256:35f3f288e83c3f6f10752467c48919a7a94b7d88cc00b0668372a0d2ad4f8ead \
+ --hash=sha256:398ae1fc711b5eb78e977daa3cbf47cec20f2c08c5da129b7a296055fbb22aed \
+ --hash=sha256:422e3e31d63743855e43e5a6fcc8b4acab860f560f9321b0ee6269cc7ed70cc3 \
+ --hash=sha256:48783b7e2bef51224020efb61b42704207dde583d7e371ef8fc2a5fb6c0aabc7 \
+ --hash=sha256:4d03186af98b1c01a4eda396b137f29e4e3fb0173e30f885e27acec8823c1b09 \
+ --hash=sha256:5daeb18e7886a358064a68dbcaf441c036cbdb7da52ae744e7b9207b04d3908c \
+ --hash=sha256:60e746b11b937911dc70d164060d28d273e31853bb359e2b2033c9e93e6f3c43 \
+ --hash=sha256:742ae5e9a2310e9dade7932f9576606836ed174da3c7d26bc3d3ab4bd49b9f65 \
+ --hash=sha256:7e00fb556bda398b99b0da289ce7053639d33b572847181d6483ad89835115f6 \
+ --hash=sha256:85abd057699b98fce40b41737afb234fef05c67e116f6f3650782c10862c43da \
+ --hash=sha256:8efb2af8d4ba9dbc9c9dd8f04d19a7abb5b49eab1f3694e7b5a16a5fc2856f5c \
+ --hash=sha256:ae236bb8760c1e55b7a39b6d4d32d2279bc6c7c8500b7d5a13b6fb9fc97be35b \
+ --hash=sha256:afda76d84b053923c27ede5edc1ed7d53e3c9f475ebaf63c68e69f1403c405a8 \
+ --hash=sha256:b27a7fd4229abef715e064269d98a7e2909ebf92eb6912a9603c7e14c181928c \
+ --hash=sha256:b648fe2a45e426aaee684ddca2632f62ec4613ef362f4d681a9a6283d10e079d \
+ --hash=sha256:c5a550dc7a3b50b116323e3d376241829fd326ac47bc195e04eb33a8170902a9 \
+ --hash=sha256:da46e2b5df770070412c46f87bac0849b8d685c5f2679771de277a422c7d0b86 \
+ --hash=sha256:f39812f70fc5c71a15aa3c97b2bbe213c3f2a460b79bd21c40d033bb34a9bf36 \
+ --hash=sha256:ff369dd19e8fe0528b02e8df9f2aeb2479f89b1270d90f96a63500afe9af5cae
# via
# gcp-releasetool
# secretstorage
-distlib==0.3.6 \
- --hash=sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46 \
- --hash=sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e
+distlib==0.3.7 \
+ --hash=sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057 \
+ --hash=sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8
# via virtualenv
-docutils==0.19 \
- --hash=sha256:33995a6753c30b7f577febfc2c50411fec6aac7f7ffeb7c4cfe5991072dcf9e6 \
- --hash=sha256:5e1de4d849fee02c63b040a4a3fd567f4ab104defd8a5511fbbc24a8a017efbc
+docutils==0.20.1 \
+ --hash=sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6 \
+ --hash=sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b
# via readme-renderer
-filelock==3.8.0 \
- --hash=sha256:55447caa666f2198c5b6b13a26d2084d26fa5b115c00d065664b2124680c4edc \
- --hash=sha256:617eb4e5eedc82fc5f47b6d61e4d11cb837c56cb4544e39081099fa17ad109d4
+filelock==3.13.1 \
+ --hash=sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e \
+ --hash=sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c
# via virtualenv
-gcp-docuploader==0.6.4 \
- --hash=sha256:01486419e24633af78fd0167db74a2763974765ee8078ca6eb6964d0ebd388af \
- --hash=sha256:70861190c123d907b3b067da896265ead2eeb9263969d6955c9e0bb091b5ccbf
+gcp-docuploader==0.6.5 \
+ --hash=sha256:30221d4ac3e5a2b9c69aa52fdbef68cc3f27d0e6d0d90e220fc024584b8d2318 \
+ --hash=sha256:b7458ef93f605b9d46a4bf3a8dc1755dad1f31d030c8679edf304e343b347eea
# via -r requirements.in
-gcp-releasetool==1.10.5 \
- --hash=sha256:174b7b102d704b254f2a26a3eda2c684fd3543320ec239baf771542a2e58e109 \
- --hash=sha256:e29d29927fe2ca493105a82958c6873bb2b90d503acac56be2c229e74de0eec9
+gcp-releasetool==1.16.0 \
+ --hash=sha256:27bf19d2e87aaa884096ff941aa3c592c482be3d6a2bfe6f06afafa6af2353e3 \
+ --hash=sha256:a316b197a543fd036209d0caba7a8eb4d236d8e65381c80cbc6d7efaa7606d63
# via -r requirements.in
-google-api-core==2.10.2 \
- --hash=sha256:10c06f7739fe57781f87523375e8e1a3a4674bf6392cd6131a3222182b971320 \
- --hash=sha256:34f24bd1d5f72a8c4519773d99ca6bf080a6c4e041b4e9f024fe230191dda62e
+google-api-core==2.12.0 \
+ --hash=sha256:c22e01b1e3c4dcd90998494879612c38d0a3411d1f7b679eb89e2abe3ce1f553 \
+ --hash=sha256:ec6054f7d64ad13b41e43d96f735acbd763b0f3b695dabaa2d579673f6a6e160
# via
# google-cloud-core
# google-cloud-storage
-google-auth==2.14.1 \
- --hash=sha256:ccaa901f31ad5cbb562615eb8b664b3dd0bf5404a67618e642307f00613eda4d \
- --hash=sha256:f5d8701633bebc12e0deea4df8abd8aff31c28b355360597f7f2ee60f2e4d016
+google-auth==2.23.4 \
+ --hash=sha256:79905d6b1652187def79d491d6e23d0cbb3a21d3c7ba0dbaa9c8a01906b13ff3 \
+ --hash=sha256:d4bbc92fe4b8bfd2f3e8d88e5ba7085935da208ee38a134fc280e7ce682a05f2
# via
# gcp-releasetool
# google-api-core
# google-cloud-core
# google-cloud-storage
-google-cloud-core==2.3.2 \
- --hash=sha256:8417acf6466be2fa85123441696c4badda48db314c607cf1e5d543fa8bdc22fe \
- --hash=sha256:b9529ee7047fd8d4bf4a2182de619154240df17fbe60ead399078c1ae152af9a
+google-cloud-core==2.3.3 \
+ --hash=sha256:37b80273c8d7eee1ae816b3a20ae43585ea50506cb0e60f3cf5be5f87f1373cb \
+ --hash=sha256:fbd11cad3e98a7e5b0343dc07cb1039a5ffd7a5bb96e1f1e27cee4bda4a90863
# via google-cloud-storage
-google-cloud-storage==2.6.0 \
- --hash=sha256:104ca28ae61243b637f2f01455cc8a05e8f15a2a18ced96cb587241cdd3820f5 \
- --hash=sha256:4ad0415ff61abdd8bb2ae81c1f8f7ec7d91a1011613f2db87c614c550f97bfe9
+google-cloud-storage==2.13.0 \
+ --hash=sha256:ab0bf2e1780a1b74cf17fccb13788070b729f50c252f0c94ada2aae0ca95437d \
+ --hash=sha256:f62dc4c7b6cd4360d072e3deb28035fbdad491ac3d9b0b1815a12daea10f37c7
# via gcp-docuploader
google-crc32c==1.5.0 \
--hash=sha256:024894d9d3cfbc5943f8f230e23950cd4906b2fe004c72e29b209420a1e6b05a \
@@ -251,29 +231,31 @@ google-crc32c==1.5.0 \
--hash=sha256:f583edb943cf2e09c60441b910d6a20b4d9d626c75a36c8fcac01a6c96c01183 \
--hash=sha256:fd8536e902db7e365f49e7d9029283403974ccf29b13fc7028b97e2295b33556 \
--hash=sha256:fe70e325aa68fa4b5edf7d1a4b6f691eb04bbccac0ace68e34820d283b5f80d4
- # via google-resumable-media
-google-resumable-media==2.4.0 \
- --hash=sha256:2aa004c16d295c8f6c33b2b4788ba59d366677c0a25ae7382436cb30f776deaa \
- --hash=sha256:8d5518502f92b9ecc84ac46779bd4f09694ecb3ba38a3e7ca737a86d15cbca1f
+ # via
+ # google-cloud-storage
+ # google-resumable-media
+google-resumable-media==2.6.0 \
+ --hash=sha256:972852f6c65f933e15a4a210c2b96930763b47197cdf4aa5f5bea435efb626e7 \
+ --hash=sha256:fc03d344381970f79eebb632a3c18bb1828593a2dc5572b5f90115ef7d11e81b
# via google-cloud-storage
-googleapis-common-protos==1.57.0 \
- --hash=sha256:27a849d6205838fb6cc3c1c21cb9800707a661bb21c6ce7fb13e99eb1f8a0c46 \
- --hash=sha256:a9f4a1d7f6d9809657b7f1316a1aa527f6664891531bcfcc13b6696e685f443c
+googleapis-common-protos==1.61.0 \
+ --hash=sha256:22f1915393bb3245343f6efe87f6fe868532efc12aa26b391b15132e1279f1c0 \
+ --hash=sha256:8a64866a97f6304a7179873a465d6eee97b7a24ec6cfd78e0f575e96b821240b
# via google-api-core
idna==3.4 \
--hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \
--hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2
# via requests
-importlib-metadata==5.0.0 \
- --hash=sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab \
- --hash=sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43
+importlib-metadata==6.8.0 \
+ --hash=sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb \
+ --hash=sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743
# via
# -r requirements.in
# keyring
# twine
-jaraco-classes==3.2.3 \
- --hash=sha256:2353de3288bc6b82120752201c6b1c1a14b058267fa424ed5ce5984e3b922158 \
- --hash=sha256:89559fa5c1d3c34eff6f631ad80bb21f378dbcbb35dd161fd2c6b93f5be2f98a
+jaraco-classes==3.3.0 \
+ --hash=sha256:10afa92b6743f25c0cf5f37c6bb6e18e2c5bb84a16527ccfc0040ea377e7aaeb \
+ --hash=sha256:c063dd08e89217cee02c8d5e5ec560f2c8ce6cdc2fcdc2e68f7b2e5547ed3621
# via keyring
jeepney==0.8.0 \
--hash=sha256:5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806 \
@@ -285,75 +267,121 @@ jinja2==3.1.2 \
--hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \
--hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61
# via gcp-releasetool
-keyring==23.11.0 \
- --hash=sha256:3dd30011d555f1345dec2c262f0153f2f0ca6bca041fb1dc4588349bb4c0ac1e \
- --hash=sha256:ad192263e2cdd5f12875dedc2da13534359a7e760e77f8d04b50968a821c2361
+keyring==24.2.0 \
+ --hash=sha256:4901caaf597bfd3bbd78c9a0c7c4c29fcd8310dab2cffefe749e916b6527acd6 \
+ --hash=sha256:ca0746a19ec421219f4d713f848fa297a661a8a8c1504867e55bfb5e09091509
# via
# gcp-releasetool
# twine
-markupsafe==2.1.1 \
- --hash=sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003 \
- --hash=sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88 \
- --hash=sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5 \
- --hash=sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7 \
- --hash=sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a \
- --hash=sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603 \
- --hash=sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1 \
- --hash=sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135 \
- --hash=sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247 \
- --hash=sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6 \
- --hash=sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601 \
- --hash=sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77 \
- --hash=sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02 \
- --hash=sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e \
- --hash=sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63 \
- --hash=sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f \
- --hash=sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980 \
- --hash=sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b \
- --hash=sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812 \
- --hash=sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff \
- --hash=sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96 \
- --hash=sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1 \
- --hash=sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925 \
- --hash=sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a \
- --hash=sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6 \
- --hash=sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e \
- --hash=sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f \
- --hash=sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4 \
- --hash=sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f \
- --hash=sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3 \
- --hash=sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c \
- --hash=sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a \
- --hash=sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417 \
- --hash=sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a \
- --hash=sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a \
- --hash=sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37 \
- --hash=sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452 \
- --hash=sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933 \
- --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \
- --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7
+markdown-it-py==3.0.0 \
+ --hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 \
+ --hash=sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb
+ # via rich
+markupsafe==2.1.3 \
+ --hash=sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e \
+ --hash=sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e \
+ --hash=sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431 \
+ --hash=sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686 \
+ --hash=sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c \
+ --hash=sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559 \
+ --hash=sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc \
+ --hash=sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb \
+ --hash=sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939 \
+ --hash=sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c \
+ --hash=sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0 \
+ --hash=sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4 \
+ --hash=sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9 \
+ --hash=sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575 \
+ --hash=sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba \
+ --hash=sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d \
+ --hash=sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd \
+ --hash=sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3 \
+ --hash=sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00 \
+ --hash=sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155 \
+ --hash=sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac \
+ --hash=sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52 \
+ --hash=sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f \
+ --hash=sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8 \
+ --hash=sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b \
+ --hash=sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007 \
+ --hash=sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24 \
+ --hash=sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea \
+ --hash=sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198 \
+ --hash=sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0 \
+ --hash=sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee \
+ --hash=sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be \
+ --hash=sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2 \
+ --hash=sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1 \
+ --hash=sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707 \
+ --hash=sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6 \
+ --hash=sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c \
+ --hash=sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58 \
+ --hash=sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823 \
+ --hash=sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779 \
+ --hash=sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636 \
+ --hash=sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c \
+ --hash=sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad \
+ --hash=sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee \
+ --hash=sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc \
+ --hash=sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2 \
+ --hash=sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48 \
+ --hash=sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7 \
+ --hash=sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e \
+ --hash=sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b \
+ --hash=sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa \
+ --hash=sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5 \
+ --hash=sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e \
+ --hash=sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb \
+ --hash=sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9 \
+ --hash=sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57 \
+ --hash=sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc \
+ --hash=sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc \
+ --hash=sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2 \
+ --hash=sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11
# via jinja2
-more-itertools==9.0.0 \
- --hash=sha256:250e83d7e81d0c87ca6bd942e6aeab8cc9daa6096d12c5308f3f92fa5e5c1f41 \
- --hash=sha256:5a6257e40878ef0520b1803990e3e22303a41b5714006c32a3fd8304b26ea1ab
+mdurl==0.1.2 \
+ --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \
+ --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba
+ # via markdown-it-py
+more-itertools==10.1.0 \
+ --hash=sha256:626c369fa0eb37bac0291bce8259b332fd59ac792fa5497b59837309cd5b114a \
+ --hash=sha256:64e0735fcfdc6f3464ea133afe8ea4483b1c5fe3a3d69852e6503b43a0b222e6
# via jaraco-classes
-nox==2022.11.21 \
- --hash=sha256:0e41a990e290e274cb205a976c4c97ee3c5234441a8132c8c3fd9ea3c22149eb \
- --hash=sha256:e21c31de0711d1274ca585a2c5fde36b1aa962005ba8e9322bf5eeed16dcd684
+nh3==0.2.14 \
+ --hash=sha256:116c9515937f94f0057ef50ebcbcc10600860065953ba56f14473ff706371873 \
+ --hash=sha256:18415df36db9b001f71a42a3a5395db79cf23d556996090d293764436e98e8ad \
+ --hash=sha256:203cac86e313cf6486704d0ec620a992c8bc164c86d3a4fd3d761dd552d839b5 \
+ --hash=sha256:2b0be5c792bd43d0abef8ca39dd8acb3c0611052ce466d0401d51ea0d9aa7525 \
+ --hash=sha256:377aaf6a9e7c63962f367158d808c6a1344e2b4f83d071c43fbd631b75c4f0b2 \
+ --hash=sha256:525846c56c2bcd376f5eaee76063ebf33cf1e620c1498b2a40107f60cfc6054e \
+ --hash=sha256:5529a3bf99402c34056576d80ae5547123f1078da76aa99e8ed79e44fa67282d \
+ --hash=sha256:7771d43222b639a4cd9e341f870cee336b9d886de1ad9bec8dddab22fe1de450 \
+ --hash=sha256:88c753efbcdfc2644a5012938c6b9753f1c64a5723a67f0301ca43e7b85dcf0e \
+ --hash=sha256:93a943cfd3e33bd03f77b97baa11990148687877b74193bf777956b67054dcc6 \
+ --hash=sha256:9be2f68fb9a40d8440cbf34cbf40758aa7f6093160bfc7fb018cce8e424f0c3a \
+ --hash=sha256:a0c509894fd4dccdff557068e5074999ae3b75f4c5a2d6fb5415e782e25679c4 \
+ --hash=sha256:ac8056e937f264995a82bf0053ca898a1cb1c9efc7cd68fa07fe0060734df7e4 \
+ --hash=sha256:aed56a86daa43966dd790ba86d4b810b219f75b4bb737461b6886ce2bde38fd6 \
+ --hash=sha256:e8986f1dd3221d1e741fda0a12eaa4a273f1d80a35e31a1ffe579e7c621d069e \
+ --hash=sha256:f99212a81c62b5f22f9e7c3e347aa00491114a5647e1f13bbebd79c3e5f08d75
+ # via readme-renderer
+nox==2023.4.22 \
+ --hash=sha256:0b1adc619c58ab4fa57d6ab2e7823fe47a32e70202f287d78474adcc7bda1891 \
+ --hash=sha256:46c0560b0dc609d7d967dc99e22cb463d3c4caf54a5fda735d6c11b5177e3a9f
# via -r requirements.in
-packaging==21.3 \
- --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \
- --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522
+packaging==23.2 \
+ --hash=sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5 \
+ --hash=sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7
# via
# gcp-releasetool
# nox
-pkginfo==1.8.3 \
- --hash=sha256:848865108ec99d4901b2f7e84058b6e7660aae8ae10164e015a6dcf5b242a594 \
- --hash=sha256:a84da4318dd86f870a9447a8c98340aa06216bfc6f2b7bdc4b8766984ae1867c
+pkginfo==1.9.6 \
+ --hash=sha256:4b7a555a6d5a22169fcc9cf7bfd78d296b0361adad412a346c1226849af5e546 \
+ --hash=sha256:8fd5896e8718a4372f0ea9cc9d96f6417c9b986e23a4d116dda26b62cc29d046
# via twine
-platformdirs==2.5.4 \
- --hash=sha256:1006647646d80f16130f052404c6b901e80ee4ed6bef6792e1f238a8969106f7 \
- --hash=sha256:af0276409f9a02373d540bf8480021a048711d572745aef4b7842dad245eba10
+platformdirs==3.11.0 \
+ --hash=sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3 \
+ --hash=sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e
# via virtualenv
protobuf==3.20.3 \
--hash=sha256:03038ac1cfbc41aa21f6afcbcd357281d7521b4157926f30ebecc8d4ea59dcb7 \
@@ -382,34 +410,31 @@ protobuf==3.20.3 \
# gcp-docuploader
# gcp-releasetool
# google-api-core
-pyasn1==0.4.8 \
- --hash=sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d \
- --hash=sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba
+ # googleapis-common-protos
+pyasn1==0.5.0 \
+ --hash=sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57 \
+ --hash=sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde
# via
# pyasn1-modules
# rsa
-pyasn1-modules==0.2.8 \
- --hash=sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e \
- --hash=sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74
+pyasn1-modules==0.3.0 \
+ --hash=sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c \
+ --hash=sha256:d3ccd6ed470d9ffbc716be08bd90efbd44d0734bc9303818f7336070984a162d
# via google-auth
pycparser==2.21 \
--hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \
--hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206
# via cffi
-pygments==2.15.0 \
- --hash=sha256:77a3299119af881904cd5ecd1ac6a66214b6e9bed1f2db16993b54adede64094 \
- --hash=sha256:f7e36cffc4c517fbc252861b9a6e4644ca0e5abadf9a113c72d1358ad09b9500
+pygments==2.16.1 \
+ --hash=sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692 \
+ --hash=sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29
# via
# readme-renderer
# rich
-pyjwt==2.6.0 \
- --hash=sha256:69285c7e31fc44f68a1feb309e948e0df53259d579295e6cfe2b1792329f05fd \
- --hash=sha256:d83c3d892a77bbb74d3e1a2cfa90afaadb60945205d1095d9221f04466f64c14
+pyjwt==2.8.0 \
+ --hash=sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de \
+ --hash=sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320
# via gcp-releasetool
-pyparsing==3.0.9 \
- --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb \
- --hash=sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc
- # via packaging
pyperclip==1.8.2 \
--hash=sha256:105254a8b04934f0bc84e9c24eb360a591aaf6535c9def5f29d92af107a9bf57
# via gcp-releasetool
@@ -417,9 +442,9 @@ python-dateutil==2.8.2 \
--hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \
--hash=sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9
# via gcp-releasetool
-readme-renderer==37.3 \
- --hash=sha256:cd653186dfc73055656f090f227f5cb22a046d7f71a841dfa305f55c9a513273 \
- --hash=sha256:f67a16caedfa71eef48a31b39708637a6f4664c4394801a7b0d6432d13907343
+readme-renderer==42.0 \
+ --hash=sha256:13d039515c1f24de668e2c93f2e877b9dbe6c6c32328b90a40a49d8b2b85f36d \
+ --hash=sha256:2d55489f83be4992fe4454939d1a051c33edbab778e82761d060c9fc6b308cd1
# via twine
requests==2.31.0 \
--hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \
@@ -430,17 +455,17 @@ requests==2.31.0 \
# google-cloud-storage
# requests-toolbelt
# twine
-requests-toolbelt==0.10.1 \
- --hash=sha256:18565aa58116d9951ac39baa288d3adb5b3ff975c4f25eee78555d89e8f247f7 \
- --hash=sha256:62e09f7ff5ccbda92772a29f394a49c3ad6cb181d568b1337626b2abb628a63d
+requests-toolbelt==1.0.0 \
+ --hash=sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6 \
+ --hash=sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06
# via twine
rfc3986==2.0.0 \
--hash=sha256:50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd \
--hash=sha256:97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c
# via twine
-rich==12.6.0 \
- --hash=sha256:a4eb26484f2c82589bd9a17c73d32a010b1e29d89f1604cd9bf3a2097b81bb5e \
- --hash=sha256:ba3a3775974105c221d31141f2c116f4fd65c5ceb0698657a11e9f295ec93fd0
+rich==13.6.0 \
+ --hash=sha256:2b38e2fe9ca72c9a00170a1a2d20c63c790d0e10ef1fe35eba76e1e7b1d7d245 \
+ --hash=sha256:5c14d22737e6d5084ef4771b62d5d4363165b403455a30a1c8ca39dc7b644bef
# via twine
rsa==4.9 \
--hash=sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7 \
@@ -454,43 +479,37 @@ six==1.16.0 \
--hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \
--hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254
# via
- # bleach
# gcp-docuploader
- # google-auth
# python-dateutil
-twine==4.0.1 \
- --hash=sha256:42026c18e394eac3e06693ee52010baa5313e4811d5a11050e7d48436cf41b9e \
- --hash=sha256:96b1cf12f7ae611a4a40b6ae8e9570215daff0611828f5fe1f37a16255ab24a0
+twine==4.0.2 \
+ --hash=sha256:929bc3c280033347a00f847236564d1c52a3e61b1ac2516c97c48f3ceab756d8 \
+ --hash=sha256:9e102ef5fdd5a20661eb88fad46338806c3bd32cf1db729603fe3697b1bc83c8
# via -r requirements.in
-typing-extensions==4.4.0 \
- --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \
- --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e
+typing-extensions==4.8.0 \
+ --hash=sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0 \
+ --hash=sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef
# via -r requirements.in
-urllib3==1.26.12 \
- --hash=sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e \
- --hash=sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997
+urllib3==2.0.7 \
+ --hash=sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84 \
+ --hash=sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e
# via
# requests
# twine
-virtualenv==20.16.7 \
- --hash=sha256:8691e3ff9387f743e00f6bb20f70121f5e4f596cae754531f2b3b3a1b1ac696e \
- --hash=sha256:efd66b00386fdb7dbe4822d172303f40cd05e50e01740b19ea42425cbe653e29
+virtualenv==20.24.6 \
+ --hash=sha256:02ece4f56fbf939dbbc33c0715159951d6bf14aaf5457b092e4548e1382455af \
+ --hash=sha256:520d056652454c5098a00c0f073611ccbea4c79089331f60bf9d7ba247bb7381
# via nox
-webencodings==0.5.1 \
- --hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \
- --hash=sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923
- # via bleach
-wheel==0.38.4 \
- --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \
- --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8
+wheel==0.41.3 \
+ --hash=sha256:488609bc63a29322326e05560731bf7bfea8e48ad646e1f5e40d366607de0942 \
+ --hash=sha256:4d4987ce51a49370ea65c0bfd2234e8ce80a12780820d9dc462597a6e60d0841
# via -r requirements.in
-zipp==3.10.0 \
- --hash=sha256:4fcb6f278987a6605757302a6e40e896257570d11c51628968ccb2a47e80c6c1 \
- --hash=sha256:7a7262fd930bd3e36c50b9a64897aec3fafff3dfdeec9623ae22b40e93f99bb8
+zipp==3.17.0 \
+ --hash=sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31 \
+ --hash=sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0
# via importlib-metadata
# The following packages are considered to be unsafe in a requirements file:
-setuptools==65.5.1 \
- --hash=sha256:d0b9a8433464d5800cbe05094acf5c6d52a91bfac9b52bcfc4d41382be5d5d31 \
- --hash=sha256:e197a19aa8ec9722928f2206f8de752def0e4c9fc6953527360d1c36d94ddb2f
+setuptools==68.2.2 \
+ --hash=sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87 \
+ --hash=sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a
# via -r requirements.in
diff --git a/.kokoro/samples/python3.12/common.cfg b/.kokoro/samples/python3.12/common.cfg
new file mode 100644
index 000000000..ae6100772
--- /dev/null
+++ b/.kokoro/samples/python3.12/common.cfg
@@ -0,0 +1,40 @@
+# Format: //devtools/kokoro/config/proto/build.proto
+
+# Build logs will be here
+action {
+ define_artifacts {
+ regex: "**/*sponge_log.xml"
+ }
+}
+
+# Specify which tests to run
+env_vars: {
+ key: "RUN_TESTS_SESSION"
+ value: "py-3.12"
+}
+
+# Declare build specific Cloud project.
+env_vars: {
+ key: "BUILD_SPECIFIC_GCLOUD_PROJECT"
+ value: "python-docs-samples-tests-312"
+}
+
+env_vars: {
+ key: "TRAMPOLINE_BUILD_FILE"
+ value: "github/python-pubsub/.kokoro/test-samples.sh"
+}
+
+# Configure the docker image for kokoro-trampoline.
+env_vars: {
+ key: "TRAMPOLINE_IMAGE"
+ value: "gcr.io/cloud-devrel-kokoro-resources/python-samples-testing-docker"
+}
+
+# Download secrets for samples
+gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/python-docs-samples"
+
+# Download trampoline resources.
+gfile_resources: "/bigstore/cloud-devrel-kokoro-resources/trampoline"
+
+# Use the trampoline script to run in docker.
+build_file: "python-pubsub/.kokoro/trampoline_v2.sh"
\ No newline at end of file
diff --git a/.kokoro/samples/python3.12/continuous.cfg b/.kokoro/samples/python3.12/continuous.cfg
new file mode 100644
index 000000000..a1c8d9759
--- /dev/null
+++ b/.kokoro/samples/python3.12/continuous.cfg
@@ -0,0 +1,6 @@
+# Format: //devtools/kokoro/config/proto/build.proto
+
+env_vars: {
+ key: "INSTALL_LIBRARY_FROM_SOURCE"
+ value: "True"
+}
\ No newline at end of file
diff --git a/.kokoro/samples/python3.12/periodic-head.cfg b/.kokoro/samples/python3.12/periodic-head.cfg
new file mode 100644
index 000000000..f9cfcd33e
--- /dev/null
+++ b/.kokoro/samples/python3.12/periodic-head.cfg
@@ -0,0 +1,11 @@
+# Format: //devtools/kokoro/config/proto/build.proto
+
+env_vars: {
+ key: "INSTALL_LIBRARY_FROM_SOURCE"
+ value: "True"
+}
+
+env_vars: {
+ key: "TRAMPOLINE_BUILD_FILE"
+ value: "github/python-pubsub/.kokoro/test-samples-against-head.sh"
+}
diff --git a/.kokoro/samples/python3.12/periodic.cfg b/.kokoro/samples/python3.12/periodic.cfg
new file mode 100644
index 000000000..71cd1e597
--- /dev/null
+++ b/.kokoro/samples/python3.12/periodic.cfg
@@ -0,0 +1,6 @@
+# Format: //devtools/kokoro/config/proto/build.proto
+
+env_vars: {
+ key: "INSTALL_LIBRARY_FROM_SOURCE"
+ value: "False"
+}
diff --git a/.kokoro/samples/python3.12/presubmit.cfg b/.kokoro/samples/python3.12/presubmit.cfg
new file mode 100644
index 000000000..a1c8d9759
--- /dev/null
+++ b/.kokoro/samples/python3.12/presubmit.cfg
@@ -0,0 +1,6 @@
+# Format: //devtools/kokoro/config/proto/build.proto
+
+env_vars: {
+ key: "INSTALL_LIBRARY_FROM_SOURCE"
+ value: "True"
+}
\ No newline at end of file
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 19409cbd3..6a8e16950 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -22,7 +22,7 @@ repos:
- id: end-of-file-fixer
- id: check-yaml
- repo: https://github.com/psf/black
- rev: 22.3.0
+ rev: 23.7.0
hooks:
- id: black
- repo: https://github.com/pycqa/flake8
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 7f3c731be..36be43f26 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,4 +1,4 @@
{
- ".": "2.18.4"
+ ".": "2.19.0"
}
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b0d33b1c5..5c54270b9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,20 @@
[1]: https://pypi.org/project/google-cloud-pubsub/#history
+## [2.19.0](https://github.com/googleapis/python-pubsub/compare/v2.18.4...v2.19.0) (2023-12-10)
+
+
+### Features
+
+* Add `use_table_schema` field to BigQueryConfig ([#1035](https://github.com/googleapis/python-pubsub/issues/1035)) ([ac6d912](https://github.com/googleapis/python-pubsub/commit/ac6d9126413b5c8e2b00727f7d74f03b7fb9d9ed))
+* Add support for Python 3.12 ([#1025](https://github.com/googleapis/python-pubsub/issues/1025)) ([660b8ea](https://github.com/googleapis/python-pubsub/commit/660b8eaf0daf975834a8333aedf8415867a4874d))
+* Introduce compatibility with native namespace packages ([#1024](https://github.com/googleapis/python-pubsub/issues/1024)) ([0432420](https://github.com/googleapis/python-pubsub/commit/0432420dcf18304dc1912075482eff0d2dc73009))
+
+
+### Bug Fixes
+
+* Use `retry_async` instead of `retry` in async client ([#1030](https://github.com/googleapis/python-pubsub/issues/1030)) ([05dd571](https://github.com/googleapis/python-pubsub/commit/05dd571760b71ae2930072f0677616dfc19d9511))
+
## [2.18.4](https://github.com/googleapis/python-pubsub/compare/v2.18.3...v2.18.4) (2023-09-09)
diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst
index 59283006e..03a700296 100644
--- a/CONTRIBUTING.rst
+++ b/CONTRIBUTING.rst
@@ -22,7 +22,7 @@ In order to add a feature:
documentation.
- The feature must work fully on the following CPython versions:
- 3.7, 3.8, 3.9, 3.10 and 3.11 on both UNIX and Windows.
+ 3.7, 3.8, 3.9, 3.10, 3.11 and 3.12 on both UNIX and Windows.
- The feature must not add unnecessary dependencies (where
"unnecessary" is of course subjective, but new dependencies should
@@ -72,7 +72,7 @@ We use `nox `__ to instrument our tests.
- To run a single unit test::
- $ nox -s unit-3.11 -- -k
+ $ nox -s unit-3.12 -- -k
.. note::
@@ -226,12 +226,14 @@ We support:
- `Python 3.9`_
- `Python 3.10`_
- `Python 3.11`_
+- `Python 3.12`_
.. _Python 3.7: https://docs.python.org/3.7/
.. _Python 3.8: https://docs.python.org/3.8/
.. _Python 3.9: https://docs.python.org/3.9/
.. _Python 3.10: https://docs.python.org/3.10/
.. _Python 3.11: https://docs.python.org/3.11/
+.. _Python 3.12: https://docs.python.org/3.12/
Supported versions can be found in our ``noxfile.py`` `config`_.
diff --git a/google/__init__.py b/google/__init__.py
deleted file mode 100644
index 9a1b64a6d..000000000
--- a/google/__init__.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Copyright 2020 Google LLC
-#
-# 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
-#
-# https://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.
-
-try:
- import pkg_resources
-
- pkg_resources.declare_namespace(__name__)
-except ImportError:
- import pkgutil
-
- __path__ = pkgutil.extend_path(__path__, __name__)
diff --git a/google/cloud/__init__.py b/google/cloud/__init__.py
deleted file mode 100644
index e1f8a4d20..000000000
--- a/google/cloud/__init__.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# Copyright 2020 Google LLC
-#
-# 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
-#
-# https://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.
-
-from typing import List
-
-try:
- import pkg_resources
-
- pkg_resources.declare_namespace(__name__)
-except ImportError:
- import pkgutil
-
- __path__: List[str] = pkgutil.extend_path(__path__, __name__) # type: ignore
diff --git a/google/cloud/pubsub_v1/publisher/_batch/thread.py b/google/cloud/pubsub_v1/publisher/_batch/thread.py
index 8b868eaee..e872fcf2b 100644
--- a/google/cloud/pubsub_v1/publisher/_batch/thread.py
+++ b/google/cloud/pubsub_v1/publisher/_batch/thread.py
@@ -388,7 +388,6 @@ def publish(
overflow = new_size > size_limit or new_count >= self.settings.max_messages
if not self._messages or not overflow:
-
# Store the actual message in the batch's message queue.
self._messages.append(message)
self._size = new_size
diff --git a/google/pubsub/gapic_version.py b/google/pubsub/gapic_version.py
index 5b1f1ec81..0f1a446f3 100644
--- a/google/pubsub/gapic_version.py
+++ b/google/pubsub/gapic_version.py
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-__version__ = "2.18.4" # {x-release-please-version}
+__version__ = "2.19.0" # {x-release-please-version}
diff --git a/google/pubsub_v1/gapic_version.py b/google/pubsub_v1/gapic_version.py
index 5b1f1ec81..0f1a446f3 100644
--- a/google/pubsub_v1/gapic_version.py
+++ b/google/pubsub_v1/gapic_version.py
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
#
-__version__ = "2.18.4" # {x-release-please-version}
+__version__ = "2.19.0" # {x-release-please-version}
diff --git a/google/pubsub_v1/services/publisher/async_client.py b/google/pubsub_v1/services/publisher/async_client.py
index e3c9647e9..ae632ea96 100644
--- a/google/pubsub_v1/services/publisher/async_client.py
+++ b/google/pubsub_v1/services/publisher/async_client.py
@@ -33,15 +33,14 @@
from google.api_core.client_options import ClientOptions
from google.api_core import exceptions as core_exceptions
from google.api_core import gapic_v1
-from google.api_core import retry as retries
-from google.api_core import timeout as timeouts # type: ignore
+from google.api_core import retry_async as retries
from google.auth import credentials as ga_credentials # type: ignore
from google.oauth2 import service_account # type: ignore
try:
- OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault]
+ OptionalRetry = Union[retries.AsyncRetry, gapic_v1.method._MethodDefault]
except AttributeError: # pragma: NO COVER
- OptionalRetry = Union[retries.Retry, object] # type: ignore
+ OptionalRetry = Union[retries.AsyncRetry, object] # type: ignore
from google.iam.v1 import iam_policy_pb2 # type: ignore
from google.iam.v1 import policy_pb2 # type: ignore
@@ -230,7 +229,7 @@ async def create_topic(
) -> pubsub.Topic:
r"""Creates the given topic with the given name. See the [resource
name rules]
- (https://cloud.google.com/pubsub/docs/admin#resource_names).
+ (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
.. code-block:: python
@@ -274,7 +273,7 @@ async def sample_create_topic():
This corresponds to the ``name`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (TimeoutType):
The timeout for this request.
@@ -306,7 +305,7 @@ async def sample_create_topic():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.create_topic,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -398,7 +397,7 @@ async def sample_update_topic():
This corresponds to the ``update_mask`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (TimeoutType):
The timeout for this request.
@@ -432,7 +431,7 @@ async def sample_update_topic():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.update_topic,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -519,7 +518,7 @@ async def sample_publish():
This corresponds to the ``messages`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (TimeoutType):
The timeout for this request.
@@ -553,7 +552,7 @@ async def sample_publish():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.publish,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=4.0,
@@ -636,7 +635,7 @@ async def sample_get_topic():
This corresponds to the ``topic`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (TimeoutType):
The timeout for this request.
@@ -668,7 +667,7 @@ async def sample_get_topic():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.get_topic,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -748,7 +747,7 @@ async def sample_list_topics():
This corresponds to the ``project`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (TimeoutType):
The timeout for this request.
@@ -784,7 +783,7 @@ async def sample_list_topics():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.list_topics,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -875,7 +874,7 @@ async def sample_list_topic_subscriptions():
This corresponds to the ``topic`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (TimeoutType):
The timeout for this request.
@@ -911,7 +910,7 @@ async def sample_list_topic_subscriptions():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.list_topic_subscriptions,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -1006,7 +1005,7 @@ async def sample_list_topic_snapshots():
This corresponds to the ``topic`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (TimeoutType):
The timeout for this request.
@@ -1042,7 +1041,7 @@ async def sample_list_topic_snapshots():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.list_topic_snapshots,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -1132,7 +1131,7 @@ async def sample_delete_topic():
This corresponds to the ``topic`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (TimeoutType):
The timeout for this request.
@@ -1160,7 +1159,7 @@ async def sample_delete_topic():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.delete_topic,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -1231,7 +1230,7 @@ async def sample_detach_subscription():
request (Optional[Union[google.pubsub_v1.types.DetachSubscriptionRequest, dict]]):
The request object. Request for the DetachSubscription
method.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (TimeoutType):
The timeout for this request.
@@ -1251,7 +1250,7 @@ async def sample_detach_subscription():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.detach_subscription,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -1299,7 +1298,7 @@ async def set_iam_policy(
request (:class:`~.policy_pb2.SetIamPolicyRequest`):
The request object. Request message for `SetIamPolicy`
method.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (TimeoutType):
The timeout for this request.
@@ -1420,7 +1419,7 @@ async def get_iam_policy(
request (:class:`~.iam_policy_pb2.GetIamPolicyRequest`):
The request object. Request message for `GetIamPolicy`
method.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (TimeoutType):
The timeout for this request.
@@ -1543,7 +1542,7 @@ async def test_iam_permissions(
request (:class:`~.iam_policy_pb2.TestIamPermissionsRequest`):
The request object. Request message for
`TestIamPermissions` method.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (TimeoutType):
The timeout for this request.
diff --git a/google/pubsub_v1/services/publisher/client.py b/google/pubsub_v1/services/publisher/client.py
index a06a6918e..1a92362c5 100644
--- a/google/pubsub_v1/services/publisher/client.py
+++ b/google/pubsub_v1/services/publisher/client.py
@@ -512,7 +512,7 @@ def create_topic(
) -> pubsub.Topic:
r"""Creates the given topic with the given name. See the [resource
name rules]
- (https://cloud.google.com/pubsub/docs/admin#resource_names).
+ (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
.. code-block:: python
diff --git a/google/pubsub_v1/services/publisher/transports/grpc.py b/google/pubsub_v1/services/publisher/transports/grpc.py
index 1aea7272c..268e687f0 100644
--- a/google/pubsub_v1/services/publisher/transports/grpc.py
+++ b/google/pubsub_v1/services/publisher/transports/grpc.py
@@ -241,7 +241,7 @@ def create_topic(self) -> Callable[[pubsub.Topic], pubsub.Topic]:
Creates the given topic with the given name. See the [resource
name rules]
- (https://cloud.google.com/pubsub/docs/admin#resource_names).
+ (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
Returns:
Callable[[~.Topic],
diff --git a/google/pubsub_v1/services/publisher/transports/grpc_asyncio.py b/google/pubsub_v1/services/publisher/transports/grpc_asyncio.py
index 9174a2033..8d971fa32 100644
--- a/google/pubsub_v1/services/publisher/transports/grpc_asyncio.py
+++ b/google/pubsub_v1/services/publisher/transports/grpc_asyncio.py
@@ -244,7 +244,7 @@ def create_topic(self) -> Callable[[pubsub.Topic], Awaitable[pubsub.Topic]]:
Creates the given topic with the given name. See the [resource
name rules]
- (https://cloud.google.com/pubsub/docs/admin#resource_names).
+ (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
Returns:
Callable[[~.Topic],
diff --git a/google/pubsub_v1/services/publisher/transports/rest.py b/google/pubsub_v1/services/publisher/transports/rest.py
index d02c4edee..de7215153 100644
--- a/google/pubsub_v1/services/publisher/transports/rest.py
+++ b/google/pubsub_v1/services/publisher/transports/rest.py
@@ -1363,7 +1363,6 @@ def __call__(
timeout: Optional[float] = None,
metadata: Sequence[Tuple[str, str]] = (),
) -> policy_pb2.Policy:
-
r"""Call the get iam policy method over HTTP.
Args:
@@ -1442,7 +1441,6 @@ def __call__(
timeout: Optional[float] = None,
metadata: Sequence[Tuple[str, str]] = (),
) -> policy_pb2.Policy:
-
r"""Call the set iam policy method over HTTP.
Args:
@@ -1527,7 +1525,6 @@ def __call__(
timeout: Optional[float] = None,
metadata: Sequence[Tuple[str, str]] = (),
) -> iam_policy_pb2.TestIamPermissionsResponse:
-
r"""Call the test iam permissions method over HTTP.
Args:
diff --git a/google/pubsub_v1/services/schema_service/async_client.py b/google/pubsub_v1/services/schema_service/async_client.py
index 59773b385..2d4b5d77b 100644
--- a/google/pubsub_v1/services/schema_service/async_client.py
+++ b/google/pubsub_v1/services/schema_service/async_client.py
@@ -33,14 +33,14 @@
from google.api_core.client_options import ClientOptions
from google.api_core import exceptions as core_exceptions
from google.api_core import gapic_v1
-from google.api_core import retry as retries
+from google.api_core import retry_async as retries
from google.auth import credentials as ga_credentials # type: ignore
from google.oauth2 import service_account # type: ignore
try:
- OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault]
+ OptionalRetry = Union[retries.AsyncRetry, gapic_v1.method._MethodDefault]
except AttributeError: # pragma: NO COVER
- OptionalRetry = Union[retries.Retry, object] # type: ignore
+ OptionalRetry = Union[retries.AsyncRetry, object] # type: ignore
from google.iam.v1 import iam_policy_pb2 # type: ignore
from google.iam.v1 import policy_pb2 # type: ignore
@@ -291,7 +291,7 @@ async def sample_create_schema():
This corresponds to the ``schema_id`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -326,7 +326,7 @@ async def sample_create_schema():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.create_schema,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -403,7 +403,7 @@ async def sample_get_schema():
This corresponds to the ``name`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -434,7 +434,7 @@ async def sample_get_schema():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.get_schema,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -512,7 +512,7 @@ async def sample_list_schemas():
This corresponds to the ``parent`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -547,7 +547,7 @@ async def sample_list_schemas():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.list_schemas,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -634,7 +634,7 @@ async def sample_list_schema_revisions():
This corresponds to the ``name`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -669,7 +669,7 @@ async def sample_list_schema_revisions():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.list_schema_revisions,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -767,7 +767,7 @@ async def sample_commit_schema():
This corresponds to the ``schema`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -800,7 +800,7 @@ async def sample_commit_schema():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.commit_schema,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -890,7 +890,7 @@ async def sample_rollback_schema():
This corresponds to the ``revision_id`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -923,7 +923,7 @@ async def sample_rollback_schema():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.rollback_schema,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -1011,7 +1011,7 @@ async def sample_delete_schema_revision():
This corresponds to the ``revision_id`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -1044,7 +1044,7 @@ async def sample_delete_schema_revision():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.delete_schema_revision,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -1118,7 +1118,7 @@ async def sample_delete_schema():
This corresponds to the ``name`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -1145,7 +1145,7 @@ async def sample_delete_schema():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.delete_schema,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -1231,7 +1231,7 @@ async def sample_validate_schema():
This corresponds to the ``schema`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -1266,7 +1266,7 @@ async def sample_validate_schema():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.validate_schema,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -1336,7 +1336,7 @@ async def sample_validate_message():
Args:
request (Optional[Union[google.pubsub_v1.types.ValidateMessageRequest, dict]]):
The request object. Request for the ``ValidateMessage`` method.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -1355,7 +1355,7 @@ async def sample_validate_message():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.validate_message,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -1401,7 +1401,7 @@ async def set_iam_policy(
request (:class:`~.policy_pb2.SetIamPolicyRequest`):
The request object. Request message for `SetIamPolicy`
method.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -1521,7 +1521,7 @@ async def get_iam_policy(
request (:class:`~.iam_policy_pb2.GetIamPolicyRequest`):
The request object. Request message for `GetIamPolicy`
method.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -1643,7 +1643,7 @@ async def test_iam_permissions(
request (:class:`~.iam_policy_pb2.TestIamPermissionsRequest`):
The request object. Request message for
`TestIamPermissions` method.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
diff --git a/google/pubsub_v1/services/schema_service/transports/rest.py b/google/pubsub_v1/services/schema_service/transports/rest.py
index faff019bc..0586bbf9d 100644
--- a/google/pubsub_v1/services/schema_service/transports/rest.py
+++ b/google/pubsub_v1/services/schema_service/transports/rest.py
@@ -1514,7 +1514,6 @@ def __call__(
timeout: Optional[float] = None,
metadata: Sequence[Tuple[str, str]] = (),
) -> policy_pb2.Policy:
-
r"""Call the get iam policy method over HTTP.
Args:
@@ -1593,7 +1592,6 @@ def __call__(
timeout: Optional[float] = None,
metadata: Sequence[Tuple[str, str]] = (),
) -> policy_pb2.Policy:
-
r"""Call the set iam policy method over HTTP.
Args:
@@ -1678,7 +1676,6 @@ def __call__(
timeout: Optional[float] = None,
metadata: Sequence[Tuple[str, str]] = (),
) -> iam_policy_pb2.TestIamPermissionsResponse:
-
r"""Call the test iam permissions method over HTTP.
Args:
diff --git a/google/pubsub_v1/services/subscriber/async_client.py b/google/pubsub_v1/services/subscriber/async_client.py
index fbc5535f1..13f30bd89 100644
--- a/google/pubsub_v1/services/subscriber/async_client.py
+++ b/google/pubsub_v1/services/subscriber/async_client.py
@@ -37,14 +37,14 @@
from google.api_core.client_options import ClientOptions
from google.api_core import exceptions as core_exceptions
from google.api_core import gapic_v1
-from google.api_core import retry as retries
+from google.api_core import retry_async as retries
from google.auth import credentials as ga_credentials # type: ignore
from google.oauth2 import service_account # type: ignore
try:
- OptionalRetry = Union[retries.Retry, gapic_v1.method._MethodDefault]
+ OptionalRetry = Union[retries.AsyncRetry, gapic_v1.method._MethodDefault]
except AttributeError: # pragma: NO COVER
- OptionalRetry = Union[retries.Retry, object] # type: ignore
+ OptionalRetry = Union[retries.AsyncRetry, object] # type: ignore
from google.iam.v1 import iam_policy_pb2 # type: ignore
from google.iam.v1 import policy_pb2 # type: ignore
@@ -238,17 +238,17 @@ async def create_subscription(
) -> pubsub.Subscription:
r"""Creates a subscription to a given topic. See the [resource name
rules]
- (https://cloud.google.com/pubsub/docs/admin#resource_names). If
- the subscription already exists, returns ``ALREADY_EXISTS``. If
- the corresponding topic doesn't exist, returns ``NOT_FOUND``.
+ (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+ If the subscription already exists, returns ``ALREADY_EXISTS``.
+ If the corresponding topic doesn't exist, returns ``NOT_FOUND``.
If the name is not provided in the request, the server will
assign a random name for this subscription on the same project
as the topic, conforming to the [resource name format]
- (https://cloud.google.com/pubsub/docs/admin#resource_names). The
- generated name is populated in the returned Subscription object.
- Note that for REST API requests, you must specify a name in the
- request.
+ (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+ The generated name is populated in the returned Subscription
+ object. Note that for REST API requests, you must specify a name
+ in the request.
.. code-block:: python
@@ -344,7 +344,7 @@ async def sample_create_subscription():
This corresponds to the ``ack_deadline_seconds`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -385,7 +385,7 @@ async def sample_create_subscription():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.create_subscription,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -465,7 +465,7 @@ async def sample_get_subscription():
This corresponds to the ``subscription`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -500,7 +500,7 @@ async def sample_get_subscription():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.get_subscription,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -597,7 +597,7 @@ async def sample_update_subscription():
This corresponds to the ``update_mask`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -634,7 +634,7 @@ async def sample_update_subscription():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.update_subscription,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -714,7 +714,7 @@ async def sample_list_subscriptions():
This corresponds to the ``project`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -749,7 +749,7 @@ async def sample_list_subscriptions():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.list_subscriptions,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -840,7 +840,7 @@ async def sample_delete_subscription():
This corresponds to the ``subscription`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -867,7 +867,7 @@ async def sample_delete_subscription():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.delete_subscription,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -971,7 +971,7 @@ async def sample_modify_ack_deadline():
This corresponds to the ``ack_deadline_seconds`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -1002,7 +1002,7 @@ async def sample_modify_ack_deadline():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.modify_ack_deadline,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -1093,7 +1093,7 @@ async def sample_acknowledge():
This corresponds to the ``ack_ids`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -1122,7 +1122,7 @@ async def sample_acknowledge():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.acknowledge,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -1226,7 +1226,7 @@ async def sample_pull():
This corresponds to the ``max_messages`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -1267,7 +1267,7 @@ async def sample_pull():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.pull,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -1363,7 +1363,7 @@ def request_generator():
This request is used to establish the initial stream as
well as to stream acknowledgements and ack deadline
modifications from the client to the server.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -1380,7 +1380,7 @@ def request_generator():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.streaming_pull,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=4.0,
@@ -1472,7 +1472,7 @@ async def sample_modify_push_config():
This corresponds to the ``push_config`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -1501,7 +1501,7 @@ async def sample_modify_push_config():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.modify_push_config,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -1582,7 +1582,7 @@ async def sample_get_snapshot():
This corresponds to the ``snapshot`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -1619,7 +1619,7 @@ async def sample_get_snapshot():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.get_snapshot,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -1703,7 +1703,7 @@ async def sample_list_snapshots():
This corresponds to the ``project`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -1738,7 +1738,7 @@ async def sample_list_snapshots():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.list_snapshots,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -1804,8 +1804,8 @@ async def create_snapshot(
the request, the server will assign a random name for this
snapshot on the same project as the subscription, conforming to
the [resource name format]
- (https://cloud.google.com/pubsub/docs/admin#resource_names). The
- generated name is populated in the returned Snapshot object.
+ (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+ The generated name is populated in the returned Snapshot object.
Note that for REST API requests, you must specify a name in the
request.
@@ -1846,7 +1846,7 @@ async def sample_create_snapshot():
project as the subscription. Note that for REST API
requests, you must specify a name. See the `resource
name
- rules `__.
+ rules `__.
Format is ``projects/{project}/snapshots/{snap}``.
This corresponds to the ``name`` field
@@ -1867,7 +1867,7 @@ async def sample_create_snapshot():
This corresponds to the ``subscription`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -1906,7 +1906,7 @@ async def sample_create_snapshot():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.create_snapshot,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -1996,7 +1996,7 @@ async def sample_update_snapshot():
This corresponds to the ``update_mask`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -2035,7 +2035,7 @@ async def sample_update_snapshot():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.update_snapshot,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -2120,7 +2120,7 @@ async def sample_delete_snapshot():
This corresponds to the ``snapshot`` field
on the ``request`` instance; if ``request`` is provided, this
should not be set.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -2147,7 +2147,7 @@ async def sample_delete_snapshot():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.delete_snapshot,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -2221,7 +2221,7 @@ async def sample_seek():
Args:
request (Optional[Union[google.pubsub_v1.types.SeekRequest, dict]]):
The request object. Request for the ``Seek`` method.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -2238,7 +2238,7 @@ async def sample_seek():
# and friendly error handling.
rpc = gapic_v1.method_async.wrap_method(
self._client._transport.seek,
- default_retry=retries.Retry(
+ default_retry=retries.AsyncRetry(
initial=0.1,
maximum=60.0,
multiplier=1.3,
@@ -2288,7 +2288,7 @@ async def set_iam_policy(
request (:class:`~.policy_pb2.SetIamPolicyRequest`):
The request object. Request message for `SetIamPolicy`
method.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -2408,7 +2408,7 @@ async def get_iam_policy(
request (:class:`~.iam_policy_pb2.GetIamPolicyRequest`):
The request object. Request message for `GetIamPolicy`
method.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
@@ -2530,7 +2530,7 @@ async def test_iam_permissions(
request (:class:`~.iam_policy_pb2.TestIamPermissionsRequest`):
The request object. Request message for
`TestIamPermissions` method.
- retry (google.api_core.retry.Retry): Designation of what errors, if any,
+ retry (google.api_core.retry_async.AsyncRetry): Designation of what errors, if any,
should be retried.
timeout (float): The timeout for this request.
metadata (Sequence[Tuple[str, str]]): Strings which should be
diff --git a/google/pubsub_v1/services/subscriber/client.py b/google/pubsub_v1/services/subscriber/client.py
index 03ff4ea51..f74e895a3 100644
--- a/google/pubsub_v1/services/subscriber/client.py
+++ b/google/pubsub_v1/services/subscriber/client.py
@@ -519,17 +519,17 @@ def create_subscription(
) -> pubsub.Subscription:
r"""Creates a subscription to a given topic. See the [resource name
rules]
- (https://cloud.google.com/pubsub/docs/admin#resource_names). If
- the subscription already exists, returns ``ALREADY_EXISTS``. If
- the corresponding topic doesn't exist, returns ``NOT_FOUND``.
+ (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+ If the subscription already exists, returns ``ALREADY_EXISTS``.
+ If the corresponding topic doesn't exist, returns ``NOT_FOUND``.
If the name is not provided in the request, the server will
assign a random name for this subscription on the same project
as the topic, conforming to the [resource name format]
- (https://cloud.google.com/pubsub/docs/admin#resource_names). The
- generated name is populated in the returned Subscription object.
- Note that for REST API requests, you must specify a name in the
- request.
+ (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+ The generated name is populated in the returned Subscription
+ object. Note that for REST API requests, you must specify a name
+ in the request.
.. code-block:: python
@@ -1961,8 +1961,8 @@ def create_snapshot(
the request, the server will assign a random name for this
snapshot on the same project as the subscription, conforming to
the [resource name format]
- (https://cloud.google.com/pubsub/docs/admin#resource_names). The
- generated name is populated in the returned Snapshot object.
+ (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+ The generated name is populated in the returned Snapshot object.
Note that for REST API requests, you must specify a name in the
request.
@@ -2003,7 +2003,7 @@ def sample_create_snapshot():
project as the subscription. Note that for REST API
requests, you must specify a name. See the `resource
name
- rules `__.
+ rules `__.
Format is ``projects/{project}/snapshots/{snap}``.
This corresponds to the ``name`` field
diff --git a/google/pubsub_v1/services/subscriber/transports/grpc.py b/google/pubsub_v1/services/subscriber/transports/grpc.py
index 1bc5ce8ca..0b1fcd3aa 100644
--- a/google/pubsub_v1/services/subscriber/transports/grpc.py
+++ b/google/pubsub_v1/services/subscriber/transports/grpc.py
@@ -245,17 +245,17 @@ def create_subscription(
Creates a subscription to a given topic. See the [resource name
rules]
- (https://cloud.google.com/pubsub/docs/admin#resource_names). If
- the subscription already exists, returns ``ALREADY_EXISTS``. If
- the corresponding topic doesn't exist, returns ``NOT_FOUND``.
+ (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+ If the subscription already exists, returns ``ALREADY_EXISTS``.
+ If the corresponding topic doesn't exist, returns ``NOT_FOUND``.
If the name is not provided in the request, the server will
assign a random name for this subscription on the same project
as the topic, conforming to the [resource name format]
- (https://cloud.google.com/pubsub/docs/admin#resource_names). The
- generated name is populated in the returned Subscription object.
- Note that for REST API requests, you must specify a name in the
- request.
+ (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+ The generated name is populated in the returned Subscription
+ object. Note that for REST API requests, you must specify a name
+ in the request.
Returns:
Callable[[~.Subscription],
@@ -617,8 +617,8 @@ def create_snapshot(
the request, the server will assign a random name for this
snapshot on the same project as the subscription, conforming to
the [resource name format]
- (https://cloud.google.com/pubsub/docs/admin#resource_names). The
- generated name is populated in the returned Snapshot object.
+ (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+ The generated name is populated in the returned Snapshot object.
Note that for REST API requests, you must specify a name in the
request.
diff --git a/google/pubsub_v1/services/subscriber/transports/grpc_asyncio.py b/google/pubsub_v1/services/subscriber/transports/grpc_asyncio.py
index 5ea0e13af..d32730c1e 100644
--- a/google/pubsub_v1/services/subscriber/transports/grpc_asyncio.py
+++ b/google/pubsub_v1/services/subscriber/transports/grpc_asyncio.py
@@ -248,17 +248,17 @@ def create_subscription(
Creates a subscription to a given topic. See the [resource name
rules]
- (https://cloud.google.com/pubsub/docs/admin#resource_names). If
- the subscription already exists, returns ``ALREADY_EXISTS``. If
- the corresponding topic doesn't exist, returns ``NOT_FOUND``.
+ (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+ If the subscription already exists, returns ``ALREADY_EXISTS``.
+ If the corresponding topic doesn't exist, returns ``NOT_FOUND``.
If the name is not provided in the request, the server will
assign a random name for this subscription on the same project
as the topic, conforming to the [resource name format]
- (https://cloud.google.com/pubsub/docs/admin#resource_names). The
- generated name is populated in the returned Subscription object.
- Note that for REST API requests, you must specify a name in the
- request.
+ (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+ The generated name is populated in the returned Subscription
+ object. Note that for REST API requests, you must specify a name
+ in the request.
Returns:
Callable[[~.Subscription],
@@ -630,8 +630,8 @@ def create_snapshot(
the request, the server will assign a random name for this
snapshot on the same project as the subscription, conforming to
the [resource name format]
- (https://cloud.google.com/pubsub/docs/admin#resource_names). The
- generated name is populated in the returned Snapshot object.
+ (https://cloud.google.com/pubsub/docs/pubsub-basics#resource_names).
+ The generated name is populated in the returned Snapshot object.
Note that for REST API requests, you must specify a name in the
request.
diff --git a/google/pubsub_v1/services/subscriber/transports/rest.py b/google/pubsub_v1/services/subscriber/transports/rest.py
index 7ce519310..c633c4115 100644
--- a/google/pubsub_v1/services/subscriber/transports/rest.py
+++ b/google/pubsub_v1/services/subscriber/transports/rest.py
@@ -2119,7 +2119,6 @@ def __call__(
timeout: Optional[float] = None,
metadata: Sequence[Tuple[str, str]] = (),
) -> policy_pb2.Policy:
-
r"""Call the get iam policy method over HTTP.
Args:
@@ -2198,7 +2197,6 @@ def __call__(
timeout: Optional[float] = None,
metadata: Sequence[Tuple[str, str]] = (),
) -> policy_pb2.Policy:
-
r"""Call the set iam policy method over HTTP.
Args:
@@ -2283,7 +2281,6 @@ def __call__(
timeout: Optional[float] = None,
metadata: Sequence[Tuple[str, str]] = (),
) -> iam_policy_pb2.TestIamPermissionsResponse:
-
r"""Call the test iam permissions method over HTTP.
Args:
diff --git a/google/pubsub_v1/types/pubsub.py b/google/pubsub_v1/types/pubsub.py
index 0331d0c97..ff7becd48 100644
--- a/google/pubsub_v1/types/pubsub.py
+++ b/google/pubsub_v1/types/pubsub.py
@@ -84,14 +84,15 @@ class MessageStoragePolicy(proto.Message):
Attributes:
allowed_persistence_regions (MutableSequence[str]):
- A list of IDs of GCP regions where messages
- that are published to the topic may be persisted
- in storage. Messages published by publishers
- running in non-allowed GCP regions (or running
- outside of GCP altogether) will be routed for
- storage in one of the allowed regions. An empty
- list means that no regions are allowed, and is
- not a valid configuration.
+ A list of IDs of Google Cloud regions where
+ messages that are published to the topic may be
+ persisted in storage. Messages published by
+ publishers running in non-allowed Google Cloud
+ regions (or running outside of Google Cloud
+ altogether) are routed for storage in one of the
+ allowed regions. An empty list means that no
+ regions are allowed, and is not a valid
+ configuration.
"""
allowed_persistence_regions: MutableSequence[str] = proto.RepeatedField(
@@ -1110,8 +1111,9 @@ class BigQueryConfig(proto.Message):
The name of the table to which to write data,
of the form {projectId}.{datasetId}.{tableId}
use_topic_schema (bool):
- When true, use the topic's schema as the
- columns to write to in BigQuery, if it exists.
+ Optional. When true, use the topic's schema as the columns
+ to write to in BigQuery, if it exists. ``use_topic_schema``
+ and ``use_table_schema`` cannot be enabled at the same time.
write_metadata (bool):
When true, write the subscription name, message_id,
publish_time, attributes, and ordering_key to additional
@@ -1130,6 +1132,10 @@ class BigQueryConfig(proto.Message):
Output only. An output-only field that
indicates whether or not the subscription can
receive messages.
+ use_table_schema (bool):
+ Optional. When true, use the BigQuery table's schema as the
+ columns to write to in BigQuery. ``use_table_schema`` and
+ ``use_topic_schema`` cannot be enabled at the same time.
"""
class State(proto.Enum):
@@ -1185,6 +1191,10 @@ class State(proto.Enum):
number=5,
enum=State,
)
+ use_table_schema: bool = proto.Field(
+ proto.BOOL,
+ number=6,
+ )
class CloudStorageConfig(proto.Message):
@@ -1885,7 +1895,7 @@ class CreateSnapshotRequest(proto.Message):
random name for this snapshot on the same project as the
subscription. Note that for REST API requests, you must
specify a name. See the `resource name
- rules `__.
+ rules `__.
Format is ``projects/{project}/snapshots/{snap}``.
subscription (str):
Required. The subscription whose backlog the snapshot
diff --git a/noxfile.py b/noxfile.py
index ae863d0fa..3f9db8b2c 100644
--- a/noxfile.py
+++ b/noxfile.py
@@ -17,51 +17,53 @@
# Generated by synthtool. DO NOT EDIT!
from __future__ import absolute_import
+
import os
import pathlib
import re
import shutil
+from typing import Dict, List
import warnings
import nox
FLAKE8_VERSION = "flake8==6.1.0"
-BLACK_VERSION = "black==22.3.0"
-ISORT_VERSION = "isort==5.10.1"
+BLACK_VERSION = "black[jupyter]==23.7.0"
+ISORT_VERSION = "isort==5.11.0"
LINT_PATHS = ["docs", "google", "tests", "noxfile.py", "setup.py"]
MYPY_VERSION = "mypy==0.910"
DEFAULT_PYTHON_VERSION = "3.8"
-UNIT_TEST_PYTHON_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11"]
+UNIT_TEST_PYTHON_VERSIONS: List[str] = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"]
UNIT_TEST_STANDARD_DEPENDENCIES = [
- "mock==5.0.0",
+ "mock",
"asyncmock",
"pytest",
"pytest-cov",
"pytest-asyncio",
]
-UNIT_TEST_EXTERNAL_DEPENDENCIES = []
-UNIT_TEST_LOCAL_DEPENDENCIES = []
-UNIT_TEST_DEPENDENCIES = []
-UNIT_TEST_EXTRAS = []
-UNIT_TEST_EXTRAS_BY_PYTHON = {}
-
-SYSTEM_TEST_PYTHON_VERSIONS = ["3.10"]
-SYSTEM_TEST_STANDARD_DEPENDENCIES = [
- "mock==5.0.0",
+UNIT_TEST_EXTERNAL_DEPENDENCIES: List[str] = []
+UNIT_TEST_LOCAL_DEPENDENCIES: List[str] = []
+UNIT_TEST_DEPENDENCIES: List[str] = []
+UNIT_TEST_EXTRAS: List[str] = []
+UNIT_TEST_EXTRAS_BY_PYTHON: Dict[str, List[str]] = {}
+
+SYSTEM_TEST_PYTHON_VERSIONS: List[str] = ["3.10"]
+SYSTEM_TEST_STANDARD_DEPENDENCIES: List[str] = [
+ "mock",
"pytest",
"google-cloud-testutils",
]
-SYSTEM_TEST_EXTERNAL_DEPENDENCIES = [
+SYSTEM_TEST_EXTERNAL_DEPENDENCIES: List[str] = [
"psutil",
"flaky",
]
-SYSTEM_TEST_LOCAL_DEPENDENCIES = []
-SYSTEM_TEST_DEPENDENCIES = []
-SYSTEM_TEST_EXTRAS = []
-SYSTEM_TEST_EXTRAS_BY_PYTHON = {}
+SYSTEM_TEST_LOCAL_DEPENDENCIES: List[str] = []
+SYSTEM_TEST_DEPENDENCIES: List[str] = []
+SYSTEM_TEST_EXTRAS: List[str] = []
+SYSTEM_TEST_EXTRAS_BY_PYTHON: Dict[str, List[str]] = {}
CURRENT_DIRECTORY = pathlib.Path(__file__).parent.absolute()
@@ -77,6 +79,7 @@
# https://github.com/googleapis/python-pubsub/pull/552#issuecomment-1016256936
# "mypy_samples", # TODO: uncomment when the check passes
"docs",
+ "format",
]
# Error if a python version is missing
@@ -103,7 +106,7 @@ def mypy(session):
# TODO: Only check the hand-written layer, the generated code does not pass
# mypy checks yet.
# https://github.com/googleapis/gapic-generator-python/issues/1092
- session.run("mypy", "google/cloud")
+ session.run("mypy", "-p", "google.cloud")
@nox.session(python=DEFAULT_PYTHON_VERSION)
@@ -240,7 +243,6 @@ def unit(session):
def install_systemtest_dependencies(session, *constraints):
-
# Use pre-release gRPC for system tests.
# Exclude version 1.52.0rc1 which has a known issue.
# See https://github.com/grpc/grpc/issues/32163
@@ -352,7 +354,7 @@ def docs(session):
)
-@nox.session(python="3.9")
+@nox.session(python="3.10")
def docfx(session):
"""Build the docfx yaml files for this library."""
diff --git a/owlbot.py b/owlbot.py
index 7539adfdb..338687588 100644
--- a/owlbot.py
+++ b/owlbot.py
@@ -336,7 +336,7 @@
samples=True,
cov_level=100,
versions=gcp.common.detect_versions(path="./google", default_first=True),
- unit_test_python_versions=["3.7", "3.8", "3.9", "3.10", "3.11"],
+ unit_test_python_versions=["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"],
system_test_python_versions=["3.10"],
system_test_external_dependencies=["psutil","flaky"],
)
@@ -353,9 +353,6 @@
s.replace(
"noxfile.py", r'"blacken",', '\g<0>\n "mypy",',
)
-s.replace(
- "noxfile.py", r'"mock"', '"mock==5.0.0"',
-)
s.replace(
"noxfile.py",
r"nox\.options\.error_on_missing_interpreters = True",
@@ -383,7 +380,7 @@ def mypy(session):
# TODO: Only check the hand-written layer, the generated code does not pass
# mypy checks yet.
# https://github.com/googleapis/gapic-generator-python/issues/1092
- session.run("mypy", "google/cloud")'''
+ session.run("mypy", "-p", "google.cloud")'''
),
)
@@ -399,7 +396,7 @@ def mypy(session):
)
s.replace(
"noxfile.py",
- r'session\.run\("mypy", "google/cloud"\)',
+ r'session\.run\("mypy", "-p", "google.cloud"\)',
textwrap.dedent(
''' \g<0>
diff --git a/pytest.ini b/pytest.ini
new file mode 100644
index 000000000..49de304e3
--- /dev/null
+++ b/pytest.ini
@@ -0,0 +1,10 @@
+[pytest]
+filterwarnings =
+ # treat all warnings as errors
+ error
+ # Remove once https://github.com/protocolbuffers/protobuf/issues/12186 is fixed
+ ignore:.*custom tp_new.*in Python 3.14:DeprecationWarning
+ # Remove once https://github.com/grpc/grpc/issues/35086 is fixed
+ ignore:There is no current event loop:DeprecationWarning:grpc.aio._channel
+ # Remove after support for Python 3.7 is dropped
+ ignore:After January 1, 2024, new releases of this library will drop support for Python 3.7:DeprecationWarning
\ No newline at end of file
diff --git a/samples/generated_samples/snippet_metadata_google.pubsub.v1.json b/samples/generated_samples/snippet_metadata_google.pubsub.v1.json
index 498025229..25ee6d056 100644
--- a/samples/generated_samples/snippet_metadata_google.pubsub.v1.json
+++ b/samples/generated_samples/snippet_metadata_google.pubsub.v1.json
@@ -8,7 +8,7 @@
],
"language": "PYTHON",
"name": "google-cloud-pubsub",
- "version": "2.18.4"
+ "version": "2.19.0"
},
"snippets": [
{
diff --git a/samples/snippets/noxfile.py b/samples/snippets/noxfile.py
index 1224cbe21..3b7135946 100644
--- a/samples/snippets/noxfile.py
+++ b/samples/snippets/noxfile.py
@@ -89,7 +89,7 @@ def get_pytest_env_vars() -> Dict[str, str]:
# DO NOT EDIT - automatically generated.
# All versions used to test samples.
-ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11"]
+ALL_VERSIONS = ["3.7", "3.8", "3.9", "3.10", "3.11", "3.12"]
# Any default versions that should be ignored.
IGNORED_VERSIONS = TEST_CONFIG["ignored_versions"]
diff --git a/samples/snippets/requirements-test.txt b/samples/snippets/requirements-test.txt
index 43d23800d..b3325ed9f 100644
--- a/samples/snippets/requirements-test.txt
+++ b/samples/snippets/requirements-test.txt
@@ -1,6 +1,6 @@
backoff==2.2.1
-pytest==7.4.2
+pytest==7.4.3
mock==5.1.0
flaky==3.7.0
-google-cloud-bigquery==3.11.4
-google-cloud-storage==2.10.0
+google-cloud-bigquery==3.13.0
+google-cloud-storage==2.13.0
diff --git a/samples/snippets/requirements.txt b/samples/snippets/requirements.txt
index a9308f39c..a3124ddce 100644
--- a/samples/snippets/requirements.txt
+++ b/samples/snippets/requirements.txt
@@ -1,4 +1,5 @@
-google-cloud-pubsub==2.18.3
-avro==1.11.2
-protobuf==4.24.2
-avro==1.11.2
+google-cloud-pubsub==2.18.4
+avro==1.11.3
+protobuf===4.24.4; python_version == '3.7'
+protobuf==4.25.1; python_version >= '3.8'
+avro==1.11.3
diff --git a/samples/snippets/schema.py b/samples/snippets/schema.py
index 40cd853c9..3260a0e19 100644
--- a/samples/snippets/schema.py
+++ b/samples/snippets/schema.py
@@ -473,7 +473,8 @@ def publish_avro_records(project_id: str, topic_id: str, avsc_file: str) -> None
topic_path = publisher_client.topic_path(project_id, topic_id)
# Prepare to write Avro records to the binary output stream.
- avro_schema = schema.parse(open(avsc_file, "rb").read())
+ with open(avsc_file, "rb") as file:
+ avro_schema = schema.parse(file.read())
writer = DatumWriter(avro_schema)
bout = io.BytesIO()
@@ -579,7 +580,8 @@ def subscribe_with_avro_schema(
subscriber = SubscriberClient()
subscription_path = subscriber.subscription_path(project_id, subscription_id)
- avro_schema = schema.parse(open(avsc_file, "rb").read())
+ with open(avsc_file, "rb") as file:
+ avro_schema = schema.parse(file.read())
def callback(message: pubsub_v1.subscriber.message.Message) -> None:
# Get the message serialization type.
@@ -642,7 +644,8 @@ def subscribe_with_avro_schema_with_revisions(
subscriber = SubscriberClient()
subscription_path = subscriber.subscription_path(project_id, subscription_id)
- writer_avro_schema = schema.parse(open(avsc_file, "rb").read())
+ with open(avsc_file, "rb") as file:
+ writer_avro_schema = schema.parse(file.read())
# Dict to keep readers for different schema revisions.
revisions_to_readers = {}
diff --git a/samples/snippets/subscriber.py b/samples/snippets/subscriber.py
index 897d2f47b..ab0c8aafa 100644
--- a/samples/snippets/subscriber.py
+++ b/samples/snippets/subscriber.py
@@ -191,7 +191,7 @@ def create_push_no_wrapper_subscription(
project_id: str, topic_id: str, subscription_id: str, endpoint: str
) -> None:
"""Create a new push no wrapper subscription on the given topic."""
- # [START pubsub_create_push_no_wrapper_subscription]
+ # [START pubsub_create_unwrapped_push_subscription]
from google.cloud import pubsub_v1
# TODO(developer)
@@ -224,7 +224,7 @@ def create_push_no_wrapper_subscription(
print(f"Push no wrapper subscription created: {subscription}.")
print(f"Endpoint for subscription is: {endpoint}")
print(f"No wrapper configuration for subscription is: {no_wrapper}")
- # [END pubsub_create_push_no_wrapper_subscription]
+ # [END pubsub_create_unwrapped_push_subscription]
def create_subscription_with_ordering(
@@ -358,7 +358,7 @@ def create_cloudstorage_subscription(
project_id: str, topic_id: str, subscription_id: str, bucket: str
) -> None:
"""Create a new CloudStorage subscription on the given topic."""
- # [START pubsub_cloudstorage_subscription]
+ # [START pubsub_create_cloud_storage_subscription]
from google.cloud import pubsub_v1
from google.protobuf import duration_pb2
@@ -407,7 +407,7 @@ def create_cloudstorage_subscription(
print(f"Bucket for subscription is: {bucket}")
print(f"Prefix is: {filename_prefix}")
print(f"Suffix is: {filename_suffix}")
- # [END pubsub_cloudstorage_subscription]
+ # [END pubsub_create_cloud_storage_subscription]
def delete_subscription(project_id: str, subscription_id: str) -> None:
@@ -1003,6 +1003,49 @@ def callback(message: pubsub_v1.subscriber.message.Message) -> None:
# [END pubsub_dead_letter_delivery_attempt]
+def receive_messages_with_concurrency_control(
+ project_id: str, subscription_id: str, timeout: Optional[float] = None
+) -> None:
+ # [START pubsub_subscriber_concurrency_control]
+ from concurrent import futures
+ from google.cloud import pubsub_v1
+
+ # TODO(developer)
+ # project_id = "your-project-id"
+ # subscription_id = "your-subscription-id"
+ # Number of seconds the subscriber should listen for messages
+ # timeout = 5.0
+
+ # An optional executor to use. If not specified, a default one with maximum 10
+ # threads will be created.
+ executor = futures.ThreadPoolExecutor(max_workers=5)
+ # A thread pool-based scheduler. It must not be shared across SubscriberClients.
+ scheduler = pubsub_v1.subscriber.scheduler.ThreadScheduler(executor)
+
+ subscriber = pubsub_v1.SubscriberClient()
+ subscription_path = subscriber.subscription_path(project_id, subscription_id)
+
+ def callback(message: pubsub_v1.subscriber.message.Message) -> None:
+ print(f"Received {message.data!r}.")
+ message.ack()
+
+ streaming_pull_future = subscriber.subscribe(
+ subscription_path, callback=callback, scheduler=scheduler
+ )
+ print(f"Listening for messages on {subscription_path}..\n")
+
+ # Wrap subscriber in a 'with' block to automatically call close() when done.
+ with subscriber:
+ try:
+ # When `timeout` is not set, result() will block indefinitely,
+ # unless an exception is encountered first.
+ streaming_pull_future.result(timeout=timeout)
+ except TimeoutError:
+ streaming_pull_future.cancel() # Trigger the shutdown.
+ streaming_pull_future.result() # Block until the shutdown is complete.
+ # [END pubsub_subscriber_concurrency_control]
+
+
if __name__ == "__main__": # noqa
parser = argparse.ArgumentParser(
description=__doc__,
@@ -1183,6 +1226,15 @@ def callback(message: pubsub_v1.subscriber.message.Message) -> None:
"timeout", default=None, type=float, nargs="?"
)
+ receive_messages_with_concurrency_control_parser = subparsers.add_parser(
+ "receive-messages-with-concurrency-control",
+ help=receive_messages_with_concurrency_control.__doc__,
+ )
+ receive_messages_with_concurrency_control_parser.add_argument("subscription_id")
+ receive_messages_with_concurrency_control_parser.add_argument(
+ "timeout", default=None, type=float, nargs="?"
+ )
+
args = parser.parse_args()
if args.command == "list-in-topic":
@@ -1275,3 +1327,7 @@ def callback(message: pubsub_v1.subscriber.message.Message) -> None:
receive_messages_with_delivery_attempts(
args.project_id, args.subscription_id, args.timeout
)
+ elif args.command == "receive-messages-with-concurrency-control":
+ receive_messages_with_concurrency_control(
+ args.project_id, args.subscription_id, args.timeout
+ )
diff --git a/samples/snippets/subscriber_test.py b/samples/snippets/subscriber_test.py
index 3fa94761c..53fefa109 100644
--- a/samples/snippets/subscriber_test.py
+++ b/samples/snippets/subscriber_test.py
@@ -1008,6 +1008,40 @@ def test_receive_synchronously(
subscriber_client.delete_subscription(request={"subscription": subscription_path})
+def test_receive_messages_with_concurrency_control(
+ subscriber_client: pubsub_v1.SubscriberClient,
+ publisher_client: pubsub_v1.PublisherClient,
+ topic: str,
+ capsys: CaptureFixture[str],
+) -> None:
+ subscription_async_receive_messages_with_concurrency_control_name = f"subscription-test-subscription-async-receive-messages-with-concurrency-control-{PY_VERSION}-{UUID}"
+
+ subscription_path = subscriber_client.subscription_path(
+ PROJECT_ID, subscription_async_receive_messages_with_concurrency_control_name
+ )
+
+ try:
+ subscriber_client.get_subscription(request={"subscription": subscription_path})
+ except NotFound:
+ subscriber_client.create_subscription(
+ request={"name": subscription_path, "topic": topic}
+ )
+
+ _ = _publish_messages(publisher_client, topic)
+
+ subscriber.receive_messages_with_flow_control(
+ PROJECT_ID, subscription_async_receive_messages_with_concurrency_control_name, 5
+ )
+
+ out, _ = capsys.readouterr()
+ assert "Listening" in out
+ assert subscription_async_receive_messages_with_concurrency_control_name in out
+ assert "message" in out
+
+ # Clean up.
+ subscriber_client.delete_subscription(request={"subscription": subscription_path})
+
+
@typed_flaky
def test_receive_synchronously_with_lease(
subscriber_client: pubsub_v1.SubscriberClient,
diff --git a/setup.py b/setup.py
index 7d70e25bc..d388d9443 100644
--- a/setup.py
+++ b/setup.py
@@ -56,14 +56,10 @@
packages = [
package
- for package in setuptools.PEP420PackageFinder.find()
+ for package in setuptools.find_namespace_packages()
if package.startswith("google")
]
-namespaces = ["google"]
-if "google.cloud" in packages:
- namespaces.append("google.cloud")
-
setuptools.setup(
name=name,
version=version,
@@ -84,12 +80,12 @@
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
+ "Programming Language :: Python :: 3.12",
"Operating System :: OS Independent",
"Topic :: Internet",
],
platforms="Posix; MacOS X; Windows",
packages=packages,
- namespace_packages=namespaces,
install_requires=dependencies,
extras_require=extras,
python_requires=">=3.7",
diff --git a/tests/unit/gapic/pubsub_v1/test_publisher.py b/tests/unit/gapic/pubsub_v1/test_publisher.py
index 6ced2805a..6511e2f8b 100644
--- a/tests/unit/gapic/pubsub_v1/test_publisher.py
+++ b/tests/unit/gapic/pubsub_v1/test_publisher.py
@@ -3370,8 +3370,9 @@ def test_create_topic_rest(request_type):
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.Topic.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.Topic.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -3447,8 +3448,9 @@ def test_create_topic_rest_required_fields(request_type=pubsub.Topic):
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.Topic.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.Topic.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -3567,8 +3569,9 @@ def test_create_topic_rest_flattened():
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.Topic.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.Topic.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -3633,8 +3636,9 @@ def test_update_topic_rest(request_type):
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.Topic.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.Topic.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -3705,8 +3709,9 @@ def test_update_topic_rest_required_fields(request_type=pubsub.UpdateTopicReques
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.Topic.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.Topic.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -3834,8 +3839,9 @@ def test_update_topic_rest_flattened():
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.Topic.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.Topic.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -3899,8 +3905,9 @@ def test_publish_rest(request_type):
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.PublishResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.PublishResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -3974,8 +3981,9 @@ def test_publish_rest_required_fields(request_type=pubsub.PublishRequest):
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.PublishResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.PublishResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -4105,8 +4113,9 @@ def test_publish_rest_flattened():
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.PublishResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.PublishResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -4173,8 +4182,9 @@ def test_get_topic_rest(request_type):
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.Topic.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.Topic.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -4249,8 +4259,9 @@ def test_get_topic_rest_required_fields(request_type=pubsub.GetTopicRequest):
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.Topic.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.Topic.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -4369,8 +4380,9 @@ def test_get_topic_rest_flattened():
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.Topic.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.Topic.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -4433,8 +4445,9 @@ def test_list_topics_rest(request_type):
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.ListTopicsResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.ListTopicsResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -4514,8 +4527,9 @@ def test_list_topics_rest_required_fields(request_type=pubsub.ListTopicsRequest)
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.ListTopicsResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.ListTopicsResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -4644,8 +4658,9 @@ def test_list_topics_rest_flattened():
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.ListTopicsResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.ListTopicsResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -4764,8 +4779,9 @@ def test_list_topic_subscriptions_rest(request_type):
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.ListTopicSubscriptionsResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.ListTopicSubscriptionsResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -4848,8 +4864,9 @@ def test_list_topic_subscriptions_rest_required_fields(
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.ListTopicSubscriptionsResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.ListTopicSubscriptionsResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -4980,8 +4997,9 @@ def test_list_topic_subscriptions_rest_flattened():
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.ListTopicSubscriptionsResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.ListTopicSubscriptionsResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -5103,8 +5121,9 @@ def test_list_topic_snapshots_rest(request_type):
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.ListTopicSnapshotsResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.ListTopicSnapshotsResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -5187,8 +5206,9 @@ def test_list_topic_snapshots_rest_required_fields(
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.ListTopicSnapshotsResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.ListTopicSnapshotsResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -5319,8 +5339,9 @@ def test_list_topic_snapshots_rest_flattened():
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.ListTopicSnapshotsResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.ListTopicSnapshotsResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -5682,8 +5703,9 @@ def test_detach_subscription_rest(request_type):
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.DetachSubscriptionResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.DetachSubscriptionResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -5757,8 +5779,9 @@ def test_detach_subscription_rest_required_fields(
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.DetachSubscriptionResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.DetachSubscriptionResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
diff --git a/tests/unit/gapic/pubsub_v1/test_schema_service.py b/tests/unit/gapic/pubsub_v1/test_schema_service.py
index ea09a79f3..c3585ae3b 100644
--- a/tests/unit/gapic/pubsub_v1/test_schema_service.py
+++ b/tests/unit/gapic/pubsub_v1/test_schema_service.py
@@ -3466,6 +3466,73 @@ def test_create_schema_rest(request_type):
"revision_id": "revision_id_value",
"revision_create_time": {"seconds": 751, "nanos": 543},
}
+ # The version of a generated dependency at test runtime may differ from the version used during generation.
+ # Delete any fields which are not present in the current runtime dependency
+ # See https://github.com/googleapis/gapic-generator-python/issues/1748
+
+ # Determine if the message type is proto-plus or protobuf
+ test_field = gp_schema.CreateSchemaRequest.meta.fields["schema"]
+
+ def get_message_fields(field):
+ # Given a field which is a message (composite type), return a list with
+ # all the fields of the message.
+ # If the field is not a composite type, return an empty list.
+ message_fields = []
+
+ if hasattr(field, "message") and field.message:
+ is_field_type_proto_plus_type = not hasattr(field.message, "DESCRIPTOR")
+
+ if is_field_type_proto_plus_type:
+ message_fields = field.message.meta.fields.values()
+ # Add `# pragma: NO COVER` because there may not be any `*_pb2` field types
+ else: # pragma: NO COVER
+ message_fields = field.message.DESCRIPTOR.fields
+ return message_fields
+
+ runtime_nested_fields = [
+ (field.name, nested_field.name)
+ for field in get_message_fields(test_field)
+ for nested_field in get_message_fields(field)
+ ]
+
+ subfields_not_in_runtime = []
+
+ # For each item in the sample request, create a list of sub fields which are not present at runtime
+ # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime
+ for field, value in request_init["schema"].items(): # pragma: NO COVER
+ result = None
+ is_repeated = False
+ # For repeated fields
+ if isinstance(value, list) and len(value):
+ is_repeated = True
+ result = value[0]
+ # For fields where the type is another message
+ if isinstance(value, dict):
+ result = value
+
+ if result and hasattr(result, "keys"):
+ for subfield in result.keys():
+ if (field, subfield) not in runtime_nested_fields:
+ subfields_not_in_runtime.append(
+ {
+ "field": field,
+ "subfield": subfield,
+ "is_repeated": is_repeated,
+ }
+ )
+
+ # Remove fields from the sample request which are not present in the runtime version of the dependency
+ # Add `# pragma: NO COVER` because this test code will not run if all subfields are present at runtime
+ for subfield_to_delete in subfields_not_in_runtime: # pragma: NO COVER
+ field = subfield_to_delete.get("field")
+ field_repeated = subfield_to_delete.get("is_repeated")
+ subfield = subfield_to_delete.get("subfield")
+ if subfield:
+ if field_repeated:
+ for i in range(0, len(request_init["schema"][field])):
+ del request_init["schema"][field][i][subfield]
+ else:
+ del request_init["schema"][field][subfield]
request = request_type(**request_init)
# Mock the http request call within the method and fake a response.
@@ -3481,8 +3548,9 @@ def test_create_schema_rest(request_type):
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = gp_schema.Schema.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = gp_schema.Schema.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -3561,8 +3629,9 @@ def test_create_schema_rest_required_fields(request_type=gp_schema.CreateSchemaR
response_value = Response()
response_value.status_code = 200
- pb_return_value = gp_schema.Schema.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = gp_schema.Schema.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -3654,13 +3723,6 @@ def test_create_schema_rest_bad_request(
# send a request that will satisfy transcoding
request_init = {"parent": "projects/sample1"}
- request_init["schema"] = {
- "name": "name_value",
- "type_": 1,
- "definition": "definition_value",
- "revision_id": "revision_id_value",
- "revision_create_time": {"seconds": 751, "nanos": 543},
- }
request = request_type(**request_init)
# Mock the http request call within the method and fake a BadRequest error.
@@ -3700,8 +3762,9 @@ def test_create_schema_rest_flattened():
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = gp_schema.Schema.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = gp_schema.Schema.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -3769,8 +3832,9 @@ def test_get_schema_rest(request_type):
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = schema.Schema.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = schema.Schema.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -3848,8 +3912,9 @@ def test_get_schema_rest_required_fields(request_type=schema.GetSchemaRequest):
response_value = Response()
response_value.status_code = 200
- pb_return_value = schema.Schema.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = schema.Schema.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -3970,8 +4035,9 @@ def test_get_schema_rest_flattened():
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = schema.Schema.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = schema.Schema.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -4034,8 +4100,9 @@ def test_list_schemas_rest(request_type):
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = schema.ListSchemasResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = schema.ListSchemasResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -4116,8 +4183,9 @@ def test_list_schemas_rest_required_fields(request_type=schema.ListSchemasReques
response_value = Response()
response_value.status_code = 200
- pb_return_value = schema.ListSchemasResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = schema.ListSchemasResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -4249,8 +4317,9 @@ def test_list_schemas_rest_flattened():
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = schema.ListSchemasResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = schema.ListSchemasResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -4368,8 +4437,9 @@ def test_list_schema_revisions_rest(request_type):
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = schema.ListSchemaRevisionsResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = schema.ListSchemaRevisionsResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -4452,8 +4522,9 @@ def test_list_schema_revisions_rest_required_fields(
response_value = Response()
response_value.status_code = 200
- pb_return_value = schema.ListSchemaRevisionsResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = schema.ListSchemaRevisionsResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -4587,8 +4658,9 @@ def test_list_schema_revisions_rest_flattened():
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = schema.ListSchemaRevisionsResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = schema.ListSchemaRevisionsResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -4712,8 +4784,9 @@ def test_commit_schema_rest(request_type):
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = gp_schema.Schema.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = gp_schema.Schema.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -4790,8 +4863,9 @@ def test_commit_schema_rest_required_fields(request_type=gp_schema.CommitSchemaR
response_value = Response()
response_value.status_code = 200
- pb_return_value = gp_schema.Schema.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = gp_schema.Schema.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -4921,8 +4995,9 @@ def test_commit_schema_rest_flattened():
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = gp_schema.Schema.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = gp_schema.Schema.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -4989,8 +5064,9 @@ def test_rollback_schema_rest(request_type):
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = schema.Schema.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = schema.Schema.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -5073,8 +5149,9 @@ def test_rollback_schema_rest_required_fields(
response_value = Response()
response_value.status_code = 200
- pb_return_value = schema.Schema.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = schema.Schema.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -5204,8 +5281,9 @@ def test_rollback_schema_rest_flattened():
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = schema.Schema.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = schema.Schema.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -5273,8 +5351,9 @@ def test_delete_schema_revision_rest(request_type):
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = schema.Schema.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = schema.Schema.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -5354,8 +5433,9 @@ def test_delete_schema_revision_rest_required_fields(
response_value = Response()
response_value.status_code = 200
- pb_return_value = schema.Schema.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = schema.Schema.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -5479,8 +5559,9 @@ def test_delete_schema_revision_rest_flattened():
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = schema.Schema.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = schema.Schema.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -5790,8 +5871,9 @@ def test_validate_schema_rest(request_type):
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = gp_schema.ValidateSchemaResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = gp_schema.ValidateSchemaResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -5866,8 +5948,9 @@ def test_validate_schema_rest_required_fields(
response_value = Response()
response_value.status_code = 200
- pb_return_value = gp_schema.ValidateSchemaResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = gp_schema.ValidateSchemaResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -6001,8 +6084,9 @@ def test_validate_schema_rest_flattened():
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = gp_schema.ValidateSchemaResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = gp_schema.ValidateSchemaResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -6065,8 +6149,9 @@ def test_validate_message_rest(request_type):
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = schema.ValidateMessageResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = schema.ValidateMessageResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -6141,8 +6226,9 @@ def test_validate_message_rest_required_fields(
response_value = Response()
response_value.status_code = 200
- pb_return_value = schema.ValidateMessageResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = schema.ValidateMessageResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
diff --git a/tests/unit/gapic/pubsub_v1/test_subscriber.py b/tests/unit/gapic/pubsub_v1/test_subscriber.py
index 058c33d9f..94f7e301e 100644
--- a/tests/unit/gapic/pubsub_v1/test_subscriber.py
+++ b/tests/unit/gapic/pubsub_v1/test_subscriber.py
@@ -2888,7 +2888,6 @@ def test_pull_flattened_error():
client.pull(
pubsub.PullRequest(),
subscription="subscription_value",
- return_immediately=True,
max_messages=1277,
)
@@ -2942,7 +2941,6 @@ async def test_pull_flattened_error_async():
await client.pull(
pubsub.PullRequest(),
subscription="subscription_value",
- return_immediately=True,
max_messages=1277,
)
@@ -4796,8 +4794,9 @@ def test_create_subscription_rest(request_type):
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.Subscription.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.Subscription.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -4883,8 +4882,9 @@ def test_create_subscription_rest_required_fields(request_type=pubsub.Subscripti
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.Subscription.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.Subscription.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -5016,8 +5016,9 @@ def test_create_subscription_rest_flattened():
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.Subscription.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.Subscription.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -5091,8 +5092,9 @@ def test_get_subscription_rest(request_type):
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.Subscription.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.Subscription.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -5175,8 +5177,9 @@ def test_get_subscription_rest_required_fields(
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.Subscription.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.Subscription.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -5297,8 +5300,9 @@ def test_get_subscription_rest_flattened():
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.Subscription.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.Subscription.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -5370,8 +5374,9 @@ def test_update_subscription_rest(request_type):
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.Subscription.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.Subscription.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -5450,8 +5455,9 @@ def test_update_subscription_rest_required_fields(
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.Subscription.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.Subscription.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -5585,8 +5591,9 @@ def test_update_subscription_rest_flattened():
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.Subscription.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.Subscription.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -5652,8 +5659,9 @@ def test_list_subscriptions_rest(request_type):
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.ListSubscriptionsResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.ListSubscriptionsResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -5735,8 +5743,9 @@ def test_list_subscriptions_rest_required_fields(
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.ListSubscriptionsResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.ListSubscriptionsResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -5869,8 +5878,9 @@ def test_list_subscriptions_rest_flattened():
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.ListSubscriptionsResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.ListSubscriptionsResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -6777,8 +6787,9 @@ def test_pull_rest(request_type):
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.PullResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.PullResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -6855,8 +6866,9 @@ def test_pull_rest_required_fields(request_type=pubsub.PullRequest):
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.PullResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.PullResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -6979,7 +6991,6 @@ def test_pull_rest_flattened():
# get truthy value for each flattened field
mock_args = dict(
subscription="subscription_value",
- return_immediately=True,
max_messages=1277,
)
mock_args.update(sample_request)
@@ -6987,8 +6998,9 @@ def test_pull_rest_flattened():
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.PullResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.PullResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -7017,7 +7029,6 @@ def test_pull_rest_flattened_error(transport: str = "rest"):
client.pull(
pubsub.PullRequest(),
subscription="subscription_value",
- return_immediately=True,
max_messages=1277,
)
@@ -7329,8 +7340,9 @@ def test_get_snapshot_rest(request_type):
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.Snapshot.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.Snapshot.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -7404,8 +7416,9 @@ def test_get_snapshot_rest_required_fields(request_type=pubsub.GetSnapshotReques
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.Snapshot.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.Snapshot.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -7526,8 +7539,9 @@ def test_get_snapshot_rest_flattened():
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.Snapshot.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.Snapshot.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -7590,8 +7604,9 @@ def test_list_snapshots_rest(request_type):
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.ListSnapshotsResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.ListSnapshotsResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -7671,8 +7686,9 @@ def test_list_snapshots_rest_required_fields(request_type=pubsub.ListSnapshotsRe
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.ListSnapshotsResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.ListSnapshotsResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -7803,8 +7819,9 @@ def test_list_snapshots_rest_flattened():
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.ListSnapshotsResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.ListSnapshotsResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -7923,8 +7940,9 @@ def test_create_snapshot_rest(request_type):
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.Snapshot.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.Snapshot.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -8005,8 +8023,9 @@ def test_create_snapshot_rest_required_fields(
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.Snapshot.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.Snapshot.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -8136,8 +8155,9 @@ def test_create_snapshot_rest_flattened():
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.Snapshot.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.Snapshot.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -8202,8 +8222,9 @@ def test_update_snapshot_rest(request_type):
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.Snapshot.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.Snapshot.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -8275,8 +8296,9 @@ def test_update_snapshot_rest_required_fields(
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.Snapshot.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.Snapshot.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -8406,8 +8428,9 @@ def test_update_snapshot_rest_flattened():
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.Snapshot.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.Snapshot.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -8719,8 +8742,9 @@ def test_seek_rest(request_type):
# Wrap the value into a proper Response obj
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.SeekResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.SeekResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
@@ -8793,8 +8817,9 @@ def test_seek_rest_required_fields(request_type=pubsub.SeekRequest):
response_value = Response()
response_value.status_code = 200
- pb_return_value = pubsub.SeekResponse.pb(return_value)
- json_return_value = json_format.MessageToJson(pb_return_value)
+ # Convert return value to protobuf type
+ return_value = pubsub.SeekResponse.pb(return_value)
+ json_return_value = json_format.MessageToJson(return_value)
response_value._content = json_return_value.encode("UTF-8")
req.return_value = response_value
diff --git a/tests/unit/pubsub_v1/publisher/test_flow_controller.py b/tests/unit/pubsub_v1/publisher/test_flow_controller.py
index ee923a435..776c6db41 100644
--- a/tests/unit/pubsub_v1/publisher/test_flow_controller.py
+++ b/tests/unit/pubsub_v1/publisher/test_flow_controller.py
@@ -19,7 +19,6 @@
from typing import Callable
from typing import Sequence
from typing import Union
-import warnings
import pytest
@@ -179,7 +178,10 @@ def test_incorrectly_releasing_too_many_messages():
msg3 = grpc_types.PubsubMessage(data=b"z" * 100)
# Releasing a message that would make the load negative should result in a warning.
- with warnings.catch_warnings(record=True) as warned:
+ with pytest.warns(
+ RuntimeWarning,
+ match="Releasing a message that was never added or already released",
+ ) as warned:
flow_controller.release(msg1)
assert len(warned) == 1
@@ -438,7 +440,7 @@ def test_warning_on_internal_reservation_stats_error_when_unblocking():
assert reservation is not None, "No messages blocked by flow controller."
reservation.bytes_reserved = reservation.bytes_needed + 1
- with warnings.catch_warnings(record=True) as warned:
+ with pytest.warns(RuntimeWarning, match="Too many bytes reserved.") as warned:
_run_in_daemon(flow_controller.release, [msg1], releasing_1_done)
if not releasing_1_done.wait(timeout=0.1):
pytest.fail("Releasing a message blocked or errored.") # pragma: NO COVER
diff --git a/tests/unit/pubsub_v1/publisher/test_publisher_client.py b/tests/unit/pubsub_v1/publisher/test_publisher_client.py
index 6c68c3943..5d6013654 100644
--- a/tests/unit/pubsub_v1/publisher/test_publisher_client.py
+++ b/tests/unit/pubsub_v1/publisher/test_publisher_client.py
@@ -28,7 +28,6 @@
import pytest
import time
-import warnings
from google.api_core import gapic_v1
from google.api_core import retry as retries
@@ -60,7 +59,7 @@ def _assert_retries_equal(retry, retry2):
def test_api_property_deprecated(creds):
client = publisher.Client(credentials=creds)
- with warnings.catch_warnings(record=True) as warned:
+ with pytest.warns(DeprecationWarning, match="client.api") as warned:
client.api
assert len(warned) == 1
@@ -72,7 +71,7 @@ def test_api_property_deprecated(creds):
def test_api_property_proxy_to_generated_client(creds):
client = publisher.Client(credentials=creds)
- with warnings.catch_warnings(record=True):
+ with pytest.warns(DeprecationWarning, match="client.api"):
api_object = client.api
# Not a perfect check, but we are satisficed if the returned API object indeed
@@ -636,7 +635,7 @@ def test_resume_publish(creds):
client._set_sequencer(topic=topic, sequencer=sequencer, ordering_key=ordering_key)
client.resume_publish(topic, ordering_key)
- assert sequencer.unpause.called_once()
+ sequencer.unpause.assert_called_once()
def test_resume_publish_no_sequencer_found(creds):
diff --git a/tests/unit/pubsub_v1/subscriber/test_dispatcher.py b/tests/unit/pubsub_v1/subscriber/test_dispatcher.py
index d4813911c..89d72c61d 100644
--- a/tests/unit/pubsub_v1/subscriber/test_dispatcher.py
+++ b/tests/unit/pubsub_v1/subscriber/test_dispatcher.py
@@ -361,7 +361,8 @@ def test_unknown_request_type():
items = ["a random string, not a known request type"]
manager.send_unary_ack.return_value = (items, [])
- dispatcher_.dispatch_callback(items)
+ with pytest.warns(RuntimeWarning, match="Skipping unknown request item of type"):
+ dispatcher_.dispatch_callback(items)
def test_ack():
diff --git a/tests/unit/pubsub_v1/subscriber/test_scheduler.py b/tests/unit/pubsub_v1/subscriber/test_scheduler.py
index ff76fa09d..3ed1978c1 100644
--- a/tests/unit/pubsub_v1/subscriber/test_scheduler.py
+++ b/tests/unit/pubsub_v1/subscriber/test_scheduler.py
@@ -14,10 +14,10 @@
import concurrent.futures
import queue
+import pytest
import sys
import threading
import time
-import warnings
# special case python < 3.8
if sys.version_info.major == 3 and sys.version_info.minor < 8:
@@ -76,7 +76,9 @@ def callback(*args, **kwargs):
scheduler_.schedule(callback, "arg1", kwarg1="meep")
scheduler_._executor.shutdown()
- with warnings.catch_warnings(record=True) as warned:
+ with pytest.warns(
+ RuntimeWarning, match="Scheduling a callback after executor shutdown"
+ ) as warned:
scheduler_.schedule(callback, "arg2", kwarg2="boop")
assert len(warned) == 1
diff --git a/tests/unit/pubsub_v1/subscriber/test_streaming_pull_manager.py b/tests/unit/pubsub_v1/subscriber/test_streaming_pull_manager.py
index 199aea256..1f781b722 100644
--- a/tests/unit/pubsub_v1/subscriber/test_streaming_pull_manager.py
+++ b/tests/unit/pubsub_v1/subscriber/test_streaming_pull_manager.py
@@ -1157,7 +1157,6 @@ def test_heartbeat_stream_ack_deadline_seconds(caplog):
"google.cloud.pubsub_v1.subscriber._protocol.heartbeater.Heartbeater", autospec=True
)
def test_open(heartbeater, dispatcher, leaser, background_consumer, resumable_bidi_rpc):
-
manager = make_manager()
with mock.patch.object(
diff --git a/tests/unit/pubsub_v1/subscriber/test_subscriber_client.py b/tests/unit/pubsub_v1/subscriber/test_subscriber_client.py
index 83ef3f06d..bedfde79a 100644
--- a/tests/unit/pubsub_v1/subscriber/test_subscriber_client.py
+++ b/tests/unit/pubsub_v1/subscriber/test_subscriber_client.py
@@ -13,7 +13,6 @@
# limitations under the License.
import sys
-import warnings
import grpc
@@ -218,7 +217,7 @@ def test_context_manager_raises_if_closed(creds):
def test_api_property_deprecated(creds):
client = subscriber.Client(credentials=creds)
- with warnings.catch_warnings(record=True) as warned:
+ with pytest.warns(DeprecationWarning, match="client.api") as warned:
client.api
assert len(warned) == 1
@@ -230,7 +229,7 @@ def test_api_property_deprecated(creds):
def test_api_property_proxy_to_generated_client(creds):
client = subscriber.Client(credentials=creds)
- with warnings.catch_warnings(record=True):
+ with pytest.warns(DeprecationWarning, match="client.api"):
api_object = client.api
# Not a perfect check, but we are satisficed if the returned API object indeed
@@ -262,9 +261,10 @@ def test_sync_pull_warning_if_return_immediately(creds):
client = subscriber.Client(credentials=creds)
subscription_path = "projects/foo/subscriptions/bar"
- with mock.patch.object(
- client._transport, "_wrapped_methods"
- ), warnings.catch_warnings(record=True) as warned:
+ with mock.patch.object(client._transport, "_wrapped_methods"), pytest.warns(
+ DeprecationWarning,
+ match="The return_immediately flag is deprecated and should be set to False",
+ ) as warned:
client.pull(subscription=subscription_path, return_immediately=True)
# Setting the deprecated return_immediately flag to True should emit a warning.
@@ -287,7 +287,10 @@ async def test_sync_pull_warning_if_return_immediately_async(creds):
new=mock.AsyncMock,
)
- with patcher, warnings.catch_warnings(record=True) as warned:
+ with patcher, pytest.warns(
+ DeprecationWarning,
+ match="The return_immediately flag is deprecated and should be set to False",
+ ) as warned:
await client.pull(subscription=subscription_path, return_immediately=True)
# Setting the deprecated return_immediately flag to True should emit a warning.
diff --git a/tests/unit/test_packaging.py b/tests/unit/test_packaging.py
new file mode 100644
index 000000000..6dc70e3d1
--- /dev/null
+++ b/tests/unit/test_packaging.py
@@ -0,0 +1,37 @@
+# Copyright 2023 Google LLC
+#
+# 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 subprocess
+import sys
+
+
+def test_namespace_package_compat(tmp_path):
+ # The ``google`` namespace package should not be masked
+ # by the presence of ``google-cloud-pubsub``.
+ google = tmp_path / "google"
+ google.mkdir()
+ google.joinpath("othermod.py").write_text("")
+ env = dict(os.environ, PYTHONPATH=str(tmp_path))
+ cmd = [sys.executable, "-m", "google.othermod"]
+ subprocess.check_call(cmd, env=env)
+
+ # The ``google.cloud`` namespace package should not be masked
+ # by the presence of ``google-cloud-pubsub``.
+ google_cloud = tmp_path / "google" / "cloud"
+ google_cloud.mkdir()
+ google_cloud.joinpath("othermod.py").write_text("")
+ env = dict(os.environ, PYTHONPATH=str(tmp_path))
+ cmd = [sys.executable, "-m", "google.cloud.othermod"]
+ subprocess.check_call(cmd, env=env)